Api Versioning (spring boot 4 이상)
- 스프링 프레임워크 7 (스프링 부트 4 이상)부터 API 버전 관리 기능이 공식적으로 추가되어, 대규모 서비스 개발 시 유용하게 활용될 수 있습니다. 🚀
- API 버전 관리에 대한 표준이 없으며, REST의 창시자 로이 필딩은 오히려 API 버전 관리에 반대하는 입장을 표명하기도 했습니다. 🤷♂️
- 기존에는 쿼리 파라미터, 경로 세그먼트, 사용자 정의 헤더, 미디어 타입 파라미터 등 다양한 방식으로 API 버전을 구현해왔습니다. 🛠️
- 스프링 7은 이 네 가지 일반적인 API 버전 관리 방식을 모두 공식적으로 지원하며, 개발자가 선택하여 사용할 수 있습니다. ✅
- 스프링 부트 4에서는
application.yml 또는 application.properties를 통해 spring.mvc.api-versioning.use-header와 같은 설정을 사용하여 쉽게 버전 관리 기능을 활성화할 수 있습니다. ⚙️
- API 버전은 기본적으로
메이저.마이너.패치 형태의 시맨틱 버전 구문을 사용하여 분석됩니다. 🔢
WebMvcConfigurer 인터페이스를 구현하여 configureApiVersioning 메서드를 오버라이드함으로써 각 버전 관리 방식을 설정할 수 있습니다. 💻
- 헤더 기반 버전 관리:
useRequestHeader("API-Version")으로 설정하고, HTTP 요청 헤더에 API-Version: 1.1과 같이 버전을 명시합니다. 🏷️
- 쿼리 파라미터 기반 버전 관리:
useQueryParameter("version")으로 설정하고, URL에 ?version=1.1과 같이 쿼리 파라미터로 버전을 전달합니다. ❓
- 경로 세그먼트 기반 버전 관리:
usePathSegment(인덱스)로 설정하여 URL 경로의 특정 위치(예: /v1/resource)를 버전으로 사용합니다. 🛣️
- 미디어 타입 파라미터 기반 버전 관리:
useMediaTypeParameter("version")으로 설정하고, Content-Type: application/json;version=1.1과 같이 미디어 타입 뒤에 파라미터로 버전을 명시합니다. 📄
- 테스트 코드 작성 시
WebMvcTest와 MockMvc를 활용하여 각 버전 관리 방식의 동작을 검증할 수 있으며, WebMvcConfigurer를 테스트 컨텍스트 내에서 설정하여 적용합니다. 🧪
- 스프링 3부터는 JUnit 4 지원이 중단되고 JUnit 5만 공식적으로 지원합니다. 🖐️