본 프로젝트는 LG U+ 유레카 1기 백엔드 비대면 융합 프로젝트입니다.
개발기간: 2024.11.12 ~ 2024.12.19 (6주)
영화의 다양한 관점을 공유하는 플랫폼 POV 의 주요 기능은 다음과 같습니다:
- 영화 리뷰 공유
- 관람한 영화에 대해 자신의 관점을 리뷰로 작성 및 조회할 수 있습니다.
- 마음에 든 리뷰에는
좋아요
를 등록할 수 있습니다.
- 맞춤 영화 추천
- 선호하는 영화 장르 기반으로 영화를 추천합니다.
- 이때 추천은 TMDB 트렌딩 API 로 받은 영화 데이터를 참고하여 진행됩니다.
- 조회된 영화 중 마음에 든 영화에는
좋아요
를 등록할 수 있습니다.
- 클럽 내 영화 공유
- 비슷한 장르를 선호하는 사람들 또는 지인들과 영화를 공유하는 클럽에
가입/초대
할 수 있습니다. - 클럽은
공개/비공개
를 설정할 수 있습니다. - 클럽 내에 공유하고 싶은 영화는
북마크
로 저장할 수 있습니다.
- 비슷한 장르를 선호하는 사람들 또는 지인들과 영화를 공유하는 클럽에
- 알림 서비스
- 새로운 리뷰가 등록되거나 클럽에 초대를 받을 경우 알림을 받을 수 있습니다.
- 사용자는 마이페이지에서
알림 활성화
를 설정할 수 있습니다.
- 시사회 응모 및 결제
- 일정 시간에 열리는 한정된 인원의 영화 시사회에 응모 및 결제할 수 있습니다.
- 컨벤션 규칙 (Team | GitHub | Jira | TestCode | DTO | Method | Exception)
- API 명세서
- Jira 를 활용한 프로젝트 관리
- Swagger API 명세서 관리
FE Developer
👨🏻💻 POV FE 바로가기
BE Developer
김영철 (팀장) | 노지민 | 박시은 | 이승희 |
---|---|---|---|
@Kim |
@nohzimin |
@ssIIIn |
@leeseunghee00 |
Role
이름 | 담당 |
---|---|
김영철 | - TMDB API 영화 데이터 가져오기 - 관리자 영화 조회 API - 클럽 초대 및 조회 API - 최신 영화 동기화 배치 구현 - 맞춤 영화/리뷰 추천 배치 구현 |
노지민 | - 영화 큐레이션 CRUD API - 클럽 CUD API - 클럽 북마크 API - 영화 좋아요 API - Full-text Search 를 적용한 검색 구현 |
박시은 | - 회원가입/로그인 API - 리뷰 CUD API - 리뷰 좋아요 API - 리뷰 이미지 CRUD API - FCM 토큰을 이용한 알림 서비스 구현 |
이승희 | - 관리자 좋아요 관리 및 리뷰 숨김 API - 리뷰 조회 API - 회원 정보 수정 API - 시사회 CRUD API - 분산락을 적용한 응모 시스템 구현 - 토스페이먼츠를 이용한 결제 시스템 구현 |


YAML 에 다음 설정이 필요합니다.
spring:
# MySQL
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/your-database
username: your-username
password: your-password
# OAuth
security:
oauth2:
client:
registration:
naver:
client-id: your-client-id
client-secret: your-client-secret
# AWS
cloud:
aws:
credentials:
accessKey: your-access-key
secretKey: your-secret-key
s3:
bucketName: your-bucket-name
# TMDB
TMDb:
access: your-tmdb-access-key
# TOSS
toss:
secret-key: your-toss-secret-key
TMDB API 를 이용한 데이터 서빙
챌린저: 김영철
- 문제1: TMDB 로부터 받은 데이터에 성인물이나 필수 필드가 누락된 데이터가 포함되어 저장되는 문제 발생
- 해결1
- 트랜잭션이 겹치지 않도록 영화 테이블을 적절히 나누어 진행
- 인기순으로 영화를 조회 후 성인물과 누락된 필드가 많이 분포되어 있는 하위 5% 를 제거

- 문제2: 영화를 포함한 약 5만 건의 데이터를 저장하는 데 약 1시간이 소요되는 문제 발생
- 해결2
- 5개 스텝 중 영화 정보를 가져오는 첫 번째 스텝을 제외한 나머지 스텝은 비동기로 실행하여 배치 진행
- 1초당 50회 요청 제한을 만족하기 위해 0.02초의 호출 리미터 적용

Redisson 분산 락을 적용한 트랜잭션 충돌 해결
챌린저: 이승희
- 문제: 선착순으로 이루어지는 응모 특성 상 수 천/만 명이 동시 접속 시 트랜잭션 충돌 발생
- 해결: Redisson 라이브러리를 이용한 분산 락을 적용하여 데이터 정합성을 보장

안정적인 알림 발송 전략
챌린저: 박시은
- 문제: FCM 단일 전송 방식으로 인한 알림 전송 실패에 대한 대책 필요
- 해결: 3번의 알림 발송 재시도와 지수백오프를 통해 시스템 부하를 분산하여 알림 성공률을 95% → 99% 까지 높임
