[Start Spring Boot] REST Api의 버전관리

·2024년 3월 20일
0

Start Spring Boot!

목록 보기
23/53
post-thumbnail

버전관리의 필요성

  • Old Team
{
	"id":2,
	"name":"Lg",
	"city":"Seoul",
	"championships":3
}
  • New Team
{
  "id":2,
  "name":"Lg",
  "city":"Seoul",
  "championships":3,
  "sport":{
    "name":"baseball",
    "league":"KBO"
  }
}
  • 다음과 같이 Entity가 변경된 경우 API를 변경해버리면 사용자의 사용성이 떨어짐!
  • 버전관리는 다음과 같이 API의 변화에 사용성을 유지하면서 변경을 위한 것
  • 운영중에 새로운 유형의 API가 추가될때 이용!

버전관리의 방식

  • URL
  • Request Parameter
  • Header
  • Media Type

새로운 객체 생성하기

  • Sport.java
package com.chan.ssb.team.v2;

public class Sport {
    private String name;
    private String league;

}
  • TeamV2.java
package com.chan.ssb.team.v2;

public class TeamV2 {
    private long id;
    private String name;
    private String city;
    private int championships;
    private Sport sport;

}

URL 방식

  • 가장 어렵지 않은 방식이다.
  • api/v1/team, api/v2/team 이런식으로 이용한다.
@RequestMapping("/api/v1/team")
@RequestMapping("/api/v2/team")
  • 다음과 같은 방식으로 적용할 수 있다.

Request Parameter

    @GetMapping(value = "", params = "version=1")
    public Team[] getALLTeamv1() {
        return teamsV1;
    }

    @GetMapping(value = "", params = "version=2")
    public TeamV2[] getAllTeamsv2() {
        return teamsV2;
    }
    
  • 사용자 정의 타입을 만들어서 사용하는 방식
  • Controller.java
    @GetMapping(value = "/header", headers = "X-API-VERSION=1")
    public Team[] getALLTeamV1ByHeader() {
        return teamsV1;
    }

    @GetMapping(value = "/header", headers = "X-API-VERSION=2")
    public TeamV2[] getAllTeamsV2ByHeader() {
        return teamsV2;
    }
    

  • 다음과 같이 사용이 가능

Media Type

  • Header의 Accept의 값을 이용하는 방식
  • Controller.java
    @GetMapping(value = "/accept", produces = "application/vnd.company.app-v1+json")
    public Team[] getALLTeamV1ByAccept() {
        return teamsV1;
    }

    @GetMapping(value = "/accept", produces = "application/vnd.company.app-v2+json")
    public TeamV2[] getAllTeamsV2ByAccept() {
        return teamsV2;
    }
    



어떤것이 좋은가?

  • URL이 복잡해진다.
  • 헤더를 사용하지 않는 것이 좋다.
  • 따라서, 정답은 없다!
  • 실제로 많은 기업에서 각각 저 방식들을 사용하고 있다.
  • 단, 한가지 방식으로 버전을 관리하자

끝내면서

  • 아직 버전 관리가 필요하지 않기 때문에 저 코드는 다시 돌아갈 것이다!
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보