본문 바로가기

개발기/Save The Bunnies

2편: 기술 스택 고르기 — Spring Boot, Next.js, 그리고 flyway

반응형

전체 인프라 구성도

백엔드: Spring Boot + PostgreSQL + flyway

백엔드와 DB, 인프라는 제가 혼자 맡은 영역이라 "익숙한 것 vs 검증된 것" 사이에서 검증된 것을 택했습니다. Spring Boot에 Spring Data JPA, PostgreSQL, 그리고 스키마 관리는 flyway로 시작했습니다.

spring.jpa.hibernate.ddl-auto=validate로 못박아 뒀습니다. Hibernate가 알아서 테이블을 바꾸게 두지 않고, 스키마 변경은 반드시 V{n}__{description}.sql 마이그레이션 파일로만 하기로 한 겁니다. 배포된 마이그레이션은 절대 수정하지 않고 새 버전을 추가하는 것도 초반부터 정한 규칙입니다.

실제로 이 프로젝트는 지금 V11까지 왔습니다.

  • V1: users, social_accounts
  • V2: 전체 도메인 테이블 14개 한 번에
  • V3: roles/grades 시스템
  • V4~V7: 증상 가이드 도메인 + 다형적 연관 구조로 리팩토링
  • V8: 입양 도메인 재설계
  • V9: 육아노트 도메인 (일상/병원/투약/몸무게/증상 기록)
  • V10~V11: 유니크 인덱스 보완, 퀴즈 도메인

V2에서 만들었던 health_records, 초기 버전 adoptions 테이블은 나중에 V8, V9에서 drop & recreate 됩니다. 처음부터 완벽하게 설계하지 못했다는 뜻이기도 하고, 동시에 "나중에 갈아엎어도 되는 구조"로 만들어뒀다는 뜻이기도 합니다.

인증: 소셜 로그인 위임 + JWT

이메일 회원가입은 만들지 않기로 했습니다. 카카오/네이버 소셜 로그인만 지원하고, 인증은 전부 Spring Security OAuth2한테 위임했습니다. 로그인이 끝나면 백엔드가 JWT(Access 30분 + Refresh 14일)를 발급합니다.

역할은 USER / MANAGER / ADMIN 세 단계, 등급은 활동량 기반 SPROUT(새싹) → CARROT(당근) → CROWN(왕관)으로 잡았습니다. 등급은 아직 자동 승급 로직은 없고 수동 변경만 가능한 상태로 시작했습니다.

이번 편 요약

  • Spring Boot + PostgreSQL + flyway, ddl-auto는 validate로 고정
  • 소셜 로그인(카카오/네이버) 전용, JWT Access/Refresh 발급
  • 역할 3단계 + 등급 3단계 설계

다음 편에서는

이 설계를 실제로 구현하면서 만난 첫 번째 버그 지옥 — 등급 변경 화면 버그와 PostgreSQL 검색 쿼리 에러 이야기입니다.

반응형