Gemini 기반 개발자 매칭 플랫폼. 4인 캡스톤에서 팀장·백엔드 리드를 맡아 LLM 후보 제한 추천과 동시 수락 정원 초과 방지를 구현했습니다.
<aside>
📌
2026.03 ~ 2026.06 · 4인 캡스톤 · 팀장 · 백엔드 리드
</aside>
- 기술: Java 21, Spring Boot 3.5, JPA, MySQL 8, Gemini API, Docker Compose, AWS EC2, GitHub Actions
- 담당: ERD·엔티티 설계, AI 추천 엔진, Docker 실행 환경, 형상관리·PR 리뷰 (인증·보안과 배포 파이프라인은 팀원 담당)
- 링크: 코드 · 트러블슈팅 문서
🔑 핵심 문제 해결
LLM이 없는 데이터를 추천하지 못하게
- DB에서 후보를 최대 50건으로 좁힌 뒤 Gemini가 그 안에서만 선택
- 반환된 ID를 후보 집합과 DB 재조회로 검증
동시 수락 시 정원 초과 방지
- 조건부 UPDATE (
current_count < required_count), 영향 행이 0이면 409 + 롤백
- MySQL 통합 테스트에서 동시 4건 중 1건만 성공
IDOR 차단
- 요청 본문의 ID를 믿던 구조를 기본 닫힘 인가 + 서비스 계층 소유권 검사로 변경
성능·트랜잭션
- Gemini 호출을 트랜잭션 밖으로 분리, OSIV off
- 목록 조회 N+1을 EntityGraph·배치 페치로 해소
협업
- PR 18건 리뷰·머지, 공용 설정 파일 병합 충돌 정리
- 요청/응답·에러 코드 표준화