songining
article thumbnail
Spring WebFlux ๋™์ž‘ ์›๋ฆฌ ์•Œ์•„๋ณด๊ธฐ (DispatcherHandler)
BACKEND/Spring 2023. 10. 1. 16:13

Spring WebFlux๊ฐ€ ํฐ ํ‹€์—์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. Spring MVC ์˜ ๊ฒฝ์šฐ์—๋Š” DispatcherServlet ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ์„ ๋ฐ›์•„ ๋’ท๋‹จ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. Spring WebFlux์˜ ๊ฒฝ์šฐ์—๋„ DispatcherServlet๊ณผ ๊ฐ™์ด front controller ์˜ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ์นœ๊ตฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ผ๋‹จ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด ๋Œ€์ถฉ ๋ถ„์„ํ•ด๋ณธ ๊ฒƒ๋“ค์„ ์š”์•ฝํ–ˆ์„ ๋•Œ ์•„๋ž˜ ๊ฐ™์€ ๊ทธ๋ฆผ์ด๋‹ค. (๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•ด์„œ ์ƒ๋žต์ด ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค.) DispatcherHandler (WebHandler์˜ ๊ตฌํ˜„์ฒด) DispatcherHandler ๋Š” WebHandler ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ Spring Webflux์—์„œ์˜ front controller ์—ญํ• ์„ ํ•œ๋‹ค. ์•„๋ž˜๋Š” DispatchHandler..

Spring Data ๊ด€๋ จ ํด๋ž˜์Šค ์ •๋ฆฌ
BACKEND/Spring 2023. 9. 18. 01:14

Spring Data ๋ž€? Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ์ง€์›ํ•œ๋‹ค. Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๋งคํ•‘์„ ์ถ”์ƒํ™” ํ˜•ํƒœ๋กœ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๋ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Main Module Spring Data Commons : ๋ชจ๋“  Spring Module์„ ๋’ท๋ฐ›์นจํ•˜๋Š” ํ•ต์‹ฌ Spring ๊ฐœ๋… CrudRepository, PagingAndSortingRepository Spring Data JDBC : spring-jdbc์— ๋Œ€ํ•œ Spring Data ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ CrudRepository๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” SimpleJdbcRepository ํด๋ž˜์Šค Spring Data JPA : JPA๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ..

article thumbnail
Spring WebFlux ๊ธฐ๋ฐ˜ MDC ์ ์šฉํ•˜๊ธฐ (+์ฝ”๋ฃจํ‹ด)
BACKEND/Spring 2023. 8. 12. 22:20

MDC ๋ž€? MDC ๋Š” Mapped Diagnostic Context ์˜ ์•ฝ์ž๋กœ key์™€ value๋ฅผ ์ €์žฅํ•˜๋Š” Map ํ˜•์‹์œผ๋กœ slf4j, logback, log4j ๋“ฑ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ThreadLocal ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— ๊ฐ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋กœ๊ทธ๊ฐ€ ์„ž์ด๊ธฐ ๋•Œ๋ฌธ) ์š”์ฒญ์ด ์–ด๋–ค ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ๊ฒƒ์ธ์ง€ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ๋ณ„๋กœ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค์–ด ํŠน์ • ์š”์ฒญ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋งŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ : ๋กœ๊ทธ์‹œ์Šคํ…œ #4-MDC๋ฅผ ์ด์šฉํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ๋กœ๊ทธ ๋ถ„๋ฅ˜ํ•˜๊ธฐ MDC ์ ์šฉํ•˜๊ธฐ Spring Framework๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด AOP๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค...

article thumbnail
Spring WebFlux์˜ Programming Models
BACKEND/Spring 2023. 2. 20. 14:22

Programming Models 1. Annotated Controller Spring MVC์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์„ WebFlux ์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. @RequestMapping, @PathVariable, @RestController, @GetMapping ๋“ฑ 2. Functional Endpoints Java8์˜ lambda style routing๊ณผ handling ๋ฐฉ์‹ (ํ•จ์ˆ˜ํ˜• ๋ชจ๋ธ) RouterFunction: ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ง€ ๊ฒฐ์ • HandlerFunction: ๋ฐ”์ธ๋”ฉ ๋ถ€ํ„ฐ HTTP ์š”์ฒญ ์‘๋‹ต์ฒ˜๋ฆฌ ServerRequest์™€ ServerResponse๋กœ ์‘๋‹ต์„ ํ•˜๋ฉฐ ์„œ๋ธ”๋ฆฟ ์ œ์•ฝ์ด ์—†๊ณ  ๋ฆฌ์•กํ‹ฐ๋ธŒ ํƒ€์ž…์„ ์ง€์›ํ•œ๋‹ค. Spring WebFlux์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐœ์˜ ๊ฐœ๋ฐœ ..

