Java/Spring

[SpringBoot] ์Šคํ”„๋ง ๋ถ€ํŠธ 3.2.3์—์„œ Swagger(springdoc) ์‚ฌ์šฉํ•˜๊ธฐ!

๋ฒผ๋ฆฌ01 2024. 3. 13. 23:11

๐Ÿ“Œํ™˜๊ฒฝ

IntelliJ Ultimate

Java 17

 

Spring boot 3.2.3

Gradle - Groovy

Dependencies: 

Spring Web

Thymeleaf

Spring Data JPA

lombok

MariaDB 10.11

Spring Dev tool

 

 

์ด์ „ ๊ธ€์—์„œ springfox ๋Œ€์‹  springdoc์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋‹ค. springfox์™€ springdoc๋Š” ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ๊ฐ€๋˜ ์ฑ…์ด๋‚˜ ๊ฐ•์˜์—์„œ springfox๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ง„ํ–‰์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ๋‚˜ ์—ญ์‹œ ๊ทธ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธ€์„ ์ž‘์„ฑํ•œ๋‹ค.

 

๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•œ ์ฑ…(์ž๋ฐ” ์›น ๊ฐœ๋ฐœ ์›Œํฌ๋ถ)์—์„œ๋Š” REST ๋ฐฉ์‹์œผ๋กœ ๋Œ“๊ธ€์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด `ReplyDTO`๋ฅผ ๋งŒ๋“ค๊ณ , JSON์œผ๋กœ swagger๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ ๋’ค `ReplyController`์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

springfox๋กœ ์ž‘์„ฑ๋œ `ReplyController` ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

package org.zerock.b02.controller;

import io.swagger.annotations.ApiOpertaion;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.zerock.b02.dto.ReplyDTO;

import java.util.Map;

@Controller
@RequestMapping("/replies")
@Slf4j
public class replyController {

    @ApiOperation(value = "Replies Post" notes = "POST ๋ฐฉ์‹์œผ๋กœ ๋Œ“๊ธ€ ๋“ฑ๋ก")
    @PostMapping(value = "/", consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Map<String, Long>> register(@RequestBody ReplyDTO replyDTO){

        log.info("replyDTO........" + replyDTO);

        Map<String, Long> resultMap = Map.of("rno", 111L);

        return ResponseEntity.ok(resultMap);
    }



}

 

 

`@ApiOperation` ์• ๋„ˆํ…Œ์ด์…˜์ด ์‚ฌ์šฉ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. springdoc์—์„œ๋Š” `@ApiOperation` ๋Œ€์‹  `@Operation`์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ 20๋ฒˆ์งธ ์ค„์˜ ์• ๋„ˆํ…Œ์ด์…˜๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค€๋‹ค.

 

@Operation(summary = "reply POST", description = "POST ๋ฐฉ์‹์œผ๋กœ ๋Œ“๊ธ€ ๋“ฑ๋ก")

 

 

 

 

 

http://localhost:8080/swagger-ui/index.html์— ์ ‘์†ํ•ด๋ณด๋ฉด ์œ„์™€ ๊ฐ™์ด ์ž˜ ๋“ค์–ด์˜จ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

`Try it out`์„ ๋ˆ„๋ฅด๊ณ  excuteํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

2024-03-13T22:59:30.791+09:00  INFO 87464 --- [b02] [nio-8080-exec-4] o.springdoc.api.AbstractOpenApiResource  : Init duration for springdoc-openapi is: 115 ms
2024-03-13T23:12:17.761+09:00  INFO 87464 --- [b02] [nio-8080-exec-6] o.springdoc.api.AbstractOpenApiResource  : Init duration for springdoc-openapi is: 43 ms
2024-03-13T23:18:12.240+09:00  INFO 87464 --- [b02] [nio-8080-exec-2] o.zerock.b02.controller.replyController  : replyDTO........ReplyDTO(rno=0, bno=0, replyText=string, regData=2024-03-13T14:17:56.754, modDate=2024-03-13T14:17:56.754)