Skip to content

Boram33JO/Backend

Repository files navigation

위치 기반 음악 공유 사이트

출근을 할 때, 친구들과 함께, 매번 어디론가 가고 머무는 ‘나’의 일상, 다들 음악과 함께 하고 계시지 않으신가요? 내가 추억하는 공간과 그 때의 플레이리스트를 모두와 함께 공유해보아요 🗣️🎧


💜 P.Ple 소개 - People Place Playlist

특별한 장소로 여행을 가거나, 일상 속에서 들었던 노래들을 플레이리스트로 만들어 다양한 사람들과 공유할 수 있는 커뮤니티 서비스입니다.


📆 프로젝트 기간

  • 2023.07.29 ~ 2023.09.08

😎 Members

Frontend

김은비 김정우 정소희

Backend

유현주 최도영 이성목

Designer

오혜성


💜 주요 기능 소개

📌 메인페이지
  • 인기 포스팅, 추천 플레이리스트 등 P.Ple의 주 컨텐츠들을 확인할 수 있습니다.
📌 게시물 작성
  • 장소 검색, 노래 검색을 이용해 해당 장소에 어울리는 플레이 리스트를 담아 게시물을 작성할 수 있습니다.
📌 장소에 따른 게시물 리스트
  • GPS 기능을 통해 현재 내 위치 주변이나 특정 장소를 검색하여 그 주변의 작성된 게시물을 확인할 수 있습니다.
  • GPS 기능을 통해 현재 내 위치 주변이나 특정 장소를 검색하여 그 주변의 작성된 게시물을 확인할 수 있습니다.
📌 프로필 페이지
  • 내 프로필과 회원 정보를 수정할 수 있고, 내 포스팅, 팔로워, 댓글 등을 한 눈에 보고 관리할 수 있습니다.
  • 다른 사람의 프로필의 경우 포스팅, 팔로워를 확인할 수 있습니다.
📌 게시물 상세
  • 게시물의 상세 내용을 확인하고 댓글을 남겨 다른 사람과 의견을 공유할 수 있습니다.
  • 마음에 드는 게시물에 좋아요를 하거나 작성자를 팔로우 할 수 있습니다.
📌 미리 듣기 기능
  • 음악을 선택하면 Spotify에서 제공하는 30초 미리 듣기를 들을 수 있습니다.
  • 한 번 더 음악을 선택하면 Spotify 사이트로 이동합니다.
📌 알림 기능
  • 로그인한 유저는 팔로우를 받거나 작성한 글에 다른 유저가 좋아요, 댓글 작성을 하면 알림을 받을 수 있습니다.
📌 검색 기능
  • 추천 포스팅, 인기 플레이스, 카테고리 별 인기 있는 노래, 인기 검색어를 확인할 수 있습니다.
  • 검색어를 입력하여 관련된 포스팅, 플레이스, 음악, 피플러를 찾아볼 수 있습니다.

⚙️ 서비스 아키텍쳐


🔫 트러블슈팅

Back-End

Issue1. RefreshToken으로 AccessToken 재발급시 RT 탈취 위험 이슈

문제:

  • RefreshToken을 AccessToken과 함께 보내 만료 시 자동으로 AccessToken을 재발급 하게 하였지만, RefreshToken의 탈취 위험에 대한 문제점 발생

시도:

  • AT만료 시 RT로 AT룰 재발급하고 RT 또한 같이 재발급 방법을 시도
  • 요청 시에는 AT만 요청 후 AT가 만료 시 만료 응답을 먼저 보내고 RT를 받아 새롭게 AT를 재발급 해주는 방식으로 변경 - RT만료시 로그아웃이 되는 방법을 시도

해결:

  • 로그인 시에 AT, RT를 함께 발급하고 요청 시에는 AT만 요청 후 AT가 만료 시 만료 응답을 먼저 보내고 RT를 받아 새롭게 AT를 재발급하게 하고 기존의 RT 만료 시 로그아웃이 되게 구현하는 방식만 채택
Issue2. Spotify API를 이용한 노래 검색 시 검색 제한 오류 발생 이슈

문제:

  • 노래 검색 테스트 시 검색 제한으로 인해 많은 요청을 보낼 시 “API rate limit exceeded” 에러 메시지와 함께 API 응답의 대기 시간 발생.

시도:

  • 검색어에 대한 결과에 대해 캐싱 읽기 전략 Look Aside 패턴을 적용.
  • 429 에러 응답 시 일정 시간이 지난 후 재시도.

해결:

  • 캐싱 읽기 전략 Look Aside 패턴을 적용하면서 한번에 더 많은 값을 받아올 수 있도록 10개에서 30개로 변경.
Issue3. 게시글 조회, 좋아요 동시성 제어

문제:

  • 기존 게시글 조회 로직으로 JMeter 테스트 결과 1000개의 스레드 요청에 평균적으로 102개의 요청만 정상적으로 들어오고 898개의 요청은 유실

시도:

  • JPA 트랜잭션 내에서 읽기 → 쓰기 → 변경 감지의 순서로 흘러가는데 여러 트랜잭션이 동시에 읽기를 하고 쓰기 때문에 유실

해결:

  • 비관적락 베타락 설정으로 1000개의 요청 정상적으로 들어왔으나 성능은 저하
  • 기존 로직은 1000개의 요청 8초, 변경 후 14초로 증가
Issue4. 게시글 조회수 어뷰징

문제:

  • 기본 로직은 회원, 비회원 상관없이 브라우저를 새로고침하면 무한으로 조회수가 증가하는 문제 발생

시도:

  • 1차적으로 cookie를 사용하는 로직으로 변경하였으나, 도메인당 생성 할 수 있는 개수가 제한이 있고, cookie값이 커질 경우 네트워크 트래픽에 부담을 주고, 고의적으로 cookie를 삭제 할 수 있는 문제점이 존재

해결:

  • 2차적으로 비회원은 접속한 Client IP, 게시글 ID를 회원은 유저 ID, 게시글 ID를 Redis에 저장하고 만료 시간은 밤12시 기준으로 설정하는 로직으로 변경
  • IP 또한 고의적으로 변경 할 수 있다는 문제점이 존재하나 어뷰징 유저가 조작하기에 cookie 방식보다 어렵다고 판단해 적용

Infra

Issue1. AWS EC2 인스턴스 멈춤 현상

문제:

  • 서버가 배포 되고 특정시간이 지나거나, spring boot 서버가 2개 이상 돌아가면 인스턴스가 멈추고 접속 안되는 현상 발생

시도:

  • 인스턴스 모니터링 결과 CPU 사용률이 급격하게 올라가고, 시스템 로그에서 Out of memory: kill process 발생해 메모리 부족으로 확인

해결:

  • 하드 디스크 공간 일부를 메모리로 대체하여 사용 할 수 있게 인스턴스에 Swap Memory 2GB 를 설정 하여 해결
Issue2. 이미지 업로드 에러

문제:

  • 이미지 업로드시 5MB 크기 제한을 설정했지만 1MB 초과 해도 오류 발생
  • application.properties 내에서는 정상적으로 설정, 실제 배포 서버에서만 오류 발생

시도:

  • 배포 서버에서는 Nginx로 reverse proxy 구성하면서 Nginx에서 기본으로 1MB 제한

해결:

  • nginx.conf 내에서 client_max_body_size 설정 후 해결
Issue3. Redis 쓰기 에러

문제:

  • Redis는 persistent를 유지하기 위해서 주기적으로 BGSAVE로 RDB 파일을 저장, 이 과정에서 메모리가 부족하여 RDB 파일을 작성하다 실패하면 모든 쓰기 요청이 막혀 데이터 쓰기가 불가능

시도:

  • 프로젝트에서 Redis를 단순 캐시용도로 사용하고 있기 때문에 bgsave 에러가 났을 때 멈추는 설정 off

해결:

  • redis.conf 파일 내 SNAPSHOTTING 부분에 stop-writes-on-bgsave-error 부분이 기본 설정 yes에서 no로 변경
Issue4. 데이터 반환값 시간 문제

문제:

  • EC2 인스턴스 서버 시간이 UTC 타임존으로 설정 돼있어 데이터 반환값들 시간이 9시간 차이 나는 문제 발생

시도:

  • RDS MySQL 타임존을 변경하였으나 여전히 문제 발생

해결:

  • sudo dpkg-reconfigure tzdata 명령어를 통해 서버 타임존을 KST로 변경
Issue5. Cloud Front 실시간 반영 안되는 문제

문제:

  • S3에 업로드 된 수정 사항들이 배포에 실시간으로 반영 안되는 문제 발생
  • 기본적으로 Cloud Front 캐시 정책은 각 파일을 24시간 후에 자동으로 만료

시도:

  • 공식 배포 전까지 캐시 정책 CachingDisabled 설정

해결:

  • 캐시 정책 시간 이전에 강제로 CloudFront의 배포 내용을 업데이트 하고 싶다면 무효화 생성해 적용 or 캐시 정책을 만들어 원하는 TTL 설정

🐰 기술

Frontend

Backend

Infrastructure

Dev tools

Design


☁️ ERD

ERD

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •