스터디원 모집부터 지원, 실시간 채팅, 알림까지 하나의 플랫폼에서 처리하는 백엔드 프로젝트입니다.
| 분류 |
기술 |
| Language |
Kotlin |
| Framework |
Spring Boot, Spring Security, Spring Batch |
| ORM |
Spring Data JPA, jOOQ, HikariCP |
| Auth |
Kakao OAuth 2.0, JWT |
| Realtime |
WebSocket (STOMP / SockJS), SSE |
| Messaging |
Apache Kafka (KRaft), Outbox Pattern |
| Search |
Elasticsearch 9.0.2 (nori 분석기) |
| Cache |
Redis 7 |
| Test |
JUnit5, MockMvc, Mockito, TestContainers, k6 |
| 분류 |
기술 |
| Server |
AWS EC2 t3.large |
| Reverse Proxy |
Nginx (로드밸런싱, SSL, gzip) |
| Container |
Docker, Docker Compose |
| CI/CD |
GitHub Actions |
| HTTPS |
Let's Encrypt (Certbot) |
| Domain |
DuckDNS |
| Log |
ELK Stack (Logback -> Logstash -> Elasticsearch -> Kibana) |
| 문제 |
개선 |
| 댓글 알림 동기 처리로 커넥션 풀 고갈 |
에러율 87% -> 2.3%, RPS 137 -> 940 (585% 향상) |
| 게시글 단건 조회 DB 직접 조회 |
p(95) 5.38s -> 97.6ms (98% 개선), RPS 1,825 -> 3,686 |
| 동시 지원 레이스컨디션으로 500 에러 |
비관적 락 적용 후 성공률 5% -> 100% |
| Kafka 발행 실패 시 알림 유실 |
Outbox 패턴 + RetryScheduler로 유실 방지 |
- 인증 — Kakao OAuth 2.0, JWT Access/Refresh Token
- 스터디 모집 — CRUD, Elasticsearch 풀텍스트 검색, Spring Batch 자동 마감
- 지원 시스템 — 비관적 락으로 동시 지원 레이스컨디션 방지
- 실시간 채팅 — WebSocket STOMP + Redis Pub/Sub 멀티 인스턴스 동기화
- 실시간 알림 — Kafka -> Redis Pub/Sub -> SSE, Outbox 패턴으로 유실 방지
- 스터디팀 관리 — 팀 자동 생성, 일정 관리, D-1 리마인더
- API 보호 — Sliding Window Rate Limiting, Idempotency Key 중복 요청 방지
- 요청 추적 — MDC 기반 requestId/userId 자동 주입 -> Kibana 필터링