Concert Booking — 동시성 좌석 예약 시스템
2026.02 – 2026.05 · 개인락 전략 3종을 실측 비교하고 이벤트 복구 경로까지 검증한 예약 백엔드
Java 21, Spring Boot, PostgreSQL, Redis(Redisson), Kafka, JPA, Flyway, Testcontainers, k6
- 동일 좌석 100명 동시 예매 경합에서 비관·낙관·Redis 분산 락 3전략 모두 중복 판매 0건 검증, p95 106–215ms 실측 비교
- 좌석이 달라도 낙관적 락 성공률이 40%로 붕괴하는 원인을 공유 카운터 row의 @Version 충돌로 규명하고 전략별 트레이드오프 문서화
- Transactional Outbox + Kafka DLT 수동 replay로 이벤트 유실 복구 경로 구축, Testcontainers 통합 테스트로 검증
- 결제/만료 race·멱등성·대기열 토큰 남용 k6 시나리오를 3전략 × 3회 반복 — 체크 594/594 통과, 중복 결제 0건
Realtime Chat — 실시간 채팅 시스템
2026.02 – 2026.05 · 개인DB 커밋 후에만 브로드캐스트하는 persist-before-broadcast 메시지 파이프라인
Java 21, Spring Boot, WebSocket(STOMP), Kafka, Redis Pub/Sub, PostgreSQL, JPA, k6
- 채팅방 목록 N+1 쿼리(방 N개당 2N+1회)를 JPQL 프로젝션 단일 쿼리로 제거 — RPS 937 → 1,598 (+70.5%), p95 212.85 → 149.22ms
- Kafka → DB 커밋 → Redis Pub/Sub 순서를 강제하고 senderId+clientMessageId 멱등성 설계 — 2대 인스턴스·1,000명 수신 검증 3회 반복에서 유실 0·중복 0
- 핵심 쿼리 4개를 EXPLAIN ANALYZE로 분석해 인덱스 5개 설계, Index Only Scan 확인 (실행 시간 0.08–1.3ms)
- Redis Cache Aside에 이벤트별 선택 무효화(방 멤버만·해당 유저만) 적용해 전체 무효화 제거
AI Usage Billing Gateway — 사용량 과금 게이트웨이
2026.05 · 개인API Key 인증부터 사용량 계량, 정산 원장까지 과금 경계의 정합성 검증
Java 21, Spring Boot, Spring Security, PostgreSQL, Redis, JPA, Flyway, Testcontainers, k6
- 사용량 기록에 Idempotency-Key를 강제해 재시도·중복 전송이 중복 과금으로 이어지지 않도록 설계 — k6 혼합 시나리오 3회 반복 체크 150/150, 중복 계량 0건
- PG webhook에 HMAC 서명 검증 + providerEventId 중복 제거 적용, duplicate delivery 시나리오로 검증
- 잔액을 덮어쓰지 않는 append-only ledger 설계 — 환불 포함 원장 정합성을 Testcontainers 통합 테스트로 고정
- API Key 해시 저장·조직 스코프 격리로 멀티테넌트 교차 접근 차단
My ETA — 교통약자 배리어프리 내비게이션
2026 (하나금융×SKT Tech4Good 해커톤) · 7인 팀 · 백엔드 전담교통약자의 실제 보행속도로 도착시간을 재계산하는 개인화 경로 API
Python 3.12, FastAPI, Pydantic, HTTPX, TMAP·서울 공공데이터·Kakao API, pytest
- 이동 유형·보조기구 프로필과 안내 중 수집한 속도 표본으로 도보 ETA를 보정하는 개인화 엔진 구현 (이상치 표본 필터링 포함)
- TMAP 경로·서울 버스/지하철 실시간·엘리베이터 등 외부 API 5종을 provider 어댑터 계층으로 통합
- 확인되지 않은 접근성 정보를 UNKNOWN 일급 상태로 명시하는 API 계약 설계 — 없는 데이터를 지어내지 않음
- 경로 이탈·대중교통 놓침 시 현재 위치 기준 재탐색 흐름과 위치 요청 지연 복구 구현