api-gateway는 Didgo MSA의 외부 API 진입점이다.
이 서비스는 다음 책임을 가진다.
- 외부 요청 라우팅
- JWT Access Token 검증
- 공개 API와 보호 API 분기
- 내부 신뢰 헤더 재구성
- CircuitBreaker / fallback 처리
- CORS 처리
현재 외부 요청 흐름은 다음과 같다.
Client -> Nginx -> api-gateway -> user-service
- Java 21
- Spring Boot 3.5.13
- Spring Cloud Gateway
- Spring Security
- Resilience4j
- Actuator
- JJWT
- Docker
POST /api/auth/signupPOST /api/auth/loginPOST /api/auth/logoutPOST /api/auth/reissueGET /api/users/mePATCH /api/users/me/swagger-ui/**/v3/api-docs/**
현재 1차 라우팅 대상은 user-service다.
공개 API:
POST /api/auth/signupPOST /api/auth/loginPOST /api/auth/reissue- Swagger / OpenAPI 문서 경로
인증 필요 API:
POST /api/auth/logoutGET /api/users/mePATCH /api/users/me
보호 API 요청은 Gateway에서 JWT를 검증한 뒤 X-User-Id 같은 내부 헤더로 변환해 하위 서비스에 전달한다.
로컬에서 단독 테스트:
JAVA_HOME=/path/to/java21 ./mvnw test애플리케이션 실행:
JWT_SECRET=your-secret \
JWT_ISSUER=user-service \
USER_SERVICE_URI=http://localhost:8080 \
./mvnw spring-boot:runDocker 빌드:
docker build -t didgo-api-gateway:latest .전체 연동 실행은 상위 인프라 레포의 docker compose를 사용한다.
JWT_SECRET: JWT 서명 검증 키JWT_ISSUER: 허용할 토큰 issuerUSER_SERVICE_URI: 라우팅 대상 user-service 주소CORS_ALLOWED_ORIGINS: 허용할 CORS origin 목록SERVER_PORT: Gateway 포트
현재 확인된 범위:
- Spring Context 로딩
- Nginx -> api-gateway -> user-service 라우팅
- 공개 API 통과
- 보호 API 무토큰 차단
- 보호 API 유효 토큰 통과
- CORS preflight 허용
추가 보강이 필요한 범위:
- Gateway 인증 필터 단위 테스트
- 헤더 sanitizing 테스트
- CircuitBreaker / fallback 테스트
- 다중 서비스 라우팅 테스트