Skip to content

GukDaHye/content-platform

Repository files navigation

Content Platform Backend

콘텐츠 플랫폼 프로젝트입니다.

프로젝트 개요

대용량 트래픽을 처리할 수 있는 확장 가능한 콘텐츠 플랫폼 백엔드 시스템입니다. Node.js/TypeScript 기반으로 구축되었으며, 실제 서비스 운영을 고려한 아키텍처를 적용했습니다.

주요 특징

  • 확장 가능한 아키텍처: Clean Architecture 패턴 적용
  • 성능 최적화: Redis 캐싱, 배치 처리, 인덱싱 전략
  • 안정성: 포괄적인 테스트 커버리지, 에러 핸들링, 모니터링
  • 개발 생산성: TypeScript, Docker, CI/CD 파이프라인

기술 스택

  • Backend: Node.js, Express.js, TypeScript
  • Database: MySQL (TypeORM), Redis
  • Authentication: JWT, bcrypt
  • Testing: Jest, Supertest
  • DevOps: Docker, GitHub Actions
  • Monitoring: Winston, Custom Metrics

프로젝트 구조

src/
├── config/         # 환경 설정
├── controllers/    # API 엔드포인트 핸들러
├── services/       # 비즈니스 로직
├── repositories/   # 데이터 접근 계층
├── models/         # TypeORM 엔티티
├── middlewares/    # Express 미들웨어
├── workers/        # 백그라운드 작업
└── utils/          # 유틸리티 함수

주요 기능

1. 사용자 인증 및 인가

  • JWT 기반 인증
  • 역할 기반 접근 제어 (FREE/PREMIUM)
  • Redis 세션 관리

2. 콘텐츠 관리

  • CRUD API with 페이지네이션
  • 카테고리별 필터링
  • 조회수 추적 (배치 처리)
  • 프리미엄 콘텐츠 접근 제어

3. 구독 시스템

  • 월간/연간 구독 플랜
  • 자동 만료 처리
  • 구독 상태 캐싱

4. 성능 최적화

  • 캐싱 전략: Redis를 활용한 다층 캐싱
  • 배치 처리: 조회수 등 쓰기 작업 최적화
  • 인덱싱: 복합 인덱스를 통한 쿼리 최적화
  • Connection Pooling: 데이터베이스 연결 관리

아키텍처 결정 사항

1. TypeORM 선택 이유

  • TypeScript와의 뛰어난 통합
  • Active Record & Data Mapper 패턴 모두 지원
  • 마이그레이션 관리 용이

2. Redis 활용 전략

// 1. 세션 관리
await redis.set(`session:${userId}`, token, 'EX', 7 * 24 * 60 * 60);

// 2. 캐싱 레이어
const cacheKey = `contents:${page}:${limit}:${categoryId}`;
await redis.set(cacheKey, JSON.stringify(result), 'EX', 300);

// 3. 배치 처리용 임시 저장소
await redis.hincrby('content:views', contentId, 1);

3. 에러 처리 전략

  • 중앙집중식 에러 핸들러
  • 커스텀 에러 클래스
  • 적절한 HTTP 상태 코드 반환

성능 메트릭

  • 응답 시간: p95 < 100ms (캐시 히트 시)
  • 처리량: 10,000+ req/min 처리 가능
  • 가용성: 99.9% 목표

테스트

# 단위 테스트
npm test

# 통합 테스트
npm run test:integration

# 커버리지 리포트
npm run test:coverage

현재 테스트 커버리지: 85%+

실행 방법

# 1. 의존성 설치
npm install

# 2. 환경 변수 설정
cp .env.example .env

# 3. Docker 컨테이너 실행
docker-compose up -d

# 4. 마이그레이션 실행
npm run migration:run

# 5. 개발 서버 시작
npm run dev

API 문서

Swagger UI: http://localhost:3000/api-docs

주요 엔드포인트:

  • POST /api/v1/auth/register - 회원가입
  • POST /api/v1/auth/login - 로그인
  • GET /api/v1/contents - 콘텐츠 목록
  • GET /api/v1/contents/:id - 콘텐츠 상세
  • POST /api/v1/contents - 콘텐츠 생성 (인증 필요)

향후 개선 사항

  1. 마이크로서비스 전환

    • 인증, 콘텐츠, 구독을 별도 서비스로 분리
    • gRPC 또는 메시지 큐를 통한 통신
  2. 검색 기능 강화

    • Elasticsearch 통합
    • 형태소 분석기 적용
  3. 실시간 기능

    • WebSocket을 통한 실시간 알림
    • 콘텐츠 실시간 업데이트

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published