์ต๊ทผ Spring Boot 3.4 ํ๋ก์ ํธ์์ Swagger(OpenAPI) ๋ฌธ์๋ฅผ ์ ์ฉํ๊ธฐ ์ํด springdoc-openapi๋ฅผ ๋์ ํ๋๋ฐ, ์์์น ๋ชปํ ๋ฐํ์ ์๋ฌ๋ฅผ ๋ง์ฃผํ๊ฒ ๋์ต๋๋ค. ์ด ํฌ์คํธ์์๋ ํด๋น ์๋ฌ์ ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ณต์ ํฉ๋๋ค.
| ํญ๋ชฉ | ์ค์ |
|---|---|
| Spring Boot ๋ฒ์ | 3.4.0 |
| Java ๋ฒ์ | 17 |
| Swagger ๋ผ์ด๋ธ๋ฌ๋ฆฌ | springdoc-openapi 2.5.0 |

API ๋ฌธ์ ํ์ธ์ ์ํด /v3/api-docs ์์ฒญ์ ๋ณด๋์ ๋ ๋ฐ์
IntelliJ์์๋ ์ปดํ์ผ ์๋ฌ ์์ด ์ ์คํ๋์ง๋ง, Swagger ๋ฌธ์๋ฅผ ์์ฒญํ๋ ์๊ฐ 500 Internal Server Error ๋ฐ์
โ ๋ฌธ์ ์ ํต์ฌ์ ControllerAdviceBean ์์ฑ์ ๋ถ์ผ์น
Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)'
์๋ฌ ๋ก๊ทธ๋ฅผ ํ์ธํด ๋ดค์๋ ์กด์ฌํ์ง ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
-> ๋ฐ๋ผ์ ๋น์ ์ฃผ์ ํ๋ฉฐ ์ด๊ธฐํํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ์ผ๋ก ํ๋จํ์ฌ ํน์ ํธํ๋๋ ๋ฒ์ ผ์ด ๋ฌ๋ผ์ ์ด๊ธฐํ๋ฅผ ํ์ง ๋ชปํ๋๊ฐ ์์ฌ๋์ด ๋จผ์ ํด๋น๋ถ๋ถ์ ์ดํด ๋ณด์์ต๋๋ค.

springDoc ๊ณต์ ๋ฌธ์์ ๊ฐ๋ณด๋ฉด ๊ฐ๊ฐ ํธํ๋๋ ๋ฒ์ ผ์ด ๋์์์ต๋๋ค.
์ ๊ฐ ํ๋ก์ ํธ์ ์ฌ์ฉํ๊ฒ์ ์คํ๋ง๋ถํธ 3,.4 ๋ฒ์ ผ์ด์ง๋ง Springdoc OpenAPI ๋ฒ์ ผ์ 2.5. ๋ฒ์ ผ์ ์ฌ์ฉํ์ฌ ํธํ๋์ง ์๋ ๋ฌธ์ ์์ต๋๋ค.
๋ฒ์ ผ์ ๋ฐ๋ผ์ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น ํ๊ณ ๊ตฌ๊ธ๋ง๊ณผ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ํ๋จํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Springdoc OpenAPI 2.5. ๋ฒ์ ผ์ ๋์๋๋ ์คํ๋ง ๋ถํธ์ ๋ฒ์ ผ์ 3.2(springFramework 6.1)
์คํ๋ง ํ๋ ์์ํฌ ๊ณต์๋ฌธ์๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ControllerAdviceBean์ ์์ฑ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.

ControllerAdviceBean(Object bean)
ControllerAdviceBean(String beanName, BeanFactory beanFactory)
ControllerAdviceBean(String beanName, BeanFactory beanFactory, ControllerAdvice controllerAdvice)
์ด๋ ๊ฒ 3๊ฐ์ ์์ฑ์๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๋ก์ ํธ์ ์ฌ์ฉ์ค์ธ ์คํ๋ง ๋ถํธ์ ๋ฒ์ ผ์ 3.4(springFramework 6.2)์ ์ด๋ค ์์ฑ์๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํด ๋ณด์์ต๋๋ค.

ControllerAdviceBean(String beanName, BeanFactory beanFactory, ControllerAdvice controllerAdvice)
์์๊ฐ์ด ์์ฑ์๋ฅผ ํ๋๋ง ๊ฐ์ง๊ณ ์๋๊ฒ์ ํ์ธํ์์ต๋๋ค.
๋ฐ๋ผ์ ์คํ๋ง ํ๋ ์์ํฌ์ ๋ฒ์ ผ์ ๋ฐ๋ผ ์์ฑ์๊ฐ ๋ค๋ฅด๊ณ ๊ฐ๊ฐ์ ๋์ํ ์ ์๋๋ก Springdoc OpenAPI ๋ ๋ฒ์ ผ์ ๋ค๋ฅด๊ฒ ๊ตฌํ ๋์ด์์ด ์๋ก ํธํ๋๋ ๋ฒ์ ผ์ธ 2.7์ด์์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ ํ ์ ์์์ต๋๋ค.