-
[appling] 프로젝트 기초 설계 (Swagger 설정)appling 프로젝트 2024. 8. 30. 00:30728x90반응형
🔴 프로젝트 기초 설계
간단한 프로젝트라도 기본 설정을 먼저 한 후에 진행하려고 한다.
🟠 Swagger
Spring에서 문서는 Swagger와 Restdoc이 있는데 예전에는 테스트코드가 강제되는 Restdoc을 선호했으나 요즘에는 Swagger를 좀더 선호하는 편이다.
그 이유는 Restdoc은 spring에서만 사용하고 있는 반면 Swagger는 다른 api에서 제공이 되고 있어 api에 접근하는 앱, 프론트 개발자 분들이 따로 익히거나 알 필요성이 없이 바로 적응이 가능하기 때문에 더 선호한다.
또한 테스트 코드의 강제는 꼭 restdoc이 아니더라도 jacoco와 같은 설정으로 강제할 수 있기 때문에 큰 문제가 되지 않는다고 생각한다.
Restdoc으로 Swagger 파일을 생성하여 굳이 Restdoc을 사용할수 있는 방법도 있으나 그냥 간단하게 swagger를 사용하는 편이 더 낫다고 생각한다.하지만 단점이라고 할수 있는 Controller에 어노테이션이 붙는건 어쩔 수 없다. 그래도 Controller에는 반환에 대한 정보가 담겨야 한다고 생각하기 때문에 어느정도 문서를 위한 어노테이션도 붙는건 괜찮다고 생각한다.
🟢 gradle 의존성 추가
dependencies { ... implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0") implementation("org.springdoc:springdoc-openapi-starter-webflux-api:2.5.0") }
다음과 같이 의존성을 추가하면 끝이다.
🟢 Swagger 설정 파일 추가
@Configuration @OpenAPIDefinition(info = @Info(title = "Appling API", version = "1.0.0", description = "Appling API Documentation")) public class SwaggerConfig { }
설정 파일도 어노테이션으로 설정이 가능하여 크게 설정할 것이 없다.
🟢 Controller에 적용
@RestController @RequestMapping("/api") @Tag(name = "Auth API", description = "Appling API Documentation") public class HelloController { @Operation(summary = "hello", description = "hello api") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "정상", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE)), @ApiResponse(responseCode = "500", description = "서버 에러", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE)), }) @GetMapping("/hello") public ResponseEntity<Map<String, Object>> index() { Map<String, Object> map = new HashMap<>(); map.put("message", "Hello, World!"); return ResponseEntity.ok(map); } }
Contorller에 적용도 크게 어렵진 않다. 처음에는 붙는 어노테이션이 많은데 해당 부분은 간소화하는 어노테이션을 새롭게 생성해서 해도 좋을것 같다.
http://localhost:8080/swagger-ui/index.html#/로 이동하면 api를 확인해볼 수 있다.
728x90반응형'appling 프로젝트' 카테고리의 다른 글
[appling] Product 수정 (0) 2024.09.04 [appling] poroduct 등록 (0) 2024.09.04 [appling] 코드품질 관련 설정 (jacoco) (0) 2024.09.01 [appling] use case, erd 작성 (0) 2024.08.29 [appling] 프로젝트 설정 (1) 2024.08.29