서론
현재 진행 중인 프로젝트의 공식 문서를 Swagger로 정하고 작업을 진행하고 있는데,
앱 개발자와 협업을 하며 Swagger 확인 도중 @AuthenticationPrincipal를 이용하여 회원을 파라미터로 받는 엔드포인트에 다음과 같이 지속적으로 빈 괄호를 넘겨줘야 정상 작동하는 상황이 발생하였다.
본론
위 내용을 해결하기 위해 @AuthenticationPrincipal이 들어가는 EndPoint에
@Parameter(hidden = true)를 설정을 하여 문제는 해결이 되었으나 저 메서드가 들어가는 모든 엔드포인트에 설정하기는
작업이 번거로워 전역적인 설정이 없는지 찾아보았다.
전역적인 설정을 위해 검색을 해보니
springfox-swagger-ui , springfox-swagger2 라이브러리를 기반으로 한 설정들만 찾을 수 있었다.
내가 사용하고있는 Swagger3 라이브러리는 springdoc-openapi-ui였기 때문에 해당 설정들을 열심히 찾아보던 중,
내가 사용하는 라이브러리의 깃헙의 이슈에서 해당 내용을 찾을 수 있었다.
내용의 요약은 나와 같은 문제로
- @AuthenticationPrincipal의 객체가 Swagger에서 안 보이게 하고 싶은 사람이 Issue를 올렸고
- 공식 답변으로 내가 처리했던 @Parameter(hidden = true)을 하라고 답변을 주었다.
- Security에서 동작을 처리한 모듈이 추가되었다는 댓글이 달렸고, springdoc-openapi-security 의존성을 추가하면 된다 라는 내용이었다.
build.gradle 설정
19년도 글이였기 때문에, 버전 호환이 안될 수 있을 것 같아서 자동완성으로 버전을 확인을 해보다가 프로젝트에서 사용되고있는 spring-openapi-ui 버전이 1.6.13 이였기 때문에 같은 버전으로 해당 security 버전을 추가해 보았다.
추가 후 @Parameter(hidden = true)를 제거하고,
Swagger 페이지에 들어가 @AuthenticationPrincipal이 들어간 endPoint들을 확인해 보았다.
다음과 같이 적용이 된 것을 확인할 수 있다.
결론
간단하게 문제를 해결했음에도 전역적으로 문제를 해결하기 위해 찾아보며
내가 왜 Swagger3을 사용하기 위해 springdoc-openapi-ui를 사용했었는지 배울 수 있었던 것 같다.
간단한 내용이지만 글을 남긴 건 한국어로 정리가 되어있는 글이 없어 정리를 해놓고 싶었기 때문이었다.
추가된 springdoc-openapi-security 라이브러리를 조금 더 분석을 해보아야겠다.
'💻Spring' 카테고리의 다른 글
WebClient를 활용한 병렬 API 호출 및 예외 처리 (0) | 2024.02.19 |
---|---|
Spring Boot @Async 비동기 로직 테스트 - 테스트 격리 (0) | 2024.01.24 |
Spring WebClient를 이용한 Open API 통신 (0) | 2023.12.11 |
Spring Boot에서 Batch, Scheduler 사용기 (0) | 2023.12.08 |
[REST API] GET 메서드에서의 데이터 전달 (0) | 2023.09.25 |