Spring Actuator ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
BACKEND/Spring 2023. 1. 31. 22:45

Spring Actuator๋ž€? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง, Metric ์ˆ˜์ง‘์„ ์œ„ํ•œ Http Endpoint๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค. (์š”์•ฝํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ!) // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator implementation 'org.springframework.boot:spring-boot-starter-actuator:3.0.1' ๋‹ค์Œ๊ณผ ๊ฐ™์ด dependency๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Ex) spring ์„ค์ • yaml ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์–ด๋–ค endpoint๋“ค์„ ํฌํ•จํ• ์ง€ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค. management: endp..

Spring Securirty 6 ์ด์ƒ ๋ฒ„์ „์—์„œ h2-console 403 ์—๋Ÿฌ ๋‚˜๋Š” ๋ฌธ์ œ
BACKEND/Spring 2023. 1. 23. 17:41

๊ธฐ์กด์— ํ•˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ http.requestMatchers("/h2-console/**").permitAll() ๋กœ h2-console์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•ด์ฃผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ๊ณ„์†ํ•ด์„œ 403(forbidden) ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ ๊ฒฐ๊ณผ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests() .requestMatchers("/users/**").permitAll() .and() .authorizeHttpRequests(auth -> auth .requestMatchers(AntPathRequestMatcher.antMatcher("/h2-console/..

Kotlin Kotest @beforeSpec @beforeContainer @beforeTest @beforeEach ์ฐจ์ด
BACKEND/Spring 2022. 9. 19. 16:58

Kotest์—๋Š” ์ „ํ›„์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ ๋Œ€ํ‘œ์ ์œผ๋กœ @beforeSpec @beforeContainer @beforeTest @beforeEach .. ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ƒ๋ช…์ฃผ๊ธฐ์— ์–ด๋– ํ•œ ์ „ํ›„ ์„ธํŒ…์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ํ…Œ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋“ฑ๋“ฑ! ์–ด๋–ค function์„ ์‚ฌ์šฉํ•˜๋ƒ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ๊ณผ์ •๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”์— ๋งž๊ฒŒ ๊ณจ๋ผ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. Function Description @beforeEach ๊ฐ testcase ๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค. @beforeTest ๊ฐ testcase ๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค. @beforeContainer ๊ฑฑ context๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค. @beforeSpec ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ spec (FunS..

FetchJoin ๊ณผ EntityGraph
BACKEND/Spring 2022. 8. 21. 15:52

์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•ด ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ์„ค์ •์„ ํ•ด์ฃผ๋ฉด ์ผ๋ฐ˜์ ์ธ ์กฐํšŒ ์ฟผ๋ฆฌ์—์„œ๋Š” ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๊นŒ์ง€ ์กฐํšŒํ•ด์˜ค์ง€ ์•Š๊ณ  ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋Š” ๊ฐ€์งœ ํ”„๋ก์‹œ ๊ฐ์ฒด๋กœ ์„ค์ •์ด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์˜ ๊ฐ’์— ์ ‘๊ทผํ•ด์•ผํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ์ฟผ๋ฆฌ๊ฐ€ ํ•œ๋ฒˆ์”ฉ ๋” ์‹คํ–‰๋˜์–ด N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด Fetch Join ์ด๋‹ค. ์—ฐ๊ด€๋œ ๊ฒƒ๋“ค์„ ํ•œ๋ฒˆ์— ๋‹ค ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์งœ ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๊นŒ์ง€ ์‹ค์ œ ๊ฐ’์œผ๋กœ ์ „๋ถ€ ์ฑ„์›Œ์ค€๋‹ค. (์ฆ‰, ์กฐ์ธ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ select ์ ˆ์— ์žˆ๋Š” ๊ฐ’๋“ค๋„ ์ „๋ถ€ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ) EntityGraph - data jpa๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ fetch join ์„ jpql ์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. JpaRepository๋ฅผ ์ƒ์†๋ฐ›๋Š” repository๊ฐ€ ์žˆ์„ ๋•Œ @..

Spring Mockito when().thenReturn ๊ณผ doReturn.when()์˜ ์ฐจ์ด
BACKEND/Spring 2022. 8. 1. 16:29

Typically, stubbing argument mismatch indicates user mistake when writing tests. Mockito fails early so that you can debug potential problem easily. However, there are legit scenarios when this exception generates false negative signal: - stubbing the same method multiple times using 'given().will()' or 'when().then()' API Please use 'will().given()' or 'doReturn().when()' API for stubbing. - st..

[Spring] detached entity passed to persist ์—๋Ÿฌ
BACKEND/Spring 2022. 5. 26. 02:32

detached entity passed to persist ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด์˜ ๋ถ€๋ถ„์— ๋‹ค์‹œ ํ•œ๋ฒˆ ๋” ์„ค์ •์„ ํ•ด์ฃผ๊ฑฐ๋‚˜ ์ €์žฅ์„ ํ•ด์ฃผ๋ ค๊ณ  ํ•  ๋•Œ ์ƒ๊ธฐ๋Š” ๊ฒƒ! ์ฆ‰, ์—”ํ‹ฐํ‹ฐ ์ข…์†์„ฑ ๋ฌธ์ œ๊ฑฐ๋‚˜ ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ !! ์˜ˆ๋ฅผ ๋“ค๋ฉด 1) id ํ•„๋“œ์— @GeneratedValue๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋„๋ก ํ•ด๋†“๊ณ  ํ…Œ์ŠคํŠธํ•  ๋•Œ id ๊ฐ’์„ ์„ค์ •ํ•ด์คฌ๋‹ค๋˜๊ฐ€.. 2) ์—”ํ‹ฐํ‹ฐ๋“ค์˜ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•  ๋•Œ ํด๋ž˜์ŠคA ์˜ a1, a2 ์— ์—ฐ๊ด€๋œ ํด๋ž˜์ŠคB์— b1 ์ด ์žˆ์„ ๋•Œ (a1 + b1) ์ €์žฅํ•˜๊ณ  (a2 + b1) ์ €์žฅ๋˜์–ด ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ (์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” cascade ๊ด€๋ จํ•ด์„œ ์„ค์ •์„ ์ œ๊ฑฐํ•ด์ฃผ๋˜๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ํ•ด์ฃผ๋ฉด ๋  ๋“ฏ!)

์„ธ์…˜๊ณผ JWT์˜ ์ฐจ์ด
BACKEND/Spring 2022. 5. 23. 23:38

JWT๋ž€? Json Web Token ์˜ ์•ฝ์ž๋กœ json ๊ฐ์ฒด์— ์‚ฌ์šฉ์ž์˜ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค. ์„ธ์…˜๊ณผ ๋‹ฌ๋ฆฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์ค€ ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ํ—ค๋”์— ์‹ค์–ด์„œ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹ (๋‹จ์ˆœํ•˜๊ฒŒ ๋งํ•˜๋ฉด ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹) Header : Signature๋ฅผ ํ•ด์‹ฑํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๋“ค ๋‹ด๊ฒจ์žˆ์Œ Payload : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ๊ณ ๋ฐ›๋Š”, ์‹œ์Šคํ…œ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋  ์ •๋ณด๋“ค์— ๋Œ€ํ•œ ๋‚ด์šฉ ๋‹ด๊ณ  ์žˆ์Œ Signature : ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ๋ฌธ์ž์—ด (์œ ํšจํ•œ ํ† ํฐ์ธ์ง€ ๊ฒ€์ฆ) ์„ธ์…˜์€? ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์ฆํ•œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘ ! ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹ stateful service๋ž€ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ณ  ์„ธ์…˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ์ฃผ๋Š” ์„œ๋น„์Šค! -> EX) ์„ธ์…˜..

SpringBoot Swagger2 UI์— JWT ํ† ํฐ Authorize ๋ฒ„ํŠผ ๋„ฃ๊ธฐ
BACKEND/Spring 2022. 2. 22. 21:12

** ๊ธฐ๋ณธ์ ์œผ๋กœ security ์„ค์ •๊ณผ swagger ์„ค์ •์ด ๋‹ค ๋˜์–ด์žˆ์Œ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ๋‹ค. SwaggerConfig.java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .useDefaultResponseMessages(false) .select() .apis(RequestHandlerSelectors.basePackage("com.cherishpet.backend")) .paths(PathSelectors.ant("/api/**")) .build() .apiInfo(metaData()) .securityCon..