기본 콘텐츠로 건너뛰기

Swagger 설치 및 설정 기초

Swagger 설치 및 설정 기초

1. 소개

  • OpenAPI Specification - REST API를 정의하는 형식에 대한 규격이며 이전에는 Swagger Specification이라고 하였습니다.
  • Swagger Tool - OpenAPI를 정의할 수 있는 편집기, API를 테스트할 수 있는 UI 등을 포함하고 있습니다.

2. REST API 서버

  1. Swagger Tool로 테스트하고자 하는 API 서버를 실행합니다. API 서버의 URL이 다음과 같다고 가정합니다.

    • URL: http://{server-addr}:8080/api

3. Swagger Editor

3.1. Swagger Editor 다운로드

  1. GitHub에서 다운로드합니다.
  2. 다운로드한 파일의 압축을 풉니다. 이후부터 압축을 푼 폴더를 {editor-dir}로 표기합니다.

3.2. 브라우져에서 직접 열기

  1. 브라우져에서 {editor-dir}/index.html 파일을 엽니다.
  2. 이전에 작성해 두었던 API 정의 파일이 있으면 File -> Import file 메뉴를 통해서 불러 옵니다.

3.3. Node.js를 사용하여 서버로 띄우기

  1. Node.js를 설치합니다.

  2. http-server 모듈을 설치하고 시작합니다.

    npm install -g http-server
    http-server -p 8061 {editor-dir}
    
  3. 브라우져에서 http://localhost:8061 주소를 엽니다.

  4. 이전에 작성해 두었던 API 정의 파일이 있으면 File -> Import file 메뉴를 통해서 불러 옵니다.

3.4. 도커로 띄우기

3.4.1. 설치 및 실행

  1. 도커 이미지를 설치합니다.

    sudo docker pull swaggerapi/swagger-editor
    
  2. 도커 이미지를 실행합니다.

    # 백그라운드 모드로 도커 이미지 실행 
    sudo docker run -d -p 8061:8080 -e BASE_URL=/swagger-editor -e SWAGGER_JSON=/mnt/api.yaml -v /home/test:/mnt swaggerapi/swagger-editor
    
  3. 브라우져에서 http://localhost:8061/swagger-editor 주소를 엽니다.

3.4.2. 도커 이미지 종료

  1. 도커 컨테이너 목록을 표시합니다.

    sudo docker container ls
    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                          NAMES
    a0242be185b4        swaggerapi/swagger-ui   "/docker-entrypoin..."   6 seconds ago       Up 5 seconds        80/tcp, 0.0.0.0:80->8080/tcp   gifted_payne
    
  2. 도커 컨테이너를 종료합니다.

    sudo docker stop gifted_payne
    

3.5. CORS 문제 해결

3.5.1. 문제 증상

Swagger Editor나 Swagger UI에서 API를 테스트했을 때 Swagger 도구에서 아래와 같은 오류 메시지를 표시하는 경우가 있습니다.

Failed to fetch.
Possible Reasons:
* CORS
* Network Failure
* URL scheme must be “http” or “https” for CORS request.

3.5.2. CORS 문제인지 확인하는 방법

크롬 브라우져를 사용하는 경우에 대하여 설명합니다.

  1. 브라우져의 도구 더보기 - 개발자 도구 메뉴를 클릭합니다.
  2. 개발자 도구 창에서 Console 탭을 클릭합니다.
  3. 오류 로그에 blocked by CORS policy 문구가 포함되어 있으면 CORS 문제입니다.

3.5.3. 문제의 원인 및 해결 방법

Swagger 서버 주소와 API 서버 주소간 다음 세 가지 중 하나라도 다르면 CORS 문제가 발생할 수 있습니다.

  • URL 스킴(“http”, “https”)
  • 도메인
  • 포트

브라우져는 JavaScript를 다운받은 서버 주소(여기서는 Swagger 서버)와 JavaScript가 XMLHttpRequest를 사용하여 연결하고자 하는 서버(여기서는 API 서버) 주소가 서로 다를 때 연결하고자 하는 서버가 CORS를 지원하는지 검사합니다. 이 검사를 통과하지 못하면 브라우져는 CORS 오류 메시지를 출력하고 API 호출을 중단합니다.

이 문제를 해결하는 방법으로 여러 가지가 있습니다.

  1. Swagger 서버와 API 서버를 동일한 주소로 서비스
  2. API 서버가 CORS를 지원하도록 구성
  3. Swagger Hub 이용
  4. 브라우져의 CORS 검사 기능을 비활성화 (보안 우려로 비추천)

여기서는 두 번째 방법으로 문제를 해결하고자 하며 다음은 API 서버가 Spring Boot를 사용하는 경우에 대한 해결 방법입니다.

  1. HttpSecuritycors()를 호출합니다.

    @Configuration  
    @EnableWebSecurity  
    @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)  
    public class SecurityConfig extends WebSecurityConfigurerAdapter {  
        @Override  
        public void configure(HttpSecurity http) throws Exception {  
            http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);  
            http.authorizeRequests().anyRequest().permitAll();  
            http.csrf().disable();  
            http.headers().frameOptions().disable();  
            http.cors();  
        }  
    }
    
  2. CorsRegistryCorsRegistration을 설정합니다.

    @EnableWebMvc  
    @Configuration  
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override  
        public void addCorsMappings(CorsRegistry registry) {  
            CorsRegistration registration = registry.addMapping("/**");  
            registration.allowedMethods("DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT");
        }
    }
    

3.6. API 정의를 파일로 저장하기

  • File -> Save as YAML 메뉴를 클릭하고 api.yaml과 같은 이름을 지정하여 파일로 저장합니다.

4. Swagger UI

4.1. api.yaml 파일 준비

4.1.1. API 서버 주소 지정

servers:
- url: http://{server-addr}:8080/api

4.2. 도커로 띄우기

4.2.1. 설치 및 실행

  1. 도커 이미지를 설치합니다.

    # yum 최신 업데이트
    sudo yum update
    
    # docker 설치 및 시작
    sudo yum install docker
    sudo systemctl start docker
    
    # swagger-ui docker 이미지 pull 
    sudo docker pull swaggerapi/swagger-ui
    
  2. 도커 이미지를 실행합니다.

    # 백그라운드 모드로 도커 이미지 실행
    sudo docker run -d -p 8060:8080 -e BASE_URL=/swagger-ui -e SWAGGER_JSON=/mnt/api.yaml -v /home/test:/mnt swaggerapi/swagger-ui
    
  3. 브라우져에서 http://localhost:8060/swagger-ui 주소를 엽니다.

4.2.2. 도커 이미지 종료

  1. 도커 컨테이너 목록을 표시합니다.

    sudo docker container ls
    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                          NAMES
    a0242be185b4        swaggerapi/swagger-ui   "/docker-entrypoin..."   6 seconds ago       Up 5 seconds        80/tcp, 0.0.0.0:80->8080/tcp   gifted_payne
    
  2. 도커 컨테이너를 종료합니다.

    sudo docker stop gifted_payne
    

참고 자료

OpenAPI

CORS 지원

Written with StackEdit.

댓글

이 블로그의 인기 게시물

Intel MKL 예제를 Microsoft Visual C++로 빌드하기

Intel MKL 예제를 Microsoft Visual C++로 빌드하기 인텔 프로세서 시스템에서 아래의 영역에 해당하는 수학 계산을 빠르게 수행하고자 한다면 Intel MKL 라이브러리를 사용할 수 있습니다. Linear Algebra Fast Fourier Transforms (FFT) Vector Statistics & Data Fitting Vector Math & Miscellaneous Solvers 이 문서는 Intel MKL 이 제공하는 예제 파일을 Microsoft Visual C++ 로 컴파일하고 링크하여 실행 파일을 만드는 과정을 소개합니다. 빌드 환경 다음은 이 문서를 작성하는 과정에서 Intel MKL 예제를 빌드하기 위하여 사용한 환경입니다. 시스템 운영체제: Windows 10 (64비트) 프로세서: Intel Core i7 설치 제품 IDE: Microsoft Visual Studio Community 2019 (version 16) 라이브러리: Intel Math Kernel Library 2019 Update 5 환경 변수 명령 프롬프트 창을 엽니다. 아래 스크립트를 실행하여 환경 변수 INCLUDE , LIB , 그리고 PATH 를 설정합니다. @echo off set CPRO_PATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows set MKLROOT=%CPRO_PATH%\mkl set REDIST=%CPRO_PATH%\redist set INCLUDE=%MKLROOT%\include;%INCLUDE% set LIB=%MKLROOT%\lib\intel64;%LIB% set PATH=%REDIST%\intel64\mkl;%PATH% REM for OpenMP intel thread set LIB=%CPRO_PATH%\compiler\lib...

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 완성 실습 환경 Ubuntu 20.04.6 LTS Python 3.12.7 Llama3.2-1B, Llama3.2-1B-Instruct rustc 1.83.0 NVIDIA RTX 4090 24GB 프로그램 준비 실습에서 사용할 wget , md5sum 설치 sudo apt-get install wget sudo apt-get install md5sum NVIDIA GPU 설치 여부 확인 nvidia-smi 실습 디렉토리 만들기 mkdir llama3-demo cd llama3-demo git clone https://github.com/meta-llama/llama3.git Python 3.10 이상의 버전으로 가상환경 만들고 활성화 python -m venv llama-venv . llama-venv/bin/activate Rust 컴파일러 설치 How To Install Rust on Ubuntu 20.04 문서를 참고하여 Rust 컴파일러를 설치합니다. curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh 위 명령을 실행하면 아래와 같이 세 가지 선택 옵션이 나타나는데 그냥 엔터를 쳐서 1번 옵션으로 진행합니다. ... 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation 아래 명령을 실행하여 현재 쉘에 반영하고 설치된 컴파일러 버전을 확인합니다. source $HOME/.cargo/env rustc --version 의존 라이브러리 설치 pip install ...