반응형
이번 포스팅에선 API 문서를 자동화해주는 Swagger에 대해 알아볼 것이다.
API 문서는 왜 작성할까?
- 단순 문서화
- 개발 협업(프론트 개발자 - 백엔드 개발자)
- 버전 관리
- 테스트
예전에 팀 프로젝트에서 모바일 개발자님에게 API 공유를 위해 API 명세서를 일일이 노션으로 작성한 적이 있다.
당시 문서화하면서 머리가 나쁘면 몸이 고생한다는 그 말이 생각났다.
하지만 당시에는 아는 게 없으니 별 다른 수가 없어서 그냥 했었다.
멤버 등록 API를 문서화해 보자
build.gradle
/* Swagger */
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
application.yml
springdoc:
api-docs:
enabled: true
swagger-ui:
path: /swagger-ui.html
MemberApiController.createMember()
@Operation(summary = "멤버 등록", description = "새로운 멤버를 등록합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "멤버 등록 완료"),
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터")
})
@PostMapping("/api/v1/member")
public ResponseDto<?> createMember(
@io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "멤버 등록 요청 DTO",
required = true,
content = @Content(schema = @Schema(implementation = MemberRequestDto.CREATE.class)))
@RequestBody MemberRequestDto.CREATE dto) throws NoSuchElementException, Exception {
service.createMember(dto);
return ResponseDto.ofSuccess("멤버 등록에 성공했습니다.");
}
- @Operation에는 API에 대한 요약, 명세를 남길 수 있다.
- @ApiResponse에는 응답 코드와 명세를 남길 수 있고, 여러 개를 @ApiResponses로 묶을 수 있다.
- @RequestBody는 명세, 필수 여부, DTO 클래스를 매핑할 수 있다.
- 참고로 JSON 데이터를 객체에 매핑하는 @RequestBody와는 다른 클래스를 가리킨다.
MemberRequestDto
@Schema(description = "멤버 요청 DTO")
public class MemberRequestDto {
@Getter
@Setter
@Schema(description = "멤버 등록 요청 DTO")
public static class CREATE {
@Schema(description = "멤버 이메일")
private String email;
@Schema(description = "멤버 비밀번호")
private String password;
@Schema(description = "멤버 이름")
private String name;
@Schema(description = "멤버 명세")
private String description;
}
}
- 컨트롤러에서 DTO 클래스를 매핑하고서 DTO에도 @Schema를 통해 클래스, 필드 별 명세를 남겨야 한다.
http://localhost:8080/swagger-ui.html
- 위 이미지처럼 API에 대한 계약 정보를 확인할 수 있다.
- 우측 상단에 [Try it out] 버튼을 통해 API를 실행해 볼 수도 있다.
2025-03-06T22:17:46.322+09:00 INFO 18992 --- [nio-8080-exec-8] p6spy : [statement] | 3 ms |
insert
into
tbl_member
(created_at, member_del_flag, member_description, modified_at, member_name, member_password, member_email)
values
('2025-03-06T22:17:46.253+0900', '0', 'string', '2025-03-06T22:17:46.253+0900', 'string', '$2a$10$QUS41KaM4NEv7EtG52XoEe76tY/cIyhMKIom5anPg7uPOsICPKR5O', 'string')
2025-03-06T22:17:46.333+09:00 INFO 18992 --- [nio-8080-exec-8] p6spy : [commit] | 1 ms |
- [Execute] 버튼을 통해 실행할 수 있으며, 버튼을 누르면 실제로 서버에 쿼리가 실행된다.
- 위 이미지처럼 API 요청을 위한 Curl 명령어와 응답 관련 정보도 제공한다.
마치며
어제 포스팅한 P6Spy든 Swagger든 성능 저하를 위해 운영 환경에서는 사용하지 않도록 처리가 필요하다.
요즘 왜 이렇게 로깅이나 API 문서 자동화 같은 잡기술만 공부하고 싶을까 ㅋㅋ
진짜 해야 할 공부는 따로 있는데 🤪
이미지 출처
스웨거 (소프트웨어) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이
ko.wikipedia.org
'개발 > 스프링' 카테고리의 다른 글
[Trouble-shooting] 중첩 클래스명 중복으로 Swagger가 고장났다 (2) | 2025.03.21 |
---|---|
Faker가 만들어 주는 테스트 데이터, 또 나만 몰랐지 (3) | 2025.03.19 |
[Trouble-shooting] MyBatis는 카멜케이스 설정을 직접 해야 한다 (2) | 2025.03.18 |
P6Spy를 도입하여 쿼리 로깅을 개선해보자 (2) | 2025.03.06 |
QueryDSL을 사용해보자 (3) | 2025.02.15 |