[Spring Boot] JitPack | MSA Project GateWay Swagger 구현
배경
각 서비스에서 API 명세를 보고싶을 때 각 서비스에서 실행한 포트번호를 들어가서 하나하나 확인을 해야 하는 문제가 생겼다.
게이트웨이에서 각 서비스 포트 번호를 몰라도 확인할 수 있으면 좋겠다 라는 생각에 Swagger를 GateWay에 넣을 생각을 하게 됐다.
목표
모든 서비스에서 Swagger 설정 중복 제거
이전 포스팅 글에서 베이스 엔티티를 따로 적용한 프로젝트에서 Swagger 설정 클래스 추가하여 모듈로 구성
의존성 추가
공통 모듈 (gabojago-common)
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
각 서비스에서 적용하려고 할 때 spring-boot-starter-web 기반인 tomcat 환경이기 때문에 webmvc-ui를 의존 받아야 합니다.
구현 클래스
공통 모듈내 클래스 생성
@AutoConfiguration
@OpenAPIDefinition(
info = @Info(
title = "Gabojago Common API",
version = "v1.0",
description = "공통 Swagger 설정"
)
)
public class SwaggerAutoConfig {
@Bean
public OpenAPI openAPI() {
return new OpenAPI()
.addServersItem(new Server().url("/"))
.info(new io.swagger.v3.oas.models.info.Info()
.title("Gabojago API 문서")
.version("v1.0")
.description("공통 Swagger 자동 구성"));
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
}
src -> main -> resources -> META-INF -> spring -> org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일 추가
org.springframework.boot.autoconfigure.AutoConfiguration.imports 내부에 밑에 한줄 추가
com.gabojago.swagger.config.SwaggerAutoConfig
적용 방식
각 서비스에서는 gitpack 에 배포한 의존성을 주입받습니다.
implementation 'com.github.GBG-Gaboja-Go:gabojago-common:1.0.5'
GateWay
springdoc:
api-docs:
enabled: true
swagger-ui:
enabled: true
urls:
- name: user-service
url: http://localhost:20000/v3/api-docs
- name: order-service
url: http://localhost:20001/v3/api-docs
정리
사실 gateway에 swagger를 적용하면서 엄청 많은 에러를 만났다.. CORS 문제부터 기존에 등록되어있던 로드밸런싱 경로랑 겹치는 부분때문에 애를 많이 먹었다..
CORS문제는 다음 포스팅에서 정리해두겠다..
'BACKEND & SERVER > Spring Boot MSA' 카테고리의 다른 글
| [Spring Boot] FeignClient 사용 시 발생한 예외 처리 문제 (2) | 2025.11.19 |
|---|---|
| [Spring Boot] 스프링 부트 슬랙 API 연동하고 이메일 인증하기 (1) | 2025.11.11 |
| [Spring Boot] JitPack | MSA 프로젝트에서 공통 관심사 분리하기 (0) | 2025.11.03 |
| [Spring Boot] DTO에 Serializable을 사용하는 이유 (0) | 2025.10.30 |
| [Spring Boot] Spring Cloud GateWay & Filter (0) | 2025.10.27 |
