새로운(New) 모임, 새(Bird)처럼 자유로운 모임
모임관리, 추억 공유, 실시간 소통까지 함께할 수 있는 환경을 제공합니다.
•
서비스 둘러보기 : http://saemoim.site/
•
서비스아키텍처
기술적 의사결정
사용기술 | 기술설명 |
Redis
In-Memory DB | 엑세스 토큰 만료 후 재발급 할 때 로그인 시 발급된 엑세스 토큰과 리프레시 토큰을 매칭하여 같이 발급 된 정상 토큰인지 확인하기 위함. 토큰 같은 경우, 데이터가 날아가도 큰 문제 없기 때문에 속도적인 측면을 고려하여 RDB가 아닌 Redis 선택.
이메일 인증 코드 또한 휘발성 데이터이기 때문에 TTL설정 후 Redis에 저장. |
Redis Cache | 인기모임은 순위가 자주 바뀔 경우가 희박하기 때문에 매번 DB를 조회하지 않기 위해 캐싱 선택 |
Java MailSender | 회원가입 시 이메일 확인, 비밀번호 찾기 시 임시 비밀번호 발급을 위한 메일 발송을 위해 선택 |
OAuth2 | 소셜로그인을 통한 간편한 로그인/회원가입을 위해 선택 |
페이징
Page/Slice | 데이터 양이 많을 모임 조회의 경우엔 Slice를 사용하여 카운트쿼리가 실행되지 않게 하고 게시판의 경우엔 상대적으로 데이터 양이 적을 경우와 UI 측면에서 Page를 선택 |
STOMP | 모임 별 채팅방 생성을 위해 도입. 모임 id 정보로 토픽을 나누어 채팅 기능을 구현하였고, 채팅 메세지에 유저 id와 모임 id를 함께 저장해 DB에 저장 후 불러오기를 구현함. 통신 시 토큰 인증과정을 추가하여 보안을 강화하였음. |
SockJS | 기존 WebSocket 만으로는 브라우저 호환성 문제와 프록시 서버 연결 끊김 등의 문제가 발생하기 때문에, 이런 단점들을 보완한 WebSocketEmulation (SockJS)를 도입하여 WebSocket이 불가능한 경우 다른 대체 기술로 전환 가능 |
Github Action | 프로젝트 협업을 위한 코드 호스팅 툴로 Github를 사용하고 있는데 같은 환경에서 CI가 가능하고 익숙한 문법의 yml 파일로 동작 구성 가능 |
S3 | 이미지 파일 관리를 위해 도입
방안 서버, DB, 외부 저장소
의사결정 서버 비용 증가와 DB 성능저하를 고려해 금전적 비용 발생에도 불구하고
성능 저하 이슈 모면과 배포 등 추가 활용과 관리상 편의를 위해 S3 선택 |
지도API | 오프라인 모임을 모집하는 플랫폼이다 보니 모임 장소에 대한 정보를 보여줄 지도 api가 필요, 국내에서 주로 사용되는 서비스이고 기능적으로 큰 차이가 없는 카카오나 네이버 지도 중 더 친숙한 카카오 api를 선택 |
Rest Docs | API 문서 자동화를 위해 적용.
swagger와는 다르게 프로젝트 코드에 영향이 없고 테스트코드로 검증된 문서를 보장할 수 있다는 장점으로 선택 |