Open Api Specification(OAS)를 위한 프레임 워크이다.
OAS는 RESTful 웹 서비스를 약속된 규칙에 맞게 API 스펙을 JSON과 YAML 형식으로 표현한다. ➡︎ 이를 통해 추가 문서 없이 서비스를 이해할 수 있다.
SpringBoot 3.4.2
Java 17
💡 OpenAPI 3.0부터는 SpringFox를 지원하지 않는다. 따라서,
SprirngDoc로 변경하여 진행한다.//Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4'

💡패키지 생성 후 Config 작성
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
Info info = new Info()
.version("v1.0") //버전
.title("일정 관리 API") //이름
.description("일정 관리 프로젝트 API"); //설명
return new OpenAPI()
.info(info);
}
}




@Tag(name = "사용자 관리", description = "사용자 관리 API입니다.")
public interface UserControllerDocs {
@Operation(summary = "사용자 등록", description = "작성자명, 비밀번호, 이메일을 입력받아 사용자를 등록합니다. ")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "일정이 성공적으로 등록되었습니다."),
@ApiResponse(responseCode = "400", description = "작성자명, 비밀번호 미입력으로 일정 등록에 실패하였습니다.")
})
public ResponseEntity<UserResponseDto> createUser(
@RequestBody UserRequestDto dto);
@Operation(summary = "사용자 수정", description = "사용자의 `작성자명(author)`만 수정 가능하며, 올바른 비밀번호 입력 시 사용자 수정이 가능합니다.")
public ResponseEntity<UserResponseDto> updateUser(
@Parameter(description = "수정할 사용자 ID")
@PathVariable Long userId,
@RequestBody UserRequestDto dto
);
}

public class UserController implements UserControllerDocs {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@Override
@PostMapping
public ResponseEntity<UserResponseDto> createUser(@RequestBody UserRequestDto dto) {
return new ResponseEntity<>(userService.createUser(dto), HttpStatus.CREATED);
}
@Override
@PatchMapping("/{userId}")
public ResponseEntity<UserResponseDto> updateUser(
@PathVariable Long userId,
@RequestBody UserRequestDto dto
) {
return new ResponseEntity<>(userService.updateUser(userId, dto), HttpStatus.OK);
}
}
❗
어노테이션을 Controller.java에 직접적으로 달아서 사용 가능하다.

Exception 핸들링을 하기 위해 @RestControllerAdvice 어노테이션을 추가하였을 때 아래와 같은 에러가 발생하였다.

따라서 swagger RestControllerAdvice 충돌 해결의 글을 참고하여 Spring Boot 기존 버전(3.4.2)에서 3.3.1로 변경하여 문제를 해결했었다.
팀 프로젝트를 하며 팀원분이 @Hidden이라는 어노테이션을 사용하면 해결 가능하다고 말씀해 주셔서 해당 어노테이션을 아래와 같이 적용하였더니 문제가 해결되었다.

@Hidden에 대해 정확히 알고싶으신 경우 참고하세요!
Hide APIs with @Hidden in Spring
📌 swagger 적용하기
📌 1. swagger란?
📌 2. swagger란?
📌 swagger RestControllerAdvice 충돌 해결