๐ Spring
๊ฐ๋ฐํ๊ฒฝ๐ก ์ ์ฒด ์ฝ๋๋ Github๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์.spring boot 3.3.1JDK 17IntroSpring MVC์์๋ MultipartFile ์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ์ผ ์
๋ก๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ZIP, UnZIP ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ ํธ์ฑ ํด๋์ค๋ฅผ ํจ๊ป ๊ฐ๋ฐํด๋ณด๊ณ , MultipartFile์ ํจ๊ป ์ฌ์ฉํ์ฌ ํ์ผ ์
๋ก๋, ๊ทธ๋ฆฌ๊ณ HttpServletResponse๋ฅผ ํตํด ํ์ผ์ ํด๋ผ์ด์ธํธ์๊ฒ ์คํธ๋ฆผ์ ํตํด ๋ด๋ ค์ค์ ๋ค์ด๋ก๋ํ ์ ์๋ API๋ฅผ ๊ฐ๋ฐ ๋ฐ ํ
์คํธ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.๋จผ์ Multipartfile์ด ๋ญ๊น์?๋ณดํต ํ์ผ์ ์ ์กํ ๋, HTTP body๋ฅผ ์ฌ๋ฌ ๋ถ๋ถ(Multipart Data)์ผ๋ก ๋๋ ์ ๋ณด๋ด๋๋ฐ ์ด๋ฌํ Multipart Data ์ฆ, Mult..
๐ Spring
๊ฐ์application.yml์ ์ค์ ํ property๊ฐ๋ค์ @Value๋ก ๊ฐ์ ธ์ค๊ธฐ๋ณด๋ค๋ ํด๋น ์ค์ ์ ๋ค๋ฃจ๋ ๊ฐ์ฒด๋ฅผ ํ๋ ๋ง๋ค์ด๋๊ณ ๊ฐ์ ธ๋ค ์ธ ์ ์์๊น? ํ๋ ์๋ฌธ์์ ์ถ๋ฐํ์์ต๋๋ค. ์ฐพ์๋ณด๋ ์คํ๋ง ๋ถํธ์์๋ @ConfigurationProperties๋ฅผ ํตํด Property๋ฅผ ๊ฐ์ฒด์ ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. @Value ์ฃผ์
๋ฐฉ์๋ณด๋ค ํจ์ฌ ๋ ์์ ํ๊ณ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.1. Dependency ์ถ๊ฐannotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'2. application.ymlmy: service: enabled: false remote-addr..
๐ Spring/๊ฐ๋
๋ฐ ์ดํด
Intro ๊ธฐ๋ณธ์ ์ผ๋ก Spring MVC๋ ์กด์ฌํ์ง ์๋ API ์์ฒญ ์ ์๋ต์ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ๊ณ ์์ต๋๋ค. { "timestamp":"2023-09-21T11:30:05.517+00:00", "status":404, "error":"Not Found", "path":"/api/404" } ์ ์๋ต์ Spring MVC๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ์ค๋ฅ ์๋ต ์
๋๋ค. ๋ณดํต ์ค๋ฌด์์๋ ํ๋ ์์ํฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ์๋ต๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋ณด๋จ ๊ณตํต ์๋ต ํฌ๋งท์ ๋ง์ถฐ์ ์ฌ์ฉํ ๊ฒ ์
๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด Not Found์ ๋ํ ์๋ต์ ์ปค์คํ
ํ ์ ์๋์ง์ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๊ณ ์๋์ง๋ ํจ๊ป ์๋ฌ ๋ก๊ทธ์ ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฌ ์๋ต์ด ์์ฑ๋๊ธฐ๊น์ง์ ์ฌ์ ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์คํ๋งMVC์์๋ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ..
๐ Spring/๊ฐ๋
๋ฐ ์ดํด
@Valid Spring Boot์์ @Valid๋ฅผ @RequestBody ๊ฐ์ฒด์ ๋ถ์ด๊ฒ ๋๋ฉด, ์ด๋ ์คํ๋ง์ Hibernate Validator(javax.validation ํจํค์ง์ ์๋ JSR-303/JSR-380์ธ BeanValidation์ ํ์ฉํจ)๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. Spring MVC์์๋ Validation์ด ์ด๋ป๊ฒ ๋์ํ๋์ง MVC ๋์์๋ฆฌ์ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค. Dispatcher Servlet ์๋๋ Spring MVC์ ๋์๊ตฌ์กฐ๋ฅผ ๋์ํํ ๊ฒ์
๋๋ค. ํ๋ํ๋ ์ฐจ๊ทผํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ ์ผ ๋จผ์ ๋ฐ๋ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(ํ๋ก ํธ ์ปจํธ๋กค๋ฌ)์
๋๋ค. DispatcherServlet์ HandlerMapping ์ ๋ต์ ํตํด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํด ์ค Controller๋ฅผ ์ฐพ์ต..
๐ Spring
Validation ์์ฒญ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฆ(์ฌ์ฉ์์ ์์ด๋์ ๊ธธ์ด๋ผ๋์ง ์ ๊ทํํ์์ ๋ง์กฑํ๋์ง์ ๋ํ ๊ฒ์ฆ ๋ฑ๋ฑ)๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณดํต Service ๋ก์ง์ ๋ด๊ฒจ์์ต๋๋ค. DB ์ค๋ณต ์ฒดํฌ ๋ฑ ๋น์ฆ๋์ค ๋ก์ง์ ์๋น์ค์ ๋๊ณ , ์ด ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์คํ๋ง ๋ถํธ์์ ์ ๊ณตํด์ฃผ๋ Validation ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ์์ฝ๊ฒ ๊ฒ์ฆํ ์ ์์ ๋ฟ๋๋ฌ ์๋น์ค์๋ ์ค์ง ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๋ง ๋ ์ ์๋ ์ฅ์ ์ ๊ฐ์ ธ๊ฐ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ์ค์ต์ ํตํด ์์ธํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๋ฐํ๊ฒฝ SpringBoot 2.7.9 JDK 11 Gradle ์์กด์ฑ ์ถ๊ฐ SpringBoot 2.3.0 ์ด์๋ถํฐ๋ ์์กด์ฑ์ด ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ง์ ์ถ๊ฐํด์ค์ผ ํฉ๋๋ค. implementation 'org.springfram..
๐ Spring
Spring Boot 3.x.x ๋ถํฐ๋ JavaEE → Jakarta EE๋ก ๊ต์ฒด๋์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด์ ์ ์ฌ์ฉํ๋ Springfox๋ ํ์ฌ Spring Boot 3.x.x์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์ด๋ค์ง์ง ์๊ณ ํ์์ ์๋ ์ฌ์ฉํ ์ ์์์ต๋๋ค. Springdoc ๊ณต์๋ฌธ์์์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง์ ๋ํ ์์ธํ ๋ฐฉ๋ฒ์ด ๋์์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. springdoc-openapi v2.0.2 ์์กด์ฑ ์ถ๊ฐ Spring Boot 3.x.x๋ถํฐ๋ ์๋ ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ๋ฉด Swagger-ui ์ค์ ์ ๋์
๋๋ค. implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2" springdoc-openapi-ui → springdoc-..