소통을 통해 인생영화를 찾는,
영화 리뷰 추천 SNS 플랫폼 삘룸입니다.

- 소셜 피드: 팔로잉하고 있는 다른 사용자들의 리뷰를 탐색하고 댓글/대댓글, 좋아요 등으로 소통할 수 있습니다.
|
|
- 추천 & 인기 피드: 사용자의 활동 기록을 바탕으로 다른 사용자의 리뷰를 제공하거나 '좋아요','댓글' 수와 시간 감쇠 로직을 반영하여 인기 리뷰 피드를 제공합니다.
|
- 영화 검색: 유연한 키워드 검색으로 직관적으로 영화를 검색하고 탐색할 수 있습니다.
|
- AI추천태그: 영화 제목과 리뷰 작성 내용을 기반으로 작성된 리뷰를 잘 드러낼 수 있는 해시태그를 추천합니다.
|
- 영화 추천 서비스: 사용자의 활동 내역을 기반으로 AI가 분석하여, 사용자가 좋아할 만한 영화를 추천합니다.
|
|
- 프로필: 내가 작성한 리뷰, 좋아하는 영화, 활동 배지 등을 모아볼 수 있는 개인 공간입니다.
|
- 뱃지 시스템: 다양한 활동을 통해 특별한 뱃지를 획득하는 재미를 느낄 수 있습니다.
|
| 구분 | 기술 |
|---|---|
| Frontend | React, Vite, JavaScript, Zustand, Axios |
| Backend | Java, Spring Boot, Spring Data JPA, Gradle, MySQL |
| AI | Python, FastAPI, Konlpy, Scikit-learn |
| Database | MySQL |
| DevOps | Docker, Docker Compose, Jenkins, Nginx |
S13P11D208/
├── ai/ # FastAPI 기반 AI 모델 서버
├── backend/ # Spring Boot 백엔드 API 서버
├── frontend/ # React 프론트엔드 애플리케이션
├── exec/ # SQL 덤프 및 프로젝트 문서
├── readme/ # Readme 폴더
├── .env # 전체 서비스 환경변수
├── docker-compose.yml # 서비스 실행을 위한 Docker Compose 설정
└── README.md # 프로젝트 소개
- 자세한 사항은
exec/포팅 매뉴얼.pdf참고
-
저장소 복제
git clone https://lab.ssafy.com/s13-webmobile2-sub2/S13P11D208.git cd S13P11D208 -
환경 변수 설정
- 프로젝트 루트 디렉토리에
.env파일을 생성하고 필요한 환경 변수를 설정합니다. frontend/feelroom/src디렉토리에도.env파일을 생성하여 프론트엔드 관련 환경 변수를 설정합니다.
- 프로젝트 루트 디렉토리에
-
데이터베이스
- 로컬 또는 원격 데이터베이스에
movie_recommendation_db스키마를 생성합니다. exec/feelroom_dump.sql파일을 사용하여 데이터베이스 테이블과 초기 데이터를 임포트합니다.
- 로컬 또는 원격 데이터베이스에
-
Docker Compose를 이용한 전체 서비스 실행
docker-compose up --build -d
-
서비스 접속
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8080/swagger-ui/index.html
- Frontend:
--
- 문제(Situation): SNS 특성상 '좋아요/댓글 수' 집계가 빈번하여, 데이터 증가 시 Full Scan으로 인한 DB 병목 발생.
- 해결(Solution):
- 반정규화 & 이벤트 기반 아키텍처: 실시간
count()쿼리 대신 **Summary Table(집계 테이블)**을 설계하여 조회 복잡도를 O(1)로 낮춤. - 데이터 정합성: Spring Event를 활용, 원본 데이터 변경 시 통계 테이블을 비동기로 갱신.
- 캐싱 전략: 변동이 적은 메타 데이터는 Redis Look-aside 패턴으로 캐싱하여 DB 부하 분산.
- 반정규화 & 이벤트 기반 아키텍처: 실시간
- 결과(Result): JMeter 부하 테스트 결과, 평균 응답 속도 331ms → 16ms (약 95% 개선) 달성.
- 문제(Situation): 단순 좋아요 순 정렬 시, 과거 인기글이 상단에 고정되어 새로운 콘텐츠 노출 불가.
- 해결(Solution):
- 알고리즘: Hacker News의 Time-Decay(시간 감쇠) 알고리즘 도입 (최신성 + 인기도 동시 반영).
- 구현: **Redis Sorted Set(ZSet)**을 활용하여 RDB 부하 없이 실시간 랭킹 산출 및 조회 속도 최적화.












