Skip to content

ureca-final/pov-backend

Repository files navigation

POV: Point Of View

본 프로젝트는 LG U+ 유레카 1기 백엔드 비대면 융합 프로젝트입니다.
개발기간: 2024.11.12 ~ 2024.12.19 (6주)

image 🔗 Click! 배포된 POV 구경하러 가기

Intro.

영화의 다양한 관점을 공유하는 플랫폼 POV 의 주요 기능은 다음과 같습니다:

  • 영화 리뷰 공유
    • 관람한 영화에 대해 자신의 관점을 리뷰로 작성 및 조회할 수 있습니다.
    • 마음에 든 리뷰에는 좋아요를 등록할 수 있습니다.
  • 맞춤 영화 추천
    • 선호하는 영화 장르 기반으로 영화를 추천합니다.
    • 이때 추천은 TMDB 트렌딩 API 로 받은 영화 데이터를 참고하여 진행됩니다.
    • 조회된 영화 중 마음에 든 영화에는 좋아요를 등록할 수 있습니다.
  • 클럽 내 영화 공유
    • 비슷한 장르를 선호하는 사람들 또는 지인들과 영화를 공유하는 클럽에 가입/초대 할 수 있습니다.
    • 클럽은 공개/비공개 를 설정할 수 있습니다.
    • 클럽 내에 공유하고 싶은 영화는 북마크로 저장할 수 있습니다.
  • 알림 서비스
    • 새로운 리뷰가 등록되거나 클럽에 초대를 받을 경우 알림을 받을 수 있습니다.
    • 사용자는 마이페이지에서 알림 활성화를 설정할 수 있습니다.
  • 시사회 응모 및 결제
    • 일정 시간에 열리는 한정된 인원의 영화 시사회에 응모 및 결제할 수 있습니다.

Documents.


Member.

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
- 분산락을 적용한 응모 시스템 구현
- 토스페이먼츠를 이용한 결제 시스템 구현

Stack.

image

ER Diagram.

image

SW Architecture.

image


Setup.

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

Challenges & Solutions.

TMDB API 를 이용한 데이터 서빙
챌린저: 김영철

  • 문제1: TMDB 로부터 받은 데이터에 성인물이나 필수 필드가 누락된 데이터가 포함되어 저장되는 문제 발생
  • 해결1
    • 트랜잭션이 겹치지 않도록 영화 테이블을 적절히 나누어 진행
    • 인기순으로 영화를 조회 후 성인물과 누락된 필드가 많이 분포되어 있는 하위 5% 를 제거
image

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

Redisson 분산 락을 적용한 트랜잭션 충돌 해결
챌린저: 이승희

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

안정적인 알림 발송 전략
챌린저: 박시은

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

About

LG U+ 유레카 1기 백엔드 비대면 융합 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •