2026.08 – 진행 중 · 우아한테크코스 팀 프로젝트 · 백엔드 개발
비비디 · Bibbidi
결혼 준비에 필요한 일정과 할 일을 함께 관리하는 서비스
비비디 서비스 미리 보기 ↗비비디는 결혼 준비 일정과 할 일을 함께 관리하는 웹서비스입니다. 백엔드 3명, 프런트엔드 1명이 참여한 우아한테크코스 팀에서 인증 흐름과 도메인 경계, 아키텍처 검증을 맡았습니다. 갱신 토큰 동시성, 권한 검사, 설계 규칙을 다룬 세 가지 사례를 소개합니다.
01 · 갱신 토큰 동시 요청에서 한 건만 허용
문제
갱신 토큰은 사용할 때마다 교체합니다. 같은 토큰으로 두 요청이 동시에 들어오면 둘 다 사용 전 상태를 읽고 새 토큰을 발급할 수 있었습니다.
해결
토큰 해시로 세션 행을 찾을 때 MySQL 비관적 락을 획득해 조회와 교체를 직렬화했습니다. ImHere의 발송 작업은 상태를 조건으로 한 UPDATE에서 처리 권한을 획득하지만, 여기서는 기존 세션의 재사용 여부를 읽고 교체해야 하므로 행을 잠근 뒤 판단하도록 했습니다.
결과
같은 토큰으로 두 요청을 동시에 시작하는 통합 테스트에서 한 건만 성공했습니다. 다른 요청은 잠금 해제 뒤 이미 사용한 토큰으로 판단해 거절합니다.
인증 흐름과 설정 구조 정리 PR · 동시 요청 통합 테스트
02 · 체크리스트 권한 검사를 도메인 객체로 이동
문제
체크리스트의 권한 검사가 서비스 메서드마다 흩어져 있었습니다. 백엔드 3명이 같은 기능을 수정하다 새 변경 경로에서 검사를 빠뜨리면 다른 사람의 체크리스트까지 바꿀 수 있었습니다. 기존 기능을 유지하면서 검사 위치를 옮겨야 했습니다.
해결
리뷰에서 소유 관계를 도메인 객체에 두자고 제안했습니다. 상태를 바꾸는 메서드가 먼저 소유권을 확인하도록 하고 JPA 엔티티와 도메인 타입을 분리했습니다.
결과
체크리스트 변경은 도메인 객체의 소유권 검사를 거치게 됐습니다. 이 작업을 포함한 도메인 정리 과정에서 24개 타입을 불변으로 만들었습니다.
03 · 설계 합의를 ArchUnit 규칙 13개로 검증
문제
계층 의존 방향, 기능 간 경계, null 검사 원칙을 리뷰 때마다 다시 설명해야 했습니다. 합의를 아는 사람이 리뷰에 참여하지 못하면 다음 변경에서 규칙을 놓칠 수 있었습니다.
해결
ArchUnit으로 아키텍처 규칙 13개를 작성해 CI 빌드에 연결하고, 기존 코드도 규칙에 맞춰 정리했습니다.
결과
85개 파일을 정리해 코드 782줄을 줄였습니다. 이후 같은 경계 위반이 생기면 빌드에서 확인할 수 있습니다.
함께 다룬 운영
관측 도구를 EC2에 직접 올렸습니다. 서비스 장애는 Grafana로, 모니터링 서버 장애는 CloudWatch로 알림을 분리했습니다. Critical 6종은 전화로, Warning 9종은 Discord로 받습니다.
팀에서 맡은 협업
AI 작업 환경에 설계 근거를 남기는 공통 규칙을 적용하고, 기록이 없는 PR을 확인하는 TypeScript 도구를 만들었습니다. 팀 PR 136건을 리뷰하며 15건에 변경을 요청했습니다.
서비스
사용 기술
Java 25 · Spring Boot 4.1 · Spring Security · Spring AI 2.0 · JPA · MySQL 8.0 · Caffeine · ArchUnit 1.3.2 · Docker · Nginx 1.31 · AWS EC2 · Prometheus · Grafana · Loki · Tempo · Alloy · GitHub Actions · TypeScript