Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- S3
- OptimisticLock
- Invalid property 'principal.username' of bean class
- interface
- 백준
- kotest testcontainers
- java
- 낙관적 락 재시도
- TestContainers
- @transactional
- 멀티모듈 테스트컨테이너
- ObjectOptimisticLockingFailureException
- spring aop
- redissonlock aop
- ObjectOptimisticLockingFailureException 처리
- 형상관리
- springsecurity
- RefreshToken
- AccessToken
- aop
- jpa
- spring DI
- netty
- multimodule testcontainers
- 우아한 테크러닝
- DI
- Spring Cloud Gateway
- 소수찾기 java
- 낙관적 락 롤백
Archives
- Today
- Total
조급하면 모래성이 될뿐
Restdocs와 Swagger UI 연동해서 EC2에 배포하기 본문
Why?
- 팀 프로젝트를 하면서 애플리케이션 코드에 문서화를 위한 코드를 추가하는 것이 마음에 들지 않아 RestDocs를 선택했다.
- 하지만 RestDocs는 별로이쁘지 않았고, Swagger처럼 바로 호출할 수 없다는 단점이 있었다.
Need?
plugins {
// api-spec 플러그인 추가
id 'com.epages.restdocs-api-spec' version '0.16.0'
}
dependencies {
// api-spec 의존성 추가
testImplementation 'com.epages:restdocs-api-spec-mockmvc:0.16.0'
}
// openapi3 task 추가, 문서화 할 때 아래 정보를 참조해서 만들어진다.
openapi3 {
server = 'http://3.39.184.232:8080'
title = 'Tenwonmoa API'
description = 'Tenwonmoa API description'
version = '1.0.0'
format = 'yaml'
}
// build 후 생성된 openAPI문서를 src/main/resource 하위로 복사하기 위한 task를 추가한다.
task copyOpenApi(type: Copy) {
from file("build/api-spec")
into file("src/main/resources/static/docs")
}
// build 후 생성된 openAPI문서를 복사하는 task를 수행한다.
build {
dependsOn copyDocument
finalizedBy 'copyOpenApi'
}
How?
- RestDocs에서 OpenAPI Spec 추출.
- restdocs-api-spec라이브러리를 사용하여 RestDocs를 작성하면 된다.
- 2개의 import만 변경해서 사용하면 된다.
// import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*;
import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.*;
// import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*;
- Swagger UI를 실행시킨다.
- Swagger UI에서 추출한 OpenAPI를 확인할 수 있다.
- Docker-Container를 통해 Swagger UI를 실행한다.
배포?
- ec2내에서 docker-compose를 통해 Swagger-UI를 실행시켰다.
- 8082 포트 요청을 받아 compose내의 8080 포트로 떠있는 Swagger-UI로 포워딩하게 한다.
- 배포 과정에 docker-compose를 실행시키도록 추가한다.
version: "3.7"
services:
tenwonmoa-swagger:
image: swaggerapi/swagger-ui
container_name: tenwonmoa-swagger
ports:
- 8082:8080
environment:
API_URL: {URL}:8080/docs/openapi3.yaml
결과 확인
후기
- RestDocs와 SwaggerUI를 연동시킴으로써 애플리케이션 코드에 불필요한 코드를 작성하지 않아도 되었고, UI적으로도 보기 좋은 문서화가 가능했다.
- docker-compose에 익숙하지 않아서 배포하는 과정에서 port설정을 헷갈려서 애를 먹기는 했지만.. 그래도 팀원의 도움을 받아 해결할 수 있었다.
- 결과적으로 front와의 협업하는 데 있어 swagger를 제공하여 생산성을 높이고, 백엔드 입장에서도 의도한 대로 문서화를 할 수 있었다.
참조
반응형
'TroubleShooting > 데브코스' 카테고리의 다른 글
무중단 배포 적용하기 (0) | 2022.08.26 |
---|---|
서브모듈 적용해서 DB접속정보 보호하기 ! (0) | 2022.08.07 |
CodeDeploy 적용기 (0) | 2022.07.26 |
Service에서 DataIntegrityViolationException을 Catch 못함 (0) | 2022.07.14 |
S3 파일 업로드 (0) | 2022.07.11 |