๐ Spring Framework/Spring ๊ฐ๋ ์ ๋ฆฌ11 Bean ๋ฑ๋ก์ ๋ํ ์ฌ๊ณ SpringBoot์์ Bean์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์์๊น. 1. ํด๋์ค์ ์ง์ @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฐฉ์ 2. @Configuration ์ ๋ ธํ ์ด์ ์ ํ์ฉํด @Bean ๋ฑ๋กํ๋ ๋ฐฉ์ ์ 2๊ฐ์ง ๋ฐฉ์์ด ๋ณดํธ์ ์ด๋ค. ๋ด๊ฐ ์ง๊ธ๊น์ง ์งํํ๋ ๋ณดํต์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๊ณผ์ ์์๋ 1๋ฒ์ ์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. @Configuration ๋ฐฉ์์ ๊ฒฝ์ฐ, ํต์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํจ์ด๋ผ๋ฉฐ ๋ฉด์ ์ง๋ฌธ์์ ์ ์์ ์ผ๋ก ํ์๋๋ค. ๊ทธ ๊ณ ์ ๊ด๋ ํ์, ๋์ ๊ฒฝ์ฐ๋ 2๋ฒ ๋ฐฉ์์ ์ธ๋ถ ์ค์ ์ด์ธ์ ์ฌ์ฉํ์ง ์์์๋ค. Java9์์ ๋์จ, ์๋ก์ด ์ถ์ํ ๊ฐ๋ ์ธ ๋ชจ๋์ด๋ผ๋ ๊ฐ๋ ์ด ์๋ค. ๋ชจ๋์๋ ์ข ์์ฑ(dependency)์ ๊ฐ๋ ์ด ์์ผ๋ฉฐ, Public API๋ฅผ ๋ด๋ณด๋ด๊ณ .. 2024. 10. 12. Spring boot multi datasource ๋ฑ๋ก ์ ์ฃผ์ ์ฌํญ Spring Boot Multi datasource ๋ฑ๋ก ์ ์ฃผ์ ์ฌํญ์ต๊ทผ ์งํํ๋ ํ๋ก์ ํธ๋ ์ธ๋ถ ํด๋ฌด์ผ ์ ๋ณด API๋ฅผ ํธ์ถํ์ฌ DB์ ์ ์ฌํ๋ ์๋ฐฐ์น์ฉ Spring Batch ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด์๋ค.ํ์ฌ์๋ ์ฌ๋ฌ๊ฐ์ง DataBase๊ฐ ์๋๋ฐ, ๊ทธ ์ค ๋ฉ์ธ DB๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๊ณ , spring batch ์ฉ DB๋ ๋ฐ๋ก ์ฌ์ฉํ๊ฒ ๋์๋ค.๊ทธ๋์ ๋ฉํฐ datasource bean ์ ๋ฑ๋กํด์ค์ผ ํ๋ค.๊ทธ ๊ณผ์ ์์ ์ ๋ง ๊ธฐ์ด์ ์ด์ง๋ง ์ค์ํ๋ ๋ถ๋ถ์ ์ค๋ช ํด๋ณด๊ฒ ๋ค.Multi Datasourceํ๋์ ํ๋ก์ ํธ์์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ.spring ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก yaml ํ์ผ์ ํตํด ์ฝ๊ฒ datasource ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค.๋ฐ๋ก java ์ฝ๋๋ก bean ์ ๋ฑ๋กํ ํ์๊ฐ ์์ ๊ฒ์ด๋ค.ํ์ง.. 2024. 9. 18. [Spring data JPA] N+1 ๋ฌธ์ ํด๊ฒฐ ์ด๋ ๊ฒ ์ด๋ฃจ์ด์ง ERD ๋ชจ๋ธ์ด ์๋ค. (์์) ์กฐ๊ฑด์ ๋ง์ถฐ ๋ถ๋ฌ์ค๊ณ ์ ํ๋ Data๋ ์ธ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ํ์๋ก ํ๋ค. ์ด๋ Fetch join์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค. Permission ์ ์ฅ์์ user์ document๋ฅผ ๋๋ฒ ๋ค fetch join ํ ์ ์์ง๋ง, ์ด๋ฅ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฑ๋ฅ ์ ์์ฒญ๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ์ฐ๊ด๋ ์ํฐํฐ์ ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋๋ ์ ๋ฐ์์ํค๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค. ํด๋น ์ํฐํฐ๋ค์ ๋ชจ๋ FetchType.LAZY ๋ก ์ค์ ๋์ด ์๋ค. ๊ธฐ์กด ์ฟผ๋ฆฌ : val documents = documentQueryService.findDocumentsByIdFetchJoinPermissions(projectId) return Response.UserPe.. 2023. 2. 28. [Reactive Programming] ๋น๋๊ธฐ-๋ ผ๋ธ๋กํน ํ๋ก๊ทธ๋๋ฐ ๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (Synchronous) ์์ ์ ์คํ ํ๋ฆ์ ์์ฐจ์ ์ผ๋ก ๋์ ์ฝ๋๋ฅผ ํ์ ํ๊ธฐ ์ฝ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ์์ธก ๊ฐ๋ฅํ๋ฏ๋ก ๋๋ฒ๊น ์ด ์ฌ์ ํน์ ์์ ์ค ๋ค๋ฅธ ์์ ์ ํ ์ ์๋ค๋ ๋จ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (Asynchronous) ์์ ์ ์คํ ํ๋ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฐจ์ ์ด์ง ์์ ํ์ฌ ์คํ ์ค์ธ ์์ ์ด์ธ์ ๋ค๋ฅธ ์์ ๊ฐ๋ฅ. ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ฑ ๋ชจ๋ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ ๋ํ์ ์ผ๋ก CallBack, Promise, Future, Coroutine ๋ฑ์ด ์๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๊ตฌํ ๋ฐฉ์ - Kotlin Thread ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐฉ์ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๊ตฌํ ํ๋์ ์ค๋ ๋ - ์ฑ๊ธ ์ค๋ ๋, ๋ค์ค ์ค๋ ๋ - ๋ฉํฐ์ค๋ ๋ fun main() { for (i in 0..5) { va.. 2023. 2. 11. [@DataJpaTest] h2 ์ธ๋ฉ๋ชจ๋ฆฌ db๋ฅผ ์ด์ฉํ ํ ์คํธ ์ค์ ๋ฐฉ๋ฒ ์๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ๋ค๊ณ ์ตํ ๋ค์๊ณ , ํ์์ ์ธ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ํญ์ ๋ง์ ์ ๊ธฐํ๊ณ ์๋ค. ๋ชจ๋ ์ผ์ด์ค๋ฅผ ํ ์คํธํ ์ด์ ๋ ์๊ธฐ ๋๋ฌธ์, ํฌ๊ฒ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๋ง ์๋๋ฆฌ์ค, ํตํฉ, ๋จ์ ํ ์คํธ๋ฅผ ๋๋์ด ์งํํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๊ณ ๋ค์๋ค. ๋ฐฐํฌ๋ฅผ ๊ณ์ ํด์ค๋ฉด์ jar ํ์ผ์ ๋น๋ํ๋ ๋์ค ํ ์คํธ๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๋ฌด์๋ฏธํ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ํ ์คํธ๋ฅผ ์ด๋ค ํ๊ฒฝ์์๋ ๋์ ๊ฐ ์ ์๊ฒ ๊ณ ๋ฏผ์ ํ๋ ๊ธฐ์ต์ด ์๋ค. ์ด๋ ๊ฒ ํ๋ํ๋ ์์ฑ๋ ์๊ฒ ์์๋๊ฐ๋ ๊ณต๋ถ๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ ๋๋ฆฌ์ง๋ง, ์ ์๋ฏธํ ๋ฐ์ ๊ณผ์ ์ด๋ผ ๋๋๋ค. ์ด๋ฒ์ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ์ค์ํ๋ฉด์ ์ฝ๋ ์์ ๋ฐ ๊ตฌ์กฐ๊ฐ ํฌ๊ฒ ๊ฐํธ๋์๊ณ , ํ ์คํธ ์ฝ๋๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ด ์๊ฒจ์ ๋ค ์์ ํ๋ค. persi.. 2022. 12. 21. WebFlux๋ ๋ฌด์์ด๊ณ , ์ ๋์๊ณ , ์ธ์ ์ฐ์ด๋๊ฐ? ์ด์ Cart API ์ฝ๋ ๋ฆฌํฉํฐ๋ง์ ๋ง๋ฌด๋ฆฌํ๊ณ , ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ธฐ ์ํด PR์ ์ฌ๋ ธ๋ค.ํด๋ฆฐ ํ ์ฝ๋๋ก ์์ฑํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ธฐ ์ํด ๋ฆฌ๋ทฐ์ด๋์ด ์ฃผ์ ์๊ฒฌ์ ๋๋๊ณ , ํด๋ฆฐ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๊ตฌ๊ธ๋ง์ ํตํด ํ๋ฃจ ์ข ์ผ ๋ชจ๋ํฐ๋ฅผ ๋ ธ๋ ค๋ณด๋ฉฐ ํด๋์ค ๊ฐ ์ฑ ์์ ๋๋์ด ๋ณด์๋ค. ๋นจ๋ฆฌ ์ฑ์ฅํ๊ณ ์ถ๋ค!!๋ฆฌ๋ทฐ๋ฅผ ์๋๊ณ , ์นด์นด์คํ์ด๋ฅผ ์ด์ฉํ ๋๋ฉ์ธ ์ฝ๋๋ค์ ๋ฆฌํฉํฐ๋ง ํ๊ธฐ ์์, ๊ธฐ์กด์ ์ธ๋ถ API์ ํต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ ํ๋ฆฟ์ธ RestTemplate์ ๋์ฒด ์ฌ๋ถ์ ๋ํด ๋ ์ฌ๋๋ค.RestTemplate์ deprecated ๋์์ผ๋ฏ๋ก, WebClient์ ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณด๋ผ๋ ์๊ฒฌ์ ๋ฐ์๋ค.WebClient์ ๋ํด ์์๋ณด๋ค๊ฐ ๋๊ธฐ/๋น๋๊ธฐ, ๋ธ๋กํน/๋ ผ๋ธ๋กํน์ด๋ผ๋ ๊ฐ๋ ์ ์ ์์ ๋ํด ๋ค์ ๊ณต๋ถํ๊ฒ ๋์๊ณ , ๋์๊ฐ WebFlux.. 2022. 8. 31. Spring Security [2] - ์์ธ ์ฒ๋ฆฌ AuthenticationEntryPoint & AccessDeniedHandler ์ํ๋ฆฌํฐ๋ฅผ ๋์ ํ๋ฉฐ ์ธ์ฆ, ์ธ๊ฐ์ ๊ณผ์ ์ ๋ง์ณค๋ค. ์ด์ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ์์ ์์ ๋ฐ์ํ๋ ์์ธ์ ๋ํด์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ํ ๊ฐ์ง ์๊ฐํด๋ด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์คํ๋ง ์ํ๋ฆฌํฐ๋ ํํฐ์ ๊ธฐ๋ฐํ ์ฒด์ด๋ ๊ตฌ์กฐ์ด๋ฏ๋ก, ์คํ๋ง ์ปจํ ์ด๋๊น์ง ์์ฒญ์ด ๋๋ฌํ์ง ์๋๋ค. ๋ฐ๋ผ์, @ExceptionHandler๋ฅผ ํตํ ํธํ ์์ธ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐํ๋ค. ์ง์ Try - catch๋ก ์ก์์ ์๋ต์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ๋ฒ ๋ฐ์ ์๋ค. ํ์ง๋ง, ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๊ทธ๋ ๊ฒ ํ์ ํ์ง ์๋ค. ์ํ๋ฆฌํฐ ํํฐ ์ฒด์ธ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋ง์ง๋ง ์ฆ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ํํฐ๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ก ์ฌ์ฉํ๋ AuthenticationEntryPoint์ AccessDeniedHandler๋ฅผ ๊ตฌํํด ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๊ณผ์ ์์ ์ผ์ด๋ ์์ธ์ ๋.. 2022. 8. 21. Spring Security [1] - JWT๋ฅผ ์ด์ฉํ REST API ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ์กด ์ธ์ฆ์ JWT๋ฅผ ์ด์ฉํ ํํฐ๋ก, ์ธ๊ฐ๋ ์ธํฐ์ ํฐ๋ก ์ ๋ ธํ ์ด์ ์ ์ ์ํด ์์ ๊ตฌํํ์๋ค. ์ด๋ฒ์ ๋ฆฌํฉํฐ๋ง์ ํ๋ฉด์, ์คํ๋ง์ด ์ ๊ณตํ๋ ๋ณด์ ๊ด๋ จ ํ๋ ์์ํฌ์ธ ์ํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํด๋ณด์๋ ๊ฒฐ์ ์ ๋ด๋ ค ๋์ ํ๊ฒ ๋์๋ค. ์ด๋ ต๋ค๊ณ ๋ ์ผํ ๋ค์์ง๋ง, ์ด๋ ๊ฒ ์ค๋ ๊ฑธ๋ฆด ์ค ๋ชฐ๋๋ค. ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ์กฐํ๊ณ , ์ ์ฝํ์ง๋ ์๋ ๊ณต์๋ฌธ์๋ค์ ๋ณด์๋ ๋๋ฌด์ง ์ดํด๊ฐ ๊ฐ์ง ์์๋ค. ์ผ๋จ ๋จธ๋ฆฟ์์ ๊ทธ๋ ค์ ธ์ผ ๊ฐ์ด ์กํ๋๋ฐ, ์ด๊ฑด ๋ญ ํํฐ๋ ์ฌ๋ฌ ๊ฐ์ด๋ฉฐ ๊ตฌํ์ฒด๋ ์ ์ด๋ ๊ฒ ๋ง์์ง ๊ทธ์ ๋ง๋ ์ฑ ์๊ณผ ์ญํ ์ด ๋์ ํ ๊ฐ์ด ์ค์ง ์๋๋ค. ์ ๋ถ ์ถ์ํ ๋์ด ์์ด ์ปค์คํ ํด์ ์ฌ์ฉํ๊ธฐ๋ ํธํ๊ฒ ๋์๋ค๋๋ฐ, ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋ด์ฉ์ ์ดํดํ๊ธฐ์ ์ฝ์ง ์๊ธฐ๋ ํ๊ณ ๋ฐ๋ก ๊ณต๋ถ๊ฐ ํ์ํ ํ๋ ์์ํฌ๋ผ๊ณ ์๊ฐํ๋ค. ๊ฑฐ์ง 1์ฃผ ๋ฐ์ด ๋์ด์์ผ ๋ด๊ฐ ๊ตฌํํ๊ณ ์.. 2022. 8. 18. 2022.05.17 ใ@Transactional ์ต์ ๋ฐ ์ฑ๋ฅใ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ํ๋ ๋์ค Service ํด๋์ค์์ @Transactional ์ฌ์ฉ์ ์ต์ ์ ์ค์ ํ ์ ์๋ค๋ ๊ฒ์ ์ฒ์ ์์๋ค. ์ต์ ์ ํ๋ฒ ์ถ๊ฐํด๋ณด๋ผ๋ ํผ๋๋ฐฑ์ ๋ฐ๊ณ ํ๋ฒ ์ด ์๋ํ ์ด์ ์ ๋ํด ์์๋ณด๊ธฐ๋ก ํ๋ค. ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ผ์น ์๋ ์๋ ์ค์ํ ์ต์ ์ด๊ธฐ ๋๋ฌธ์ ํ๋ฒ ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ๋ค. ํธ๋์ญ์ (Transaction)์ ์ ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋, ํ๋ฒ์ ์ํ๋์ด์ผ ํ๋ ์ฐ์ฐ ํธ๋์ญ์ ACID ์ฑ์ง ์์์ฑ(Atomicity) : ํธ๋์ญ์ ์ด DB์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋, ์ ํ ๋ฐ์๋์ง ์๊ฑฐ๋ ํด์ผํ๋ค. ์ผ๊ด์ฑ(Consistency) : ํธ๋์ญ์ ์ ์ผ๊ด์ฑ ์๋ DB ์ํ๋ฅผ ์ ์งํด์ผํ๋ค. ์์ ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋์ด์ผ ํจ. ๋ ๋ฆฝ์ฑ(Isolation) : ๋์์ ์คํ๋๋.. 2022. 5. 17. 2022.05.13 ใSession๊ณผ Token(Jwt) & ์ธ์ฆ๊ณผ ์ธ๊ฐใ ํ์ฌ ์งํ ์ค์ธ ํ๋ก์ ํธ์์ ๋ก๊ทธ์ธ์ ์งํ ์ค์ธ๋ฐ ๊ธฐ์กด์ ๋ก๊ทธ์ธ์ ์ธ์ ์ผ๋ก๋ง ์งํํ์๋ค. ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง๋ผ๊ณ ๋ฐฐ์ ๋๋ฐ ๊ทธ์ค ์ธ์ ๋ง ์ด์ฉํด๋ดค๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ์ด์ฉํ ์ธ์ฆ ๊ฒฝํ๋ ํ์ํ๋ค๊ณ ์๊ฐ์ ํ๋ค. ๊ทธ์ค ๋ด ์๋น์ค์ ๋ํด ๋ ์๋น์ค ํ์ฅ์ฑ์ ๋ํด ํ์คํ ๋ง๋ ์ธ์ฆ ๋ฐฉ์์ ๊ฒฐ์ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ์ ํ๊ณ , ์ธ์ ๊ณผ ํ ํฐ์ ์ฌ์ฉ์ฒ์ ๊ฐ๋ ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. ์ธ์ฆ๊ณผ ์ธ๊ฐ ์ธ์ฆ(Authentication) ์๋น์ค์ ์ฌ์ฉ์๊ฐ ๋ง๋์ง ํ์ธํ๋ ๊ณผ์ ๋๊ฒ ๋ก๊ทธ์ธํ๋ ๊ณผ์ ์ธ๊ฐ(Authorization) ์ธ์ฆ์ด ์๋ฃ๋ ์ฌ์ฉ์์๊ฒ ๋ฆฌ์์ค ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ฌ์ฉ ๊ถํ์ ๋ถ์ฌํ๋ ์์ ์ก์ธ์ค๊ฐ ํ์ฉ๋ ๋ฐ์ดํฐ ๋ฐ ํด๋น ๋ฐ์ดํฐ๋ก ํ ์ ์๋ ๋ชจ๋ ์์ ์ ์ง์ ํจ HTTP์ ํน์ฑ http๋ stateless.. 2022. 5. 13. 2022.05.08 ใRestFulํ api? & ResponseEntity์ ์ฌ์ฉใ ์ด๊น ์์ด ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์งํ์ค์ด๋ค. ์ผ์ฃผ์ผ ์ View๋ฅผ ์์ ๊ณ ์ข ๋ Back์ ์ง์ค๋ api๋ฅผ ์ค๊ณํ๋ ๊ฒ์ผ๋ก ์ด์ ์ ๋ง์ท๋ค. handler ๋ฉ์๋์ ๋ฐํ ๊ฐ์ ๋จ์ํ json ํ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ฉด ๋๋ ๊ฑฐ ์๋๋? ๋ผ๊ณ ์๊ฐ์ ํ์ง๋ง ๊ฒ์์ ์ฌ๋ฌ๋ฒ ํด๋ณด๋ ์ ๋ง ํ์คํ๊ฒ ์๊ธฐ ์ ๊น์ง๋ ํจ๋ถ๋ก ์๊ฐํ์ง ๋ง์๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.. ์ด๋ ดํ์ด ๋ฐฐ์ ๋ rest api๊ฐ ๋ ์ฌ๋๊ณ ์ ๋๋ก ๊ณต๋ถ๋ฅผ ํ๊ณ ์ด์ฉ์ ํด์ restfulํ api๋ฅผ ๋ง๋ค์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๊ฐ๋ ์ ๋ฆฌ๋ฅผ ๊ฒฐ์ฌํ๊ฒ ๋์๋ค. ๋ ๋ฐํ ํ์ ์ผ๋ก ResponseEntity์ ์ฌ์ฉ์ด ๋ง์๋ฐ ์ด ํ์ ์ ์ ์ฌ์ฉํ๋์ง๋ ํ๋ฒ ์์๋ด์ผ๊ฒ ๋ค. Rest๊ฐ ์ ํํ ๋ญ๊น?? Representational State Transfer -> ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น .. 2022. 5. 8. ์ด์ 1 ๋ค์ ๋ฐ์ํ