๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“• 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.
๋ฐ˜์‘ํ˜•