Skip to content

feat: API 버전 정책 적용 — X-API-Version 헤더 협상 - #115

Merged
RosieOh merged 1 commit into
mainfrom
feat/api-version-header
Sep 22, 2026
Merged

RosieOh merged 1 commit into
mainfrom
feat/api-version-header

Conversation

@RosieOh

@RosieOh RosieOh commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Closes #44

결정

경로 버전(/api/v1) 대신 X-API-Version 헤더. 근거와 절차는 docs/reference/api-versioning.md.

요청 처리
헤더 없음 현재 버전(1) — 기존 클라이언트 변경 불필요
1 / v1 1
그 외 400 API_VERSION_UNSUPPORTED

이슈 할 일 대응

  • 경로 vs 헤더 결정 — 헤더
  • 공통 규칙 반영 — ApiVersionFilter (모든 요청), 죽은 @RequestMapping("/api/v1") 제거
  • 기존 엔드포인트 호환 — 헤더 생략 = 현재 버전, 폐기는 Deprecation/Sunset 절차 문서화
  • OpenAPI 버전 표기 — 모든 API 에 선택 헤더, info.version
  • README/클라이언트 가이드 — 정책 문서
  • 버전 미지정 요청 테스트 — ApiVersionFilterTest, AccessControlContractTest.apiVersionHeader

테스트

./gradlew test jacocoTestCoverageVerification — 522 tests, 실패 0, skip 0

경로 버전(/api/v1) 대신 헤더로 버전을 주고받는다. 프런트 호출과 SecurityConfig 인가
규칙이 전부 버전 없는 경로로 짜여 있어, 경로에 버전을 넣으면 인가 규칙을 두 벌 유지해야 한다.

- ApiVersionFilter: 헤더가 없으면 현재 버전(1), 1/v1 수용, 모르는 버전은 400.
  응답에 처리한 버전을 X-API-Version 으로 돌려준다. CORS 허용·노출 헤더에 추가.
- BaseController 의 @RequestMapping("/api/v1") 제거. 하위 컨트롤러가 전부 덮어써
  한 번도 적용된 적이 없고 "경로 버전을 쓴다" 는 오해만 낳았다. app.api.base-url 도 제거.
- Swagger: 모든 API 에 선택 헤더 표시, 문서 버전 표기.
- docs/reference/api-versioning.md: 결정 근거, 규칙, 호환되지 않는 변경 절차.
@RosieOh
RosieOh merged commit 8d5be73 into main Sep 22, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[아키텍처] API 버전 정책 실적용 (/api/v1 또는 헤더)

1 participant