Skip to content

Commit 588e970

Browse files
authored
Update README.md
1 parent d3b746d commit 588e970

1 file changed

Lines changed: 70 additions & 1 deletion

File tree

README.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,70 @@
1-
# codeit--sb05
1+
# 🎬 ALL PLAYLIST (모두의 플레이리스트)
2+
> **여러 OTT에 흩어져 있는 콘텐츠를 취향대로 묶고 공유하는 플랫폼**
3+
4+
[![Java](https://img.shields.io/badge/Java-17-007396?logo=java&logoColor=white)](https://www.oracle.com/java/)
5+
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.x-6DB33F?logo=springboot&logoColor=white)](https://spring.io/projects/spring-boot)
6+
[![MySQL](https://img.shields.io/badge/MySQL-8.0-4479A1?logo=mysql&logoColor=white)](https://www.mysql.com/)
7+
[![Redis](https://img.shields.io/badge/Redis-FF4438?logo=redis&logoColor=white)](https://redis.io/)
8+
[![Kafka](https://img.shields.io/badge/Apache%20Kafka-231F20?logo=apachekafka&logoColor=white)](https://kafka.apache.org/)
9+
10+
---
11+
12+
## 📅 프로젝트 개요
13+
- **진행 기간**: 2025년 12월 18일 ~ 2026년 1월 29일
14+
- **주요 목적**: 분산된 미디어 콘텐츠의 큐레이션 및 사용자 간 취향 공유 플랫폼 개발
15+
- **핵심 성과**:
16+
- **성능 개선**: Redis 도입을 통해 인증 처리량 약 **9배 향상**
17+
- **실시간성**: Kafka & SSE 연동을 통한 비동기 실시간 알림 시스템 구축
18+
- **최적화**: 대용량 데이터 환경에서 UUID 보조 커서를 활용한 정렬 및 무한 로딩 최적화
19+
20+
---
21+
22+
## 🛠 기술 스택
23+
24+
### Backend
25+
- **Language**: Java 17
26+
- **Framework**: Spring Boot, Spring JPA, Spring Security, Spring Batch, QueryDSL
27+
- **Database**: MySQL (Amazon RDS)
28+
- **Caching & Messaging**: Redis (Amazon ElastiCache), Kafka (Confluent Cloud)
29+
30+
### Infrastructure & DevOps
31+
- **Cloud**: AWS ECS (Fargate), ECR, S3, Route 53, ALB
32+
- **CI/CD**: GitHub Actions, Docker, Docker Compose
33+
- **Monitoring**: Prometheus, Grafana, Spring Actuator
34+
35+
---
36+
37+
## 🏗 시스템 아키텍처
38+
- **분산 환경 설계**: Gateway(Nginx), API Service, Batch Service로 모듈을 분리하여 시스템 독립성 및 확장성 확보
39+
- **비동기 이벤트 기반 알림**:
40+
- `Producer(구독 이벤트)` -> `Kafka` -> `Consumer` -> `SSE(Server-Sent Events)`를 통한 실시간 알림 전달
41+
42+
---
43+
44+
## ✨ 주요 기능
45+
- **콘텐츠 큐레이션**: TMDB API 연동으로 최신 콘텐츠 정보를 자동 갱신하고, 사용자 맞춤형 플레이리스트 생성 및 관리 기능을 제공합니다.
46+
- **실시간 상호작용**: 팔로우, 구독, 콘텐츠 추가 등 이벤트 발생 시 즉각적인 실시간 알림을 수신합니다.
47+
- **검색 및 정렬**: 최신순, 구독순, 평점순 등 복합적인 필터링을 통해 원하는 콘텐츠를 빠르게 탐색할 수 있습니다.
48+
49+
---
50+
51+
## 🚀 트러블 슈팅 및 성능 최적화
52+
53+
### 1. Redis 기반 Refresh Token 관리로 인증 성능 개선
54+
- **Issue**: 기존 RDB(MySQL) 저장 방식 사용 시, 동시 접속자 증가에 따른 I/O 병목으로 에러율 3% 발생.
55+
- **Solution**: In-Memory DB인 Redis로 저장소를 전환하고 TTL(Time-To-Live)을 적용하여 데이터베이스 부하 분산.
56+
- **Result**:
57+
- 평균 응답 속도 개선 (**0.06초 → 0.01초**)
58+
- 처리량(TPS) 약 9배 증가 (**1,000명 → 9,800명**)
59+
- 동시 접속 시 **에러율 0%** 달성
60+
61+
### 2. 정렬 지표 중복으로 인한 무한 로딩 및 데이터 중복 노출 해결
62+
- **Issue**: 정렬 값이 동일한 데이터가 많을 경우, 페이징 처리(No-offset) 시 데이터가 누락되거나 중복 노출되는 현상 발생.
63+
- **Solution**: 고유값인 **UUID를 보조 커서로 활용**한 2차 비교 로직을 추가하고, DB 인덱스 탐색 방향을 일치화함.
64+
- **Result**: 페이징 처리의 정확도를 확보하고 데이터베이스 탐색 효율을 극대화하여 사용자 경험 개선.
65+
66+
---
67+
68+
## 📈 모니터링 및 품질 관리
69+
- **모니터링**: Prometheus와 Grafana를 연동하여 Batch 실행 이력, JVM 힙 메모리 상태, DB 커넥션 풀 등의 핵심 지표를 실시간 시각화하여 관리합니다.
70+
- **코드 품질**: CodeRabbit AI를 통한 자동 코드 리뷰 시스템을 구축하고, 통일된 PR 템플릿을 도입하여 협업 효율과 코드 퀄리티를 유지합니다.

0 commit comments

Comments
 (0)