반응형
🌱 Versioning 이란?
API의 기능이 변경될 때, 기존에 서비스를 제공받고 있는 클라이언트는 영향을 받지 않아야 한다. 이를 위해 API에 버전을 적용하여 관리하는 것을 Versioning이라고 한다. API가 Version별로 제공된다면 클라이언트는 API의 변경여부와 상관없이 기존 서비스를 지속적으로 이용할 수 있으며, 원한다면 새로운 버전에 맞춰 개발을 진행하여 신규 기능을 제공받을 수도 있게 된다.
🌱 Versioning 전략
Versioning 전략은 크게 다음과 같이 4가지로 나눌 수 있다.
- URI를 이용한 방법
- Request Parameter를 이용한 방법
- 헤더를 이용한 방법
- MIME Type을 이용한 방법
🌱 URI 이용
REST API의 버전을 URI 경로에 명시하는 방법이다.
@GetMapping("/v1/versioning-uri")
public ResponseEntity uriV1() {
return ResponseEntity.ok("URI 방식 v1");
}
@GetMapping("/v2/versioning-uri")
public ResponseEntity uriV2() {
return ResponseEntity.ok("URI 방식 v2");
}
- 호출 결과
🌱 Request Parameter 이용
버전을 관리해주는 Parameter를 추가하여 해당 파라미터로 버전 정보를 받는 방법이다.
@GetMapping(value = "/versioning-param", params = "version=1")
public ResponseEntity paramV1() {
return ResponseEntity.ok("파라미터 방식 v1");
}
@GetMapping(value = "/versioning-param", params = "version=2")
public ResponseEntity paramV2() {
return ResponseEntity.ok("파라미터 방식 v2");
}
- 호출 결과
🌱 Header 이용
커스텀 헤더를 만든 후 버전 정보를 명시해준다.
@GetMapping(value = "/versioning-header", headers="X-API-VERSION=1")
public ResponseEntity headerV1() {
return ResponseEntity.ok("헤더 방식 v1");
}
@GetMapping(value = "/versioning-header", headers="X-API-VERSION=2")
public ResponseEntity headerV2() {
return ResponseEntity.ok("헤더 방식 v2");
}
- 호출 결과
🌱 MIME Type 이용
MIME type을 이용하면 API 전체를 버전화하는 대신 단일 리소스를 버전화할 수 있어 보다 세밀하게 제어할 수 있다.
@GetMapping(value = "/versioning-mime", produces = "application/vnd.company.appv1+json")
public ResponseEntity mimeV1() {
return ResponseEntity.ok("MIME 방식 v1");
}
@GetMapping(value = "/versioning-mime", produces = "application/vnd.company.appv2+json")
public ResponseEntity mimeV2() {
return ResponseEntity.ok("MIME 방식 v2");
}
- 호출 결과
References.
1. Developer's Delight - [Spring] REST API Version 관리
2. jeonghoon - Rest API 버전 관리하기(URL, Request Parameter, Header)
반응형
'Spring' 카테고리의 다른 글
[Security] Keycloak 설치 및 설정 (0) | 2023.03.20 |
---|---|
[Security] Keycloak 소개 (0) | 2023.03.20 |
[SpringBoot] HATEOAS (0) | 2023.03.13 |
[SpringBoot] REST API (0) | 2023.03.11 |
[SpringBoot] 모니터링 환경 구축 #3 - Grafana (0) | 2023.03.04 |