๋ฐ์ํ ์ ์ฒด ๊ธ396 Spring @RequestBody ํ๋ ๋ฐ์ธ๋ฉ์ด ๋์ง ์๋ ์ด์ (feat. Lombok, Jackson์ ๋ค์ด๋ฐ ์ฐจ์ด) ๊ฐ์ Spring์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ JSON ํ์์ผ๋ก ๋ฐ๊ณ , @RequestBody๋ฅผ ์ฌ์ฉํ์ฌ JSON body์ ๋ฐ์ดํฐ๋ฅผ Java Object์ ํ๋์ ์ญ์ง๋ ฌํ(Deserialize)๋ฅผ ํตํด ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง, ํ๋์ ํน์ ๋ค์ด๋ฐ + Lombok์ @Getter๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ธ๋ฉ์ด ์ ์์ ์ผ๋ก ๋์ง ์๋ ์ด์๊ฐ ์กด์ฌํ๋๋ฐ์, ์ด์ ๊ด๋ จํ์ฌ ๊ฐ๋ตํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ### Send POST request with json body POST http://localhost:8080/api/v1/test Content-Type: application/json { "pId": "pId", "poId": "poId" } ์๋ฅผ ๋ค์ด, ์์ ๊ฐ์ ์๋ฒ ์ฝ๋๊ฐ ์กด์ฌํ๊ณ ํด๋ผ.. 2024. 3. 20. Spring Swagger(springdoc-openapi) Unable to render this definition ์ค๋ฅ Spring ์์ ๋ฌธ์ํ๋ฅผ ์ถ๊ฐํ๊ณ ์ Swagger(Springdoc-openapi)๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋๋ฐ, ์๋์ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ๋์ต๋๋ค. Unable to render this definition ... ์ค์ api-docs URL๋ก ์ ๊ทผํด๋ณด๋ฉด, ์๋์ ๊ฐ์ด ๋ฉ์์ง๊ฐ ์ ์์ ์ผ๋ก ์ปจ๋ฒํฐ๊ฐ ์๋์ด ๋์ค๋ ๋ฏ ํ ํ์์ด ๋ฐ์ํฉ๋๋ค. ํ์ฌ ํ๋ก์ ํธ์์๋ MessageConverter ๋ฅผ Customํ์ฌ ์ฌ์ฉํ๊ณ ์๊ณ , ๋๋ต์ ์ผ๋ก ์๋์ ๊ฐ์ด ์ฌ์ฉ์ค์ ๋๋ค. @Override public void configureMessageConverters(List 2024. 3. 4. ์ ๊ท ์์คํ ๊ตฌ์ถํ๊ธฐ (feat. MSA, ๋ฐฑ์คํผ์ค) 2023๋ , ํ ๋ด๋ถ์์๋ `ํฉํ ๋ฆฌ` ๋ผ๊ณ ๋ถ๋ฅด๋ ์ ๊ท ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค. ๊ฐ๋ฐ์๋ก์ ๊ฒฝ๋ ฅ์ด ๋ง์ง๋ ์์ง๋ง, ๊ฐ์ฅ ๊ฒฝํ์ด ์ข์๋ ํ๋ก์ ํธ์๊ณ , ์ฒ์์ผ๋ก ํ๋ก์ ํธ ๋ค์ด(?) ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ์๋ฐ๊ธฐ ์ง๋ ํ ๊ฐ๋ฐ ๋ฒ์์์ ๊ฒช์๊ธฐ์, ํ๋ก์ ํธ ์ด๊ธฐ์๋ ๋งค์ฐ ์๊ทน์ ์ผ๋ก ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ด๋ ์ ๋ ๋ฒ์์์ ํ๋ณตํ๊ณ , ์ ์ฐจ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ๋ฉฐ ์ผ์ ์ ๋น ๋ฏํ์ง๋ง ๊ต์ฅํ ์ฌ๋ฐ๊ณ ์ฆ๊ฒ๊ฒ ํ์๋๋ฐ์, ๊ด๋ จํ์ฌ ๊ฐ๋จํ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํฉ๋๋ค. ์ ๊ท ์์คํ ๋ฐฐ๊ฒฝ ๊ธ์ก๊ถ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐํํฐ์ฝ์, ์ ํด์ง ๊ธ์ก ๋ด์์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ํ์ ๋๋ค. ์ ์คํ๋ฒ ์ค๋ฅผ ์๋ก ๋ค์๋ฉด 20,000์ ํ๋ ๋ด์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์คํ๋ฒ ์ค ๊ธ์ก๊ถ ์ํ์ ๋๋ค. ํ์ง๋ง ํ์ฌ ๊ธ์ก๊ถ.. 2024. 1. 19. Spring ์ค์ผ์ฅด๋ฌ ๋ก์ง์ด ๋ฉํฐ ์๋ฒ ์ค ํ ์๋ฒ์์๋ง ์คํ๋๋๋ก ์ค์ ํ๊ธฐ ์๋น์ค๋ฅผ ์ด์ํ๋ฉด ์ต์ํ 2๋ ์ด์์ ๋ฉํฐ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ด์์ ํฉ๋๋ค. ์๋น์ค์์ ํน์ ์๊ฐ์๋ง ์ํ๋๋ ๋ฐฐ์น์ฑ ๋ก์ง์ด ์กด์ฌํ๋ค๋ฉด, ๋ฐฐ์น ์๋ฒ๋ฅผ ๋ณ๋๋ก ๋๊ธฐ๋ ํ์ง๋ง ํ๋์ ํ๋ก์ ํธ์์ ์ค์ผ์ฅด๋ฌ๋ฅผ ์ค์ ํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ ์ค์ผ์ฅด๋ฌ๋ฅผ ์ ์ฉํ๋ฉด ์ค์ ์ด์ ํ๊ฒฝ์์ A, B ์๋ฒ ๋ชจ๋ ์ค์ผ์ฅด์ด ๋๋ฉด์ ๋ก์ง์ด 2๋ฒ ์คํ๋ ์ ์๋๋ฐ์, ์ด์ ๊ด๋ จํ์ฌ ์กฐ๊ธ ์ฐพ์๋ณด๋ ๋๋ถ๋ถ์ ํฌ์คํ ์์ ShedLock? ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ ๋ฏํ๋ฐ, Spring Profile ์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์์ ๊ฐ์ด ์ค์ผ์ค๋ฌ๊ฐ ์กด์ฌํ๋ ์ปดํฌ๋ํธ์ @Profile ์ ์ค์ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ํ๊ฒฝ๋ณ์์ ์ค์ ํ๋ฉด ๋ฉ๋๋ค. IntelliJ Run/Debug Configurations Application.. 2023. 12. 30. Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ (feat. ์์ง๋) ์ง๋ ํฌ์คํ Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ ํธ์์๋ ํด๋์ค ์ค๊ณ์ ๊ด๋ จํ์ฌ ๋ค์ ๋ด์ฉ๋ค์ ์ดํด๋ดค์๋๋ฐ์, ์์ฑ์๋ฅผ ํตํด ์ ์์ ์ธ ๊ฐ ์ค์ ํ๊ธฐ ๋ณ์๋ฅผ ๋ถ๋ณ์ผ๋ก ๋ง๋ค์ด์ ์์ํ์ง ๋ชปํ ๋์ ์๋ฐฉํ๊ธฐ ๋ถ๋ณ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ, ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์ ์ง์ญ ๋ณ์๋ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๊ธฐ ๋ฉ์๋์ ์๋ชป๋ ๊ฐ์ ์ ๋ฌ์ ์๋ฐฉํ๊ธฐ ์ด๋ฒ ํฌ์คํ ์์๋ ์์ง๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋์ค ์ค๊ณ์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. ์์ง๋๋, 'ํด๋์ค ๋ด๋ถ์ ์๋ ๋ฐ์ดํฐ์ ๋ก์ง ์ฌ์ด์ ๊ด๊ณ๊ฐ ์ผ๋ง๋ ๊ฐํ์ง ๋ํ๋ด๋ ์งํ' ๋ก ์ ์ํฉ๋๋ค. 1. static ๋ฉ์๋ ์ค์ฉ static ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ค๋ ํธ๋ฆฌํจ์ด ์์ง๋ง, ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์์ง๋๊ฐ ๋ฎ์์ง ์ ์์ต๋๋ค. static ๋ฉ์๋.. 2023. 12. 20. Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ ํด๋์ค๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ด๊ธฐ ๋จ๊ณ๋ผ๊ณ ํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ, ๊ฐ์ฒด ์งํฅ ์ธ์ด์์ ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ์ค๊ณ๋ฅผ ์ ํ๊ธฐ ์ํด ์ด๋ ํ ์ ๋ค์ ๊ณ ๋ คํด์ผ ํ ์ง ์ดํด๋ด ๋๋ค ์์ ๋ ๊ธ์ก์ ๋ํ๋ด๋ Money ํด๋์ค๋ฅผ ํ ๋๋ก ์ค๊ณ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. 1. ์์ฑ์๋ฅผ ํตํด ์ ์์ ์ธ ๊ฐ ์ค์ ํ๊ธฐ ์์ ๊ฐ์ด ๋ชจ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ํ์ํ ๋งค๊ฐ๋ณ์๋ค์ ๋ฐ๋ ์์ฑ์๋ฅผ ๋ง๋ค ์ ์๋๋ฐ, ์์ ๋ฌธ์ ์ ์ ๋งค๊ฐ๋ณ์๋ก ์๋ชป๋ ๊ฐ์ด ์ ๋ฌ๋ ์ ์๋ค๋ ์ ์ ๋๋ค. ์์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ ์ ์์ ์ผ๋ก ์์ฑ๋์ง๋ง, ํ๋ก๊ทธ๋จ์ด ๋์ํ์ฌ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ค๋ฉด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์, ์๋ชป๋ ๊ฐ์ด ์ ์ ๋์ง ๋ชปํ๊ฒ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์งํํฉ๋๋ค. ๊ธ์ก (amount): 0 ์ด์์ ์ ์ ํตํ (currency): null .. 2023. 12. 16. Spring @ComponentScan ๋์ ๊ณผ์ Spring์์ ํด๋์ค์ @Configuration, @RestController, @Service ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ์ ์ธํ๋ฉด ์คํ๋ง์ ํด๋น ์ด๋ ธํ ์ด์ ๋ค์ ์ค์บํด์ ๋น์ผ๋ก ๋ฑ๋ก์ ํด์ฃผ๋๋ฐ์, ์ด๋ฌํ ์ญํ ์ ํ๋ ๊ฒ์ด @ComponentScan ์ด๋ ธํ ์ด์ ์ ๋๋ค. @ComponentScan ์ ๋จ์ด ๊ทธ๋๋ก @Component ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ค์ ์ค์บํ์ฌ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋๋ฐ, ์์ ์ธ๊ธ๋ ์ด๋ ธํ ์ด์ ๋ค์ ๋ชจ๋ ๋ด๋ถ์ @Component ์ด๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์์ ๊ฐ์ ์ด๋ ธํ ์ด์ ๋ค์ ์ค์ ํ๋ฉด ์คํ๋ง์์๋ ์ด๋ป๊ฒ ์ปดํฌ๋ํธ๋ค์ ์ค์บํ๊ณ , ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. @ComponentScan ComponentScan ์ด๋ ธํ ์ด์ ์ ์กด์ฌํ๋ ์ฃผ์์ผ๋ก, ๋๋ต์ ์ธ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.. 2023. 12. 9. Spring Bean ์ด ๋ฑ๋ก๋๋ ๊ณผ์ ์คํ๋ง์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด @Configuration, @Component, @Bean ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ํตํด ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ ๋ฑ๋กํ๋๋ฐ์, ์ด๋ ํ ๊ณผ์ ์ ํตํด Bean ์ด ๋ฑ๋ก๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ ์คํธ๋ ์์ ๊ฐ์ด @Configuration ์ด๋ ธํ ์ด์ ์ ์ค์ ํ TestConfiguration ํด๋์ค๊ฐ ์กด์ฌํ๊ณ , main ๋ฉ์๋๋ฅผ ํฌํจํ Main ํด๋์ค์์ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ AnnotationConfigApplicationContext ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด ์์ฑ์์๋ TestConfiguration ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํฉ๋๋ค. ์ ๊ณผ์ ์ ํตํด ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ Spring Bean ์ด ๋ฑ๋ก๋๋ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. BeanFactory BeanFactory ์ธํฐํ์ด์ค๋ ์คํ๋ง ํ๋ ์์ํฌ์์ ์คํ๋ง .. 2023. 12. 2. ์คํ๋ง์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ ์ ๋ฌ ์ ํ๊ธ์ด ๊นจ์ง๋ ์ด์ (ISO-8859-1) ์๋ ํ์ธ์, ์ต๊ทผ ํด๋ผ์ด์ธํธ(Vue) ์ ์๋ฒ(Spring Boot) ์ฐ๋ ์ ์๋ฒ์์ ํ๊ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด ํด๋ผ์ด์ธํธ์์ ํ๊ธ์ด ๊นจ์ง๋ ์ด์๊ฐ ๋ฐ์ํ์๋๋ฐ์, ์ด์ ๊ด๋ จํ์ฌ ๊ฐ๋ตํ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค. ์์ธ HttpMessageConverter ์ธํฐํ์ด์ค๋ Spring์์ HTTP request, response ๋ฅผ ๋ณํํด ์ฃผ๋ ์ธํฐํ์ด์ค์ธ๋ฐ์, ํด๋น ํฌ์คํ ์ ์ดํดํ๋๋ฐ ํ์ํ ๋ด์ฉ์ด๋ผ ๊ฐ๋ตํ๊ฒ๋ง ์ค๋ช ํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ์คํ๋ง์์ ํํ ์ฌ์ฉํ๋ @RestController ์ด๋ ธํ ์ด์ ์ ํฌํจ๋์ด ์๋ @ResponseBody ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, HttpMessageConverter ์ด ๋์ํ๊ณ ๋ฐํ ํ์ ์ ๋ฐ๋ผ ์ ์ ํ ๊ตฌํ์ฒด๊ฐ ์ฌ์ฉ์ด ๋ฉ๋๋ค. ๋ํ์ ์ผ๋ก๋ ByteArrayHttpMessageC.. 2023. 11. 20. Bean Validation (Hibernate Validation) Bean Validation์ ํ๋์ ๊ฐ, ๋ฒ์ ๋ฑ์ ๊ฒ์ฆํ๊ณ ์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ด๋ ธํ ์ด์ ๋ฐ ์ธํฐํ์ด์ค์ ๋ชจ์ ์ด ๊ธฐ์ ์ ๊ตฌํ์ฒด ์ค ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ตฌํ์ฒด๊ฐ Hibernate Validator https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec Hibernate Validator 6.2.5.Final - Jakarta Bean Validation Reference Implementation: Reference Guide Validating data is a common task that occurs throughout all applicati.. 2023. 9. 30. ์ด์ 1 2 3 4 ยทยทยท 40 ๋ค์ ๋ฐ์ํ