MSA 환경에서 서비스별 Swagger UI를 GitHub Pages로 배포하기

2025. 9. 22. 15:15·CS

🔎 개요

개인프로젝트를 MSA구조로 설계하고 각 마이크로서비스마다 주요 기능 개발이 완료된 후, 개발한 API를 한 눈에 볼 수 있는 문서화 페이지가 필요했습니다.

Spring Boot와 우수한 호환성으로 기존 코드로 손쉽게 API 스펙을 정의할 수 있어서 Swagger를 선택했습니다

또한, 무료 정적 사이트 호스팅을 제공하고 Git 기반으로 쉽게 배포할 수 있어서 GitHub Pages를 사용했습니다

 

참고 블로그를 찾아보던 중 GitHub에 Swagger API 문서를 공유하기 글을 보게 되었고, 해당 내용을 바탕으로 구현했습니다

 

🛠️ 백엔드 환경 

각 마이크로서비스의 기술 스택은 다음과 같습니다

  • Java : 17
  • Spring Boot : 3.3.5
  • Build Tool : Gradle
  • API 문서화 : SpringDoc Open API 3

 

⚙️ 구현과정

Step 1: Spring Boot에 Swagger 설정

// swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

각 마이크로서비스에 Swagger 의존성을 추가합니다.

 

Contorller 마다 `@Tag`와 `@Operation` 어노테이션을 사용해 API 설명을 작성했습니다

로컬에서 애플리케이션을 구동한 후 `http://localhost:8081/swagger-ui/index.html\`에 접속하여 Swagger UI가 정상적으로 동작하는지 확인합니다.

 

💡Tip : Swagger 접속경로는 url 뒤에 `/swagger-ui/index.html` 붙이면 됩니다

 

Step 2: swagger.json 파일 생성

  • OpenAPI definition 아래에 있는 `/v3/api-docs` 링크를 클릭합니다

 

  • JSON형식의 데이터가 보이면 전체 텍스트를 복사한 다음, Mac인 경우 텍스트편집기 Window인 경우 메모장을 사용해서 임의의 위치에 저장합니다 (이후에 파일 이동할 예정)
  • 저는 마이크로서비스마다 아래와 같이 구분하여 저장했습니다
    • `oo-sms-sms-swagger.json` (SMS 서비스)
    • `oo-sms-cust-swagger.json` (고객 관리 서비스)
    • `oo-sms-booking-swagger.json` (예약 관리 서비스)

 

Step 3: GitHub Pages용 Swagger UI 준비

1. Swagger UI GitHub 레포지토리 Fork

  • swagger-ui GitHub 레포지토리 에 접속합니다
  • 상단 우측의 Fork 버튼 클릭하여 자신의 계정으로 복사합니다

2. 로컬 환경 설정

git clone [복사한 HTTPS URL]

# 예시
git clone https://github.com/Jisu-Shin/oo-sms-swagger-ui.git
  • '<> Code' 초록 버튼을 눌러서 클론하기 위한 URL 주소를 복사합니다

 

3. dist 폴더를 루트 경로로 이동

  • git clone 하여 로컬에서 확인할 수 있는 swagger-ui 폴더입니다. dist 폴더 내부의 모든 파일을 루트 경로로 이동합니다 (검정색으로 표시된 부분들)
  • Step 2에서 저장한 json 파일도 루트 경로로 이동합니다. (빨간색으로 표시된 부분들)

4. GitHub에 변경 및 추가된 내용들 Push

   git add .
   git commit -m "Add swagger files for microservice"
   git push origin main

 

Step 4 : Swagger UI 설정 및 배포

1. swagger.json URL 설정

  • GitHub로 push한 swagger.json 파일 클릭합니다 (보이는 이미지에서는 `oo-sms-sms-swagger.json` )
  • "Raw" 버튼 클릭하여 직접 접근 URL 복사합니다 (빨간색 동그라미로 Raw 버튼 표시)

 

2. swagger-initializer.js 수정

  • 8, 12, 16번째 라인의 URL부분에 Raw로 추출한 json url을 작성했습니다
  • swagger-initializer.js 파일을 수정 후 commit 합니다

 

3. GitHub Pages 활성화

  1. 레포지토리 설정에 들어갑니다
  2. Pages 탭 클릭합니다
  3. Branch를 master root로 설정하고 save 버튼을 누릅니다
  4. GitHub Pages 활성화가 완료됩니다!

 

🚨 +) CORS 이슈 해결

@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:8080")  // Swagger UI
                .allowedMethods("*")
                .allowedHeaders("*");
    }
}

 

GitHub Pages에서 로컬 API를 호출할 때 CORS 오류가 발생했습니다.

이를 해결하기 위해 각 마이크로서비스에 위와 같은 설정 클래스를 추가했습니다

 

🖥️ 결과 확인

위와 같이 여러 마이크로서비스의 API 문서들을 한 곳에서 통합하여 볼 수 있게 되었습니다.

각 서비스별로 탭을 전환하며 API 스펙을 확인할 수 있고, 실제로 API 호출 테스트도 가능합니다.

 

🌐 배포된 Swagger UI : https://jisu-shin.github.io/oo-sms-swagger-ui/

📂 관련 Github 레포지토리 : https://github.com/Jisu-Shin/oo-sms-swagger-ui

 

MSA 환경에서 API 문서 통합 관리가 필요하신 분들에게 도움이 되길 바랍니다.

 

📚 참고

  • GitHub에 Swagger API 문서를 공유하기

'CS' 카테고리의 다른 글

동기 vs 비동기 / 블로킹 vs 논블로킹 실습 코드로 이해하기  (0) 2025.11.13
동기vs비동기 , 블로킹vs논블로킹  (3) 2024.10.15
'CS' 카테고리의 다른 글
  • 동기 vs 비동기 / 블로킹 vs 논블로킹 실습 코드로 이해하기
  • 동기vs비동기 , 블로킹vs논블로킹
꾸준히 기록하는 지수
꾸준히 기록하는 지수
서비스 백엔드 개발자가 되기 위해 제 경험들을 하나씩 기록해봅니다
  • 꾸준히 기록하는 지수
    지수블로그
    꾸준히 기록하는 지수
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • Spring (15)
      • JAVA (9)
      • 클라우드_인프라 (4)
      • Data (5)
      • CS (3)
      • 돌아보기 (0)
      • 취업준비 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DAsP
    스프링부트
    스프링트랜잭션
    DASP합격
    SCG
    트랜잭션
    스프링클라우드
    MSA
    DASP후기
    데이터아키텍처준전문가
    SpringCloudGateway
    AWS
    트랜잭션전파
    스프링
    자격증
    스프링테스트
    DASP합격후기
    궁금증
    트러블슈팅
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
꾸준히 기록하는 지수
MSA 환경에서 서비스별 Swagger UI를 GitHub Pages로 배포하기
상단으로

티스토리툴바