[Spring] API Path Prefix 설정하기
API 개발을 하다보면 공통으로 들어가는 경로 부분이 생긴다.
예를들어 '/api' 같은 부분이나 '/v1' 같은 버전 정보가 있다.
매번 넣기 귀찮기도하고 Prefix 로 넣을 방법이 있을까하여 찾아본 것을 정리해보려한다.
0. Controller
우선 간단히 테스트할 Controller 를 만들어 주었다.
Postman으로 요청 시에 메세지가 정상적으로 오는 것을 볼수 있다.
테스트용 API 가 만들어졌으니 Prefix Path 적용 방법에 대해 알아보자.
1. application.yaml
첫번째 방법으로 application.yaml 에 정의하는 방법이다.
이 방법의 경우,
전체 Path에 적용되니 그점을 유의하자.
기존 경로에 '/api'를 붙여주고 조회한 결과 정상적으로 조회가 된다.
버전 별로 다를 수 있으니 현재 개발 중인 Spring Boot 버전을 확인하고 적용하도록 하자.
# Spring boot 2.0.0 이후
server.servlet.contextPath=/api
# 이전 버전인 경우
server.contextPath=/api
2. SpEL
위의 방법은 전체 서블릿에 적용되기 때문에 무분별하게 적용한다면 문제가 생길 수 있다.
(예를들어 설정한 OAuth Redirect Uri 에도 적용되기 때문에 이런부분이 없는지 확인하자.)
이런 부분을 피하기 위해
SpEL(Spring Extention Language) 를 이용한 방법이다.
먼저 application.yaml 파일에 Prefix 로 정할 Key, Value 를 만들어주고,
새롭게 만들어준 SpELController 클래스에 아래 내용을 작성해준다.
@RequestMapping 어노테이션에
application.yaml 파일에 정의해준 api_prefix 값을 불러오기 때문에,
실제 적용 되는 경로는 '/api/spel' 로 적용이 된다.
3. Annotation
세번째 방법은 Custom Annotation 을 만들어 사용하는 방법이다.
Prefix 경로는 위에서 작성했던 api_prefix 값을 사용한다.
클래스에 만들어둔 @ApiPrefixController 를 적용한다.
이 방법으로 진행 시,
클래스에 @RequestMapping 을 적용하면 정상적으로 적용이 되지 않기 때문에
메소드에다 뒤에 추가되는 내용을 넣어주어야한다.
Postman으로 테스트 시 정상적으로 결과값을 받아 볼수 있는 것을 볼수있다.
4. 마무리
사실 첫번째 방법 이외에는 해당 내용을 작성해줘야하는 번거로움이 존재하지만 한번에 수정이 가능한점은 장점이라 생각된다.
세번째 방법을 조금 더 커스텀 해본다면 더 간단한 방법으로 적용이 될것같아 연구해보면 좋을 듯 하다.
(Spring Data Rest에도 API의 Prefix 를 지정할 수 있는데 그 부분을 참고해서 커스텀을 도전해봐도...)
5. GitHub
GitHub - mk1-p/spring-prefix-path: Test for Spring Boot Prefix Path
Test for Spring Boot Prefix Path. Contribute to mk1-p/spring-prefix-path development by creating an account on GitHub.
github.com
6. 참고 자료
https://www.baeldung.com/spring-boot-controllers-add-prefix