서론

https://github.com/davibaltar/swagger-autogen

 

davibaltar/swagger-autogen

This module performs the automatic construction of the Swagger documentation. The module can identify the endpoints and automatically capture methods such as to get, post, put, and so on. The modul...

github.com

swagger-autogen이라는 아주 좋은 라이브러리를 발견했다. 위 주소의 공식문서를 읽어보면 현재 구현되어 있는 라우터들의 모듈 별 엔드 포인트를 식별하고 응답 상태 코드, 바디 파라미터, 경로의 매개 변수, 쿼리 등을 전부 식별하여 Swagger document 구성을 자동으로 수행하여 swagger에서 읽을 수 있는 형식의 json 파일을 생성해주는 라이브러리이다. 

예제

위 라이브러리에서 기본으로 제공하는 example 코드를 통해 예제를 구현하고자 한다.

먼저 예제코드 https://github.com/davibaltar/example-swagger-autogen-with-router.git 을 클론 후 모듈을 받아준다.

$ npm install

그 후 아래 명령을 사용하여 현재 nodejs 프로젝트의 엔드포인트들의 swagger를 자동으로 생성한다.

$ npm run start-gendoc

명령을 실행하면 src/endpoints.js 에 있는 Router들이 자동으로 인식되어 스웨거에서 읽을 수 있는 swagger_output.json 파일로 생성된 것을 확인할 수 있다.

$ npm start

프로젝트를 실행하면 http://localhost:3000/doc 에 swagger가 자동으로 설정된 것을 확인할 수 있다. 만약 해당 swagger-autogen을 내가 개발 중인 프로젝트에 적용하는 방법을 알아보고자 한다. 

적용

먼저 해당 프로젝트에 모듈을 다운로드 한다.

$ npm install swagger-ui-express
$ npm install swagger-autogen

그리고 프로젝트의 app.js 에서 아래와 같이 추가한다.

//상단에 삽입
const swaggerUi = require('swagger-ui-express')
const swaggerFile = require('./swagger_output.json')


//하단에 삽입
app.use('/swagger', swaggerUi.serve, swaggerUi.setup(swaggerFile)) // docs 대신 swagger로 수정한다.

방금 예제에 있던 swagger.js 파일을 프로젝트 루트 디렉터리로 옮긴 뒤 아래와 같이 수정한다. 주의할 점은 꼭 .then 코드를 삭제한다.

const swaggerAutogen = require('swagger-autogen')()


const doc = { ... } // 본인의 설정으로 수정한다.

const outputFile = './swagger_output.json' // swagger-autogen이 실행 후 생성될 파일 위치와 이름
const endpointsFiles = ['./routes/users.js', './routes/s3.js', './routes/verify.js'] // 읽어올 Router가 정의되어 있는 js파일들

//아래 코드에 .then() 이후를 삭제한다.
swaggerAutogen(outputFile, endpointsFiles, doc);

방금 swagger.js에서 .then()에 적용되어 있는 콜백으로 서버를 켜주는 코드를 삭제했기 때문에 위 코드를 실행해도 서버가 실행되지 않는다. 그래서 서버가 실행되기 전에 항상 자동으로 실행할 수 있게 package.json을 수정하고자 한다.

//package.json 의 scripts 부분

"scripts": {
	"start": "node ./bin/www", // 해당 부분은 수정하지 않는다.
	"prestart": "node ./swagger.js" // 이 부분만 추가한다.
 },

scripts 명령 prestart에 swagger-autogen을 실행시키는 코드를 삽입하게 되면 start가 되기 전에 자동으로 prestart 를 실행시켜주게 된다. 이제 이전과 똑같이 서버를 구동시킨다.

$ npm start

정상적으로 start가 되기 전에 swagger-autogen이 실행 후, swagger_output.json 파일이 생성되고 서버가 실행되는 모습이다.
이제 도메인/swagger 주소로 접속하면 자동으로 만들어진 swagger를 확인할 수 있다.