Spring Boot 4.1·PostgreSQL 기반 멀티유저 블로그 플랫폼. 좋아요·조회수 동시성, 파일 정합성, 블루-그린 무중단 배포 설계를 테스트 212개로 검증한 1인 프로젝트입니다.
<aside>
📌
2026.10 ~ 진행 중 · 1인 · AI응용프로젝트 수업 개인 프로젝트
2주 MVP(2026.10.01 ~ 10.14) 출시 후 v1.3.0(2026.10.19)까지 개선. 수업 서버에서 10월에 운영
</aside>
- 기술: Java 21, Spring Boot 4.1 (Spring Security 7, Hibernate 7), Flyway, PostgreSQL 17, React 19, Vite 8, Docker, Nginx, GitHub Actions, Testcontainers
- 규모: 요구사항 104 · REST API 51 · 테이블 15 · 백엔드 테스트 212 · 트러블슈팅 26건 · v0.1.0 ~ v1.3.1
- 링크: 코드 · 설계·운영 문서
🤖 개발 방식
Claude Code와 페어 프로그래밍으로 개발했습니다. 코드·문서 작성 대부분은 AI가, 요구사항·정책 결정·설계 승인·검증 기준(CLAUDE.md 완료 기준)은 제가 맡았습니다.
🔑 핵심 문제 해결
동시 요청에도 정확한 카운터
- 좋아요·조회수를 원자적 UPDATE로 올리고 엔티티 필드를
updatable=false로 막아 덮어쓰기 차단
- 중복 좋아요는 복합 PK +
ON CONFLICT DO NOTHING
- 검증: 동시 100명 좋아요 → 100, 한 회원 10번 연타 → 1, 50명 동시 조회 → 50
파일 정합성
- 이미지 삭제는 커밋 후(
AFTER_COMMIT), 참조 확인 전 flush
- 업로드만 된 고아 파일은 24시간 유예 배치 +
pg_try_advisory_xact_lock
- 테스트 10개 — flush·AFTER_COMMIT을 빼면 실패하는 것까지 확인
블루-그린 무중단 배포 설계
- 공용 Nginx 뒤에 자체 Nginx 컨테이너 + blue/green, 헬스 체크 통과 후에만 reload로 전환, graceful shutdown, 추가만 하는 마이그레이션
- Actions concurrency + 서버 flock으로 배포 중복 방지, 직전 이미지 유지 Rollback 워크플로
- 로컬 측정: 블루-그린 2회 13,308건 실패 0 / 새 버전 기동 실패 배포 10,395건 실패 0 / 기존 방식 3,966건 중 308건 실패