Spring Boot 3.5 기반 RallyOn 백엔드 서비스입니다. 현재는 하나의 앱 안에서 다음 역할을 함께 제공합니다.
auth.rallyon.test: Authorization Server, 프론트 로그인 UI, 브라우저 세션 어댑터api.rallyon.test: Resource Server API
아키텍처 기준선과 유비쿼터스 언어는 ARCHITECTURE.md를 canonical source로 사용합니다.
- 인증/인가: Spring Authorization Server 기반 Authorization Code + PKCE, OIDC discovery, Kakao/Google OAuth, 로컬 이메일 로그인, 로컬 개발용 DUMMY provider
- 세션 쿠키: access token은
.rallyon.test범위의 HttpOnly 쿠키, refresh token은auth.rallyon.test전용 HttpOnly 쿠키 - 사용자/프로필:
/users/me조회, 프로필 등록·수정, 닉네임+태그 변경, 지역/성별/급수/생년월일 관리, 닉네임/태그 검색 - 지역: Flyway로 시드된 시·군·구 목록 제공(
/regions/provinces,/regions/{provinceId}/districts) - 코트 매니저:
/free-games생성, 상세 조회·수정, 라운드/매치 편성 조회 및 일괄 수정, 참가자 추가
- Java 21, Spring Boot 3.5, Spring MVC, Spring Security
- Spring Authorization Server, Spring Security OAuth2 Resource Server
- PostgreSQL, Flyway, Spring Data JPA
- Springdoc OpenAPI, H2(로컬/테스트), Gradle, Docker Compose
src/main/resources/application.yml 및 application-*.yml에서 다음 값을 읽습니다.
- 데이터베이스:
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB - Authorization Server:
APP_AUTH_ISSUERAPP_AUTH_FRONTEND_BASE_URLAPP_AUTH_BROWSER_REDIRECT_URIAPP_AUTH_ACCESS_TOKEN_COOKIE_DOMAINAPP_API_HOST
- OAuth provider:
KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRETGOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GOOGLE_OAUTH_ENABLEDOAUTH_ALLOWED_PROVIDERS,OAUTH_DUMMY_ENABLED
- 실행 프로필:
SPRING_PROFILES_ACTIVE=local|prod
- DB만 필요할 때:
docker compose up db - 앱 실행(로컬 프로필):
./gradlew bootRun- 프로필을 지정하지 않으면 기본값으로
local이 적용됩니다. 필요하면SPRING_PROFILES_ACTIVE=local ./gradlew bootRun처럼 명시할 수 있습니다. - H2 인메모리 DB로 포트 8080에서 HTTP 기동되며
/→/swagger-ui/index.html로 리다이렉트됩니다.
- 프로필을 지정하지 않으면 기본값으로
- 전체 빌드:
./gradlew build(테스트 포함) - 테스트만:
./gradlew test(H2 사용, JUnit5)
- 애플리케이션과 DB를 함께 올릴 때:
docker compose up- 앱 컨테이너는
SPRING_PROFILES_ACTIVE=prod로 기동하며 Swagger UI는 비활성화됩니다. 리소스 사용 제한은 Compose에 정의돼 있습니다.
- 앱 컨테이너는
- Flyway가 앱 기동 시 자동 실행(
baseline-on-migrate활성). 주요 스크립트: 초기 스키마(V1__init_schema.sql), 지역 데이터 시드(V2__seed_region.sql), 사용자/자유게임 관련 확장(V3~V10). - 테스트는 H2 인메모리 DB를 사용하며 Flyway와 동일한 스키마로 검증합니다.
- Auth host:
https://auth.rallyon.test- auth UI
/identity/**/oauth2/**/.well-known/**
- API host:
https://api.rallyon.test/users/**/regions/**/free-games/**/actuator/health