운동을 좋아하는 모든 이들에게 매칭/커뮤니티/채팅 서비스를 제공합니다.
- 커뮤니티
- 통합 검색 기능
- 새싹과 고수 회원 매칭
- 채팅
- 알림
- Tech Stack
- Java, Spring Boot, MySQL, JPA, QueryDSL, Redis, JUnit
- Infra
- AWS EC2, AWS RDS, AWS ElasticCache, AWS SQS, AWS SNS
- DevOps
- Jenkins, Docker
- 커뮤니티 기능 (CRUD, 찜하기, 좋아요 포함)
- 대댓글 기능
- 검색 기능
- 알림 기능
문제
기존의 Async와 EventListener 구조는 어플리케이션 의존성이 너무 커 이벤트 내구성 부족, 트래픽 증가 시 스레드 풀이 포화 가능성, 비동기 처리 재시도 전략 미수립 등의 문제점이 있음
해결
AWS SQS는 큐에 메세지를 넣어놓고 Worker가 폴링해 쓰는 구조이기 때문에 발행 속도와 처리 속도 간의 차이를 완충
AWS SNS가 DB 저장 Worker와 Sse Worker에게 이벤트를 발행해 DB 병목이 일어나더라도 실시간 알림 작업은 영향을 받지 않음
DLQ를 생성해두고 누적 메세지가 임계값을 넘어가면 Cloudwatch로 알림 발송
문제
자주 접근하는 특성을 가진 인기글 목록 특성상 접근과 정렬 비용 절감 필요
해결
Redisson의 SortedSet을 활용하여 DB I/O 비용 감소, SortedSet 자료구조로 정렬 비용 감소,
TTL로 외부 스케줄러 없이 주간 인기글 자동 갱신
문제
글 본문이 길어질 경우 DB 병목 현상
해결
단일/Full Text 인덱스로 검색 성능 73% 개선
Full-Text Search 쿼리문이 Hibernate Dialect에 정의되어 있지 않은 문제는 MATCH AGAINST 쿼리문을 커스텀 쿼리로 등록함으로써 해결
SQL Explain으로 쿼리 분석해 효율 개선 확인
문제
댓글 1개를 조회하는데 지연로딩으로 인한 대댓글 조회 N개 쿼리 추가 발생
해결
배치 로딩 적용으로 쿼리 수 90% 감소, 조회 성능 약 60% 개선