DEV/Spring

[Spring] API Path Prefix 설정하기

l-eazzy 2023. 9. 14. 18:38

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

https://stackoverflow.com/questions/28006501/how-to-specify-prefix-for-all-controllers-in-spring-boot

 

 

 

 

728x90