IT

[SpringBoot] Versioning

data-cloud 2025. 1. 19. 12:48
반응형

 

 

 

🌱 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. https://caffeineoverflow.tistory.com/29
반응형