오늘의 OTT
📅 기간: 2023.09 ~ 2023.12 (4개월)
👥 팀원: BE 1명, FE 2명
GitHub 저장소 방문하기
✨ 프로젝트 소개
각종 OTT 서비스 콘텐츠를 한곳으로 모아서 사용자는 한곳에서 모든 콘텐츠를 확인할 수 있으며, 사용자 맞춤 콘텐츠 추천 및 OTT 추천을 해줄 수 있습니다.
백엔드 개발자로서 저의 목표는 APP 클라이언트와의 원활한 통신과 최적의 응답 속도를 확보하는 것이었습니다.
💪 맡은 기능 구현
-
핵심 API 개발 (Node.js & MongoDB)
클라이언트와의 JSON 통신에 유리한 Node.js와 BSON을 사용하는 MongoDB를 선택하여, OTT 콘텐츠 통합 검색 API를 구현했습니다.
-
API 문서화 및 협업 (Swagger)
FE 개발자 2명과의 효율적인 협업을 위해 Swagger를 도입했습니다. API 명세를 실시간으로 문서화하고 공유하여, FE 개발자가 직접 API를 확인하고 피드백을 줄 수 있게 함으로써 커뮤니케이션 비용을 절감했습니다.
-
AWS 인프라 구축 및 배포
개발된 Node.js 서버와 MongoDB를 AWS EC2 인스턴스에 직접 배포하여 전체 운영 환경을 구축했습니다.
🔍 트러블 슈팅
프로젝트의 핵심 문제였던 'OTT 콘텐츠 데이터 중복 통합 문제'를 해결한 경험입니다.
문제 상황
여러 OTT에서 동일한 콘텐츠가 중복되어 노출되는 문제 발생했습니다.
원인 분석
데이터 통합 시, 동일 콘텐츠를 식별하는 고유 ID가 없어 중복 데이터가 그대로 저장되는 문제가 있었습니다.
해결 과정
-
의사 결정: '쿼리 시점 그룹화(Aggregation)' 방식은 읽기 성능과 확장성이 낮다고 판단했습니다. 이에 '저장 시점 정규화(Normalization)' 방식을 채택하여 문제를 근본적으로 해결하였습니다.
-
기술 도입: 저장 공간 효율을 고려하되, FE 개발자의 직관적인 이해를 돕기 위해 일반적인 2진수 비트마스크 대신 '10진수 자릿값을 이용한 식별자 합산' 방식을 도입했습니다.
-
적용: OTT별 고유 식별자로 고유한 자릿값(ex. Netflix: 8000, Disney+: 1)을 부여하고,
providers: 8001 (Netflix, Disney+)처럼 단일 정수(Integer) 값의 합으로 여러 OTT 정보를 표현하도록 스키마 및 저장 로직을 수정했습니다.
결과
데이터 중복을 원천적으로 제거했으며, 빠르고 정확한 OTT 지원 목록을 사용자에게 제공할 수 있게 되었습니다.
📈 발전 사항 (배운 점)
한계 인식
당시에는 API 서버와 MongoDB를 모두 AWS EC2 인스턴스 2대에 직접 설치하여 운영했습니다. 이는 DB의 안정적인 운영, 백업, 스케일링 측면에서 한계가 명확한 구조였습니다.
배운 점
이 경험을 통해, DB는 EC2에 직접 설치하기보다 MongoDB Atlas(Cloud)나 AWS DocumentDB와 같은 관리형 데이터베이스 서비스(Managed Service)를 사용하는 것이 운영 효율성과 안정성, 확장성 면에서 훨씬 유리함을 명확히 인지하게 되었습니다.