Skip to content

보고 싶은 영화를 영화관에서, 영화 재상영 펀딩 서비스 🎞

Notifications You must be signed in to change notification settings

Fintechtefin/moding

Repository files navigation

🎟 Moding(무딩)

재상영 영화 크라우드 펀딩 서비스


📕 목차

  1. 서비스 개요

  2. 아키텍처 소개

  3. 주요 기능

  4. 주요 기술

  5. 회고


1장. 서비스 개요

  • “다시 보고 싶은 영화를, 영화관에서”
    영화를 한 번 이상 보는 N차 관람에서 출발하여 펀딩의 요청부터 대관, 영화 재상영까지 어어질 수 있는 서비스를 제공합니다.

2장. 아키텍처 소개

기술 스택 선정 이유

기술 선정 이유
Spring Boot Spring과 비교했을 때 환경 설정을 쉽게 할 수 있어서 개발 생산성 증가
MySQL 구조화 된 데이터 관리 및 오픈 소스 라이센스를 따르기 때문에 무료 사용 가능
Docker 컨테이너 기반으로 여러 서버들을 쉽게 관리
Redis 캐싱 및 분산락 구현을 위한 사용
ELK 실시간 인기 순위 구현 시 검색 성능 최적화를 위해 사용
Prometheus 매트릭 수집
Grafana Prometheus로 수집한 매트릭 데이터를 시각화

3장. 주요 기능

3초만에 쉽고 빠른 로그인!

  • 소셜로그인을 이용한 간편로그인

2155개의 한국영화를 다양한 카테고리별로 제공!

  • 정렬을 이용한 영화목록 조회 !
  • Infinite Scoll을 이용한 빠른 영화목록 제공 !

지금 인기 있는 펀딩은?

  • 무딩중, 무딩 요청 랭킹으로 현재 진행중인 펀딩과 펀딩요청이 많은 순위 제공!!
  • 참여하고 싶다면 시간, 날짜 확인 후 가능하면 참여하기! 펀딩성공하면 영화상영 오픈!
  • 터치 한 번에 결제 끝! 토스페이먼츠 API를 이용한 쉽고 빠른 결제!

  • 아직 펀딩이 열리지 않았다면 원하는 장소와 시간을 고르고 요청하기!
  • 200명 이상 요청시 내부심사 후 펀딩오픈!! 공유하면 펀딩 오픈 속도 UP!!

원하는 영화가 없다면?

  • 영화제목, 배우명을 이용한 검색기능 제공!
  • ElasticSearch를 이용한 실시간 영화 검색 순위 확인까지!

펀딩이 성공했다면! 자리 예매하기!

  • 좌석 오픈 날짜 확인하고 기다리기
  • N명이 보고 있어요! 동시 접속자 수를 볼 수 있는 좌석 예매
  • 자리 예매완료하고 모바일 티켓까지 GET !!

4장. 주요 기술

  1. MSA 기반의 Modern 아키텍처 및 DDD 중심 개발
  2. MSAHA 도입 및 확장 가능한 시스템을 설계
  3. ElasticSearchRedis를 활용해 1시간 단위로 실시간 랭킹 업데이트
  4. Redisson 분산락 AOP를 이용한 결제 및 좌석 예매 동시성 제어
  5. 서비스 DB와 결제 DB 분리를 통한 보안 향상
  6. transaction 처리 및 publisher/subscriber 관련 구현
  7. Proxy에서 WAS단에 전달할 수 있는 Max Connection 제한
  8. 멀티 모듈 구조로 공통 모듈 분리

5장. 회고

Keep

  • 민정: MSA 설계, Redis HA, 모니터링 구축, 운영 환경별로 스프링 프로필을 다르게 분리
  • 승연: Git 컨벤션, 기술적으로 새로운 도전, 디버깅 사용
  • 태윤: 공통(컴포넌트, API, Type)을 파일로 분리하여 재사용, 상태 관리 라이브러리 Recoil을 활용하여 필요한 컴포넌트에 변수 사용
  • 자영: Jira, Git 컨벤션, 모듈화 사용, 타입사용
  • 승경: Jira 컨벤션을 미리 정하여 번업 차트로 가지 않은 것, Git 컨벤션, MSA 설계, 디버깅 사용

Problem

  • 민정: mock data를 대충 넣어서 문제 발생, 일부 코드(공통 에러 코드, 모듈 간 통신 시 요청 DTO 및 응답 DTO) 중복
  • 승연: 미흡한 예외 처리, 동적 쿼리 작성 시 디버깅 어려움, 반복되는 쿼리 수정
  • 태윤: 사용하지 않는 import나 변수 등을 지우지 않아 빌드 시 오류 발생
  • 자영: 전체리스트에 대한 최적화 미흡
  • 승경: 중간에 DB 설계 변경, API 문서화를 하지 않음, 중복 있는 로직 구현

Try

  • 민정: 중요한 비즈니스 로직은 테스트 코드 작성하기
  • 승연: Java stream, filter, map 적극 사용하기
  • 태윤: 사용하지 않는 것은 주석 처리 또는 바로 지우기
  • 자영: react-query 캐싱처리 및 다른 기능 사용하기
  • 승경: Cache 적용 후 JMeter로 성능 테스트하기