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

์Šคํ”„๋ง23

[Reactive Programming] ๋น„๋™๊ธฐ-๋…ผ๋ธ”๋กœํ‚น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Synchronous) ์ž‘์—…์˜ ์‹คํ–‰ ํ๋ฆ„์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์ž‘ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋””๋ฒ„๊น…์ด ์‰ฌ์›€ ํŠน์ • ์ž‘์—… ์ค‘ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์  ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Asynchronous) ์ž‘์—…์˜ ์‹คํ–‰ ํ๋ฆ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ฐจ์ ์ด์ง€ ์•Š์Œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—… ์ด์™ธ์— ๋‹ค๋ฅธ ์ž‘์—… ๊ฐ€๋Šฅ. ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ๋“ฑ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋Œ€ํ‘œ์ ์œผ๋กœ CallBack, Promise, Future, Coroutine ๋“ฑ์ด ์žˆ๋‹ค. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌํ˜„ ๋ฐฉ์‹ - Kotlin Thread ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐฉ์‹ Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ตฌํ˜„ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ - ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ, ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ - ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ fun main() { for (i in 0..5) { va.. 2023. 2. 11.
์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํšŒ์‚ฌ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž ๋ถ„์ด ์‚ฌ์ด๋“œ ํ”Œ์ ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ์•Œ๋ ค์ฃผ์…จ๊ณ , ํ•œ๋ฒˆ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๊ฐ•ํ•˜๊ฒŒ ๋“ค์—ˆ๋‹ค. ์Šฌ๋Ÿฌ์‹œ์™€ ์˜คํ”ˆ ์ฑ„ํŒ…๋ฐฉ์„ ํฌํ•จํ•˜์—ฌ ์ด 3๊ณณ์— ์‹ ์ฒญ ๋ฐ ๋ฌธ์˜๋ฅผ ๋„ฃ์—ˆ๊ณ , ๋‹ต๋ณ€์ด ๋‹ค๋“ค ์—†์œผ์‹œ๊ธธ๋ž˜ ์š”๊ตฌํ•˜๋Š” ์กฐ๊ฑด์ด ๋†’๊ฒ ๊ตฌ๋‚˜ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด์™• ์ด๋ ‡๊ฒŒ ๋œ ๊ฑฐ ๋‚ด๊ฐ€ ๋งŒ๋“ค๋ฉด ๋˜์ง€. ๊ทธ ๋™์•ˆ ์ถ”์ƒ์ ์œผ๋กœ ๊ตฌ์ƒํ•œ ์„œ๋น„์Šค์˜ ์•„์ดํ…œ์„ ํ•œ๋ฒˆ ๊ตฌํ˜„ํ•ด๋ณด์ž. ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์‹คํ˜„ ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•ด๋ณด์ž. ๊ทธ๋ ‡๊ฒŒ ๊ฐ™์€ ๊ฐœ๋ฐœ ๊ธธ์„ ๊ฑท๊ณ  ์žˆ๋Š” ํ˜•๋“ค์—๊ฒŒ ์ œ์•ˆ์„ ๋“œ๋ ธ๊ณ , ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ œ๋Œ€๋กœ ํ•ด๋ณด์ž ํ•ด์„œ ๋…ธ์…˜๋„ ์ •๋ฆฌํ•˜๊ณ , ๊นƒํ—™ Organization๋„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋ฒˆ 1๋‹ฌ ๋™์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค๋Š” ๋ชฉํ‘œ๋„ ์„ธ์› ๋‹ค. ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ ํ–‰ ์ง€์‹์ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์›.. 2023. 2. 7.
[Spring Data JPA] Transaction ์—†์ด ์ฝ๊ธฐ ํšŒ์‚ฌ์— ์ž…์‚ฌํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋˜ ์ค‘์— ๋ถ„๋ช…ํžˆ jpa entity ๊ฐ์ฒด์˜ ์ฝ๊ธฐ ๊ณผ์ • ์ค‘, ๋ถ„๋ช…ํžˆ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ณด์˜€๋‹ค. ์ด๋ฅผํ…Œ๋ฉด Spring Security ์ธ์ฆ์„ ๊ฑฐ์น˜๊ณ  Security Context Holder ์— ์ €์žฅ๋œ UserPrinciple ๊ฐ์ฒด @Target(AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.RUNTIME) @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : user") annotation class CurrentUser(val require: Boolean = true) ์ด๋Ÿฌํ•œ ์• ๋…ธํ…Œ์ด์…˜์„ ํ”ํžˆ๋“ค ์ „์—ญ์ ์œผ๋กœ Api ์—์„œ.. 2023. 1. 30.
[์ด์Šˆ] Pageable test ๊ด€๋ จ ์—๋Ÿฌ ๐Ÿ’ก๋ฌธ์ œ API Controller๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋Š”๋ฐ ์ž˜ ์„ฑ๊ณตํ•˜๋˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ณ„์† ์‹คํŒจํ•œ๋‹ค. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface org.springframework.data.domain.Pageable ํ…Œ์ŠคํŠธ ์ฝ”๋“œ mockMvc.perform(get("/api/v2/users") .param("page", String.valueOf(page))) .andExpect(status().isOk()) .andE.. 2022. 11. 23.
[๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜] Chapter6. ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ CH 6. ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ 1. ์˜์กด์„ฑ ์—ญ์ „ ์„œ๋น„์Šค๊ฐ€ ์˜์†์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜ธ์ถœ ์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ๋Š” ์ฃผ๋กœ ์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ => ์•ฑ์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ, ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ํฌํŠธ๋Š” ์•ฑ๊ณผ ์˜์†์„ฑ ์‚ฌ์ด์˜ ๊ฐ„์ ‘์  ๊ณ„์ธต ์˜์†์„ฑ ๋ฌธ์ œ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๋„๋ฉ”์ธ ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋ชฉ์  ์˜์†์„ฑ ๊ณ„์ธต์— ์ฝ”๋“œ ์˜์กด์„ฑ์„ ์—†์•ฐ ์ด๋Ÿด ๊ฒฝ์šฐ, ์˜์†์„ฑ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์ฝ”์–ด ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ์—†์Œ ๋Ÿฐํƒ€์ž„์—๋„ ์—ฌ์ „ํžˆ ์•ฑ์ด ์˜์†์„ฑ ์ฝ”๋“œ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์•ฝ์„ ๋งŒ์กฑํ•˜๋Š” ํ•œ ์˜์†์„ฑ ์ฝ”๋“œ ์ˆ˜์ •์€ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. 2. ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ์˜ ์ฑ…์ž„ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. ์ฃผ๋กœ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ, DB ์—ฐ์‚ฐ ์ „์šฉ ๊ฐ์ฒด ์ž…๋ ฅ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๋งท์œผ๋กœ ๋งคํ•‘ํ•œ๋‹ค. JPA Entity ๊ฐ์ฒด ๋งคํ•‘ JPA๋ฅผ ์ œ์™ธํ•œ ๊ธฐ์ˆ ๋„ ๊ณ ๋ ค .. 2022. 10. 31.
[๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜] Chapter5. ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ CH.5 ์›น ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ 1. ์˜์กด์„ฑ ์—ญ์ „ Web Adaptor = Incomming Adaptor ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ๋ฐ›์Œ => ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”์–ด ํ˜ธ์ถœ => ๋ฌด์Šจ ์ผ์„ ํ•ด์•ผํ• ์ง€ ์•Œ๋ ค์คŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์€ ์›น ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ๋ฅผ ์ œ๊ณต ์„œ๋น„์Šค๋Š” ํฌํŠธ ๊ตฌํ˜„ & ์›น ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ด ํฌํŠธ๋ฅผ ํ˜ธ์ถœ ์ œ์–ด ํ๋ฆ„ ์™ผ์ชฝ => ์˜ค๋ฅธ์ชฝ ์›น ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ„์ ‘ ๊ณ„์ธต์„ ๋„ฃ์Œ ํฌํŠธ (๊ฐ„์ ‘ ๊ณ„์ธต)๋Š” ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ๋Œ€ํ•œ ๋ช…์„ธ์„œ ์–ด๋–ค ํ†ต์‹ ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Œ. Outgoing Port ์ด ํฌํŠธ๋Š” ์›น ์–ด๋Œ‘ํ„ฐ์—์„œ ๊ตฌํ˜„ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”์–ด์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ์›น ์–ด๋Œ‘ํ„ฐ๋Š” ์ธ์ปค๋ฐ & ์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 2. ์›น ์–ด๋Œ‘ํ„ฐ์˜ ์ฑ…์ž„ ๊ฑฐ์‹œ์  ๊ด€์  HTTP ์š”์ฒญ.. 2022. 10. 30.
๊ฒฐ์ œ API ๋ฆฌํŒฉํ† ๋ง - [1] (feat. ์ „๋žต ํŒจํ„ด) ๊ฒฐ์ œ API๋ฅผ ๋ฆฌํŒฉํ† ๋ง ์‹œ์ž‘ํ•˜๋ฉฐ ์™ธ๋ถ€ API๋ฅผ ์—ฐ๋™ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ดค๋‹ค. ๊ธฐ์กด์—๋„ ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ–ˆ์—ˆ๊ณ , ์ง€๊ธˆ๋„ ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด์ง€๋งŒ, ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฐ์ œ API๋ฅผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํ•œ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ดค๋‹ค. ์Šคํ”„๋ง์„ ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ์ฝ์—ˆ๋˜ ์ฑ…์ธ ๊ฐœ๊ตฌ๋ฆฌ (์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ๋ญ์‹œ๊ธฐ..) ์ฑ…์—์„œ ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋””์ž์ธ ํŒจํ„ด๋“ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ ๋•Œ๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋ž€ ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ์ด ์ž˜ ์˜ค์ง€ ์•Š์•˜๋Š”๋ฐ, ์ง์ ‘ ์ ์šฉํ•  ๊ธฐํšŒ์™€ ์ƒํ™ฉ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ๊ณ„์† ๋ฉด์ ‘ ์งˆ๋ฌธ ๋Œ€๋น„ํ•ด ์•ต๋ฌด์ƒˆ์ฒ˜๋Ÿผ ๋‹ฌ๋‹ฌ ์™ธ์šฐ๊ณ  ๋‹ค๋‹ˆ๋˜ ๋„์ค‘ ์ง์ ‘ ์ ์šฉํ•  ๊ธฐํšŒ๊ฐ€ ๋”ฑ ์ƒ๊ฒผ๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ 2์›์น™์ธ OCP์— ์ฐฐ๋–ก์ผ ๊ฒƒ์ด๋ผ๋Š” ๋จธ๋ฆฌ ์†์˜ ์™ธ์นจ์ด ์šธ๋ ธ๋‹ค. ๊ทธ๋Œ€๋กœ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ๊ธฐ์กด ํ”Œ๋กœ์šฐ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋น„์Šค(์นด์นด.. 2022. 9. 20.
๊ฐ์ฒด ๊ฐ„ ๋งคํ•‘์„ ์œ„ํ•œ MapStruct ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ Dto Entity๋ฅผ ๋งคํ•‘ํ•  ๋•Œ model mapper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋งŽ์ด๋“ค ์ถ”์ฒœํ•˜๋Š” Map Struct๋ฅผ ์‚ฌ์šฉํ•ด๋ดค๋‹ค. ์ ์šฉํ•˜๋ฉด์„œ ์ž์ž˜ํ•œ ๋ฌธ์ œ๋“ค์ด ์žˆ์—ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ์ ๋“ค์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. https://mapstruct.org/documentation/dev/reference/html/ MapStruct 1.5.2.Final Reference Guide If set to true, MapStruct in which MapStruct logs its major decisions. Note, at the moment of writing in Maven, al.. 2022. 8. 29.
์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง [1] ์ง€๋‚œ 1์ฃผ์ผ๊ฐ„ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜ ๋ถ€๋ถ„ ์„ค๊ณ„๋ฅผ ๊ฑฐ์˜ 2, 3์ผ์€ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ, ํ•ญ์ƒ ๊ณ ๋ฏผํ•ด๋ณด์ž. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋Š” multi module๋กœ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ, ์™„๋ฒฝํ•œ ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์ด์ง„ ์•Š์•˜๋‹ค. ๋ชจ๋†€๋ฆฌํ‹ฑ์œผ๋กœ ๊ฐˆ์ง€, MSA๋ฅผ ๊ณ ๋ คํ•ด ๋ชจ๋“ˆ๊ฐ„ ๋ถ„๋ฆฌ๋ฅผ ํ• ์ง€๊ฐ€ ๊ณ„์† ๊ณ ๋ฏผ๋œ๋‹ค.. ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€๊ฐ„ ์˜์กด์„ฑ ๋ถ„๋ฆฌ๋ฅผ ํ‹ˆํ‹ˆ์ด ๊ณ ๋ คํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๊ธฐ์กด ์ž‘์„ฑ ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ธฐ๋ฉฐ ์กฐ๊ธˆ ๋” ํด๋ฆฐํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋กœ ๋ฆฌ๋ทฐ์–ด๋‹˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ์ˆ˜์ •ํ•ด๋‚˜๊ฐ”๋‹ค. ๋งŽ์ด ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์—์„œ๋„ ํ—›์ ์ด ์žˆ์—ˆ๊ณ , ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„๋„ ์•Œ์•„๋‚˜๊ฐ€๋Š” ์ค‘์ด๋‹ค. ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๋ถ€๋ถ„์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†์ˆ˜ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” Spring Security.. 2022. 8. 3.
๋ฆฌํŒฉํ† ๋ง ๊ณ„ํš ์˜ค๋žœ๋งŒ์— ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์“ด๋‹ค. ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด AWS ๋ง๊ตฌ์„ฑ์„ ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋ฉฐ ๋ฐฐํฌ๊นŒ์ง€ ์‹œ์ผฐ๋‹ค. ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์•ž๋‘๊ณ , ์ข‹์€ ๊ธฐํšŒ๋ฅผ ์–ป์–ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฒฐ๋ก ์€, ์ด ์ƒํƒœ๋กœ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์„ ์ •๋„๋กœ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ์•„์‰ฌ์šด ์ฝ”๋“œ ์ž‘์„ฑ ๋ถ€๋ถ„๋„ ๋งŽ์•˜๊ณ , ๊ถ๊ธˆ์ฆ๋„ ๋งŽ์•˜์ง€๋งŒ, ๋‚˜๋จธ์ง€ ์ฃผ๊ด€์ ์ธ ํŒ๋‹จํ•˜์— ๊น”๋”ํ•œ ๋ถ€๋ถ„์€ ๋‚˜๋ฆ„ ๊ดœ์ฐฎ๊ฒŒ ์ž‘์„ฑ์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ์•„์ง ๊ณ ์น ๊ฒŒ ๋งŽ์•˜๊ณ , ๋ฐฐ์šธ๊ฒŒ ๋งŽ์•˜๊ณ , ๋ชฐ๋ž๋˜ ๊ฒƒ์ด ๋งŽ์€ ๋‚˜์˜€๋‹ค. ์ด๋Ÿฐ ๋ฆฌ๋ทฐ๋ฅผ ๋“ค์„ ๋•Œ๋งˆ๋‹ค ๋‚˜๋Š” ์•„์ง ํ•œ์ฐธ ๋ฉ€์—ˆ๊ตฌ๋‚˜. ๊ณต๋ถ€ ๊ธฐ๊ฐ„ ๋Œ€๋น„ ๋งŽ์€ ์„ฑ์žฅ์„ ๊ฑฐ๋‘์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์š•์‹ฌ์ด ๋งŽ์€ ๊ฑด์ง€. ์‚ฌ์‹ค์€ ๊ธฐ๊ฐ„ ๋Œ€๋น„ ์„ฑ์žฅ์น˜๊ฐ€ ํ‰๊ท ์น˜์˜€๋˜ ๊ฑด์ง€. ๋ฌด๊ธฐ ํ•ด์ง„๋‹ค. ๋„ˆ๋ฌด ๊ธ‰ํ•œ๊ฐ€? ๊ทธ๋Ÿผ์—๋„.. 2022. 7. 28.
JPA ๊ฐœ๋… ์ •๋ฆฌ JPA ์ฑ…์„ ์ด์ œ ๋ง‰ ๋‹ค ์ฝ์—ˆ๋‹ค. ORM์„ ์ฒ˜์Œ ๊ณต๋ถ€ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ๊ธด์žฅ์ด ๋งŽ์ด ๋์ง€๋งŒ, DB ๊ณต๋ถ€๋„ ํ•˜๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ์ถฉ๋ถ„ํžˆ ํ•œ ์ƒํƒœ์—ฌ์„œ ๊ทธ๋Ÿฐ์ง€ ์ƒ๊ฐ๋ณด๋‹ค ๊ธฐ์กด์— ์ฝ์—ˆ๋˜ real mysql, ํ† ๋น„์˜ ์Šคํ”„๋ง 3.1๋ณด๋‹ค ์ž˜ ์ฝํ˜”๋‹ค. ๊ธฐ์กด์— database layer๋Š” Mybatis ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. SQL ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์•ž์œผ๋กœ ํ•  ์ผ์ด ๋งŽ์ด ๋‚จ์•˜์œผ๋ฏ€๋กœ, JPA๋กœ์˜ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์Šฌ์Šฌ ์‹œ์ž‘ํ•ด๋ณด์ž. JPA Java Persistence API ์ž๋ฐ” ์ง„์˜์˜ ORM ํ‘œ์ค€ ๊ธฐ์ˆ  ORM Object Relational Mapping ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. Hibernate ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ORM ํ”„๋ ˆ์ž„์›Œํฌ JPA ์ธํ„ฐํŽ˜.. 2022. 7. 15.
๋ฆฌํŒฉํ„ฐ๋ง ใ€ŒAuthentication(์ธ์ฆ)ใ€ ํƒœ์–ด๋‚˜์„œ ์ฒ˜์Œ ํšŒ์‚ฌ์— ์ง€์›ํ–ˆ๋‹ค. ์„œ๋ฅ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ๋„ฃ์—ˆ๋‹ค. ๋ฒŒ์จ ์„œ๋ฅ˜ ํƒˆ๋ฝ๋งŒ 3๋ฒˆ์งธ์ด๋‹ค. ์„œ๋ฅ˜ ํƒˆ๋ฝ์ด ์ด๋Ÿฐ ๊ธฐ๋ถ„์ด๊ตฌ๋‚˜...ใ…Žใ…Ž ํšŒ์‚ฌ ๊ธฐ์ค€์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๋‚ด ์‹ค๋ ฅ๊ณผ ๊ฒฐ๊ณผ๋ฌผ ํƒ“์ด์ง€ ๋ญ. ๋” ์—ด์‹ฌํžˆ ๋‹ค๋“ฌ์–ด์•ผ๊ฒ ๋‹ค. ์„œ๋ฅ˜๋ฅผ ๋‹ค๋“ฌ๋‹ค๊ฐ€ ์ธ์ฆ๊ณผ ์ธ๊ฐ€ ๊ตฌํ˜„ ์ค‘ ์ด์Šˆ๋ฅผ ์ž‘์„ฑํ–ˆ๋˜ ๋ถ€๋ถ„์ด ๋ˆˆ์— ๋„์—ˆ๋‹ค. ์ธ์ฆ๊ณผ ์ธ๊ฐ€... ์Œ... ์ธ๊ฐ€๋Š” ์• ๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ์ธํ„ฐ์…‰ํ„ฐ๋กœ ๊ตฌํ˜„ํ•œ ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ธ์ฆ์€ ์ข€ ์• ๋งคํ–ˆ๋‹ค. JWT ํ† ํฐ์„ ์ธ์ฆํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ตณ์ด ์ธํ„ฐ์…‰ํ„ฐ๊นŒ์ง€ ๋„๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ธ์ฆ ์ž‘์—…์„ ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ํ•„ํ„ฐ๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ํ•„ํ„ฐ(Filter)๋ž€? HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฑฐ๋ฅธ ๋’ค ์ •์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. Servlet Container ๋‹จ์—์„œ ๋™์ž‘ํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. Dispathcer.. 2022. 7. 11.
OutBox Pattern & Saga Pattern & Transaction ์ง€๋‚œ๋ฒˆ ํฌ์ŠคํŒ…์„ ์ดํ›„๋กœ 3์ผ๊ฐ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๊ด€ํ•œ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ํŠธ๋žœ์žญ์…˜์˜ ๊ณ ๋ ค๋„ ์ถฉ๋ถ„ํžˆ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ฐ™๋‹ค. ๊ทธ ๋ฆฌํŒฉํ„ฐ๋ง ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. https://sweeeetgoguma.tistory.com/entry/%E3%80%8COutBox-Pattern%E3%80%8D-%ED%99%9C%EC%9A%A9 ใ€ŒOutBox Patternใ€ ํ™œ์šฉ https://github.com/GroovyArea/MyChickenBreastShop/wiki/Version-1 GitHub - GroovyArea/MyChickenBreastShop: ChikenBreastShop API with Spring boot ChikenBreastShop API with Spring boot... 2022. 6. 13.
2022.06.01 ใ€Œ๊ฒฐ์ œ API - Ver.2ใ€ ์ง€๋‚œ๋ฒˆ ํฌ์ŠคํŒ…์— ์ด์–ด ์ž‘์„ฑํ•˜๊ฒ ๋‹ค! https://sweeeetgoguma.tistory.com/entry/20220529-%E3%80%8C%EA%B2%B0%EC%A0%9C-API%E3%80%8D 2022.05.29 ใ€Œ๊ฒฐ์ œ APIใ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ crud ์ž‘์—…ํ•œ ๊ฒƒ์„ ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ด๋ฒˆ ์ฃผ์— ๋๋‚ด๊ณ  ๋‚˜์„œ, ๋’ค๋Šฆ๊ฒŒ ๊ฒฐ์ œ API๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์นด์นด์˜ค ํŽ˜์ด API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์ƒ๊ฐ๋งŒํผ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ์–ด๋””์„œ ๋ณธ ๊ฑด๋ฐ sweeeetgoguma.tistory.com ์นด์นด์˜คํŽ˜์ด Rest API๋ฅผ ์ด์šฉํ•ด ๊ฒฐ์ œ ์ค€๋น„์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์™„๋ฃŒํ–ˆ๋‹ค. ์นด์นด์˜ค ํŽ˜์ด ํ”„๋กœ์„ธ์Šค์— ๋”ฐ๋ผ ์ค€๋น„์™€ ๊ฒฐ์ œ ๋ฐ ์Šน์ธ์„ ์œ„ํ•œ ํ†ต์‹  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ • ์†์—์„œ ์ˆ˜๋งŽ์€ ์‚ฝ์งˆ์ด ์žˆ์—ˆ๋‹ค. ์‚ฌ์‹ค ์‚ฝ์งˆ์ด๋ผ๊ธฐ๋ณด๋‹ค.. 2022. 6. 1.
2022.05.28 ใ€Œ์ฟ ํ‚ค ์ˆ˜์ •ใ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ API๋ฅผ ์ฒ˜์Œ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ์ฟ ํ‚ค๋กœ ํž˜๋“ค๊ฒŒ ์งฐ์—ˆ๋‹ค. ์˜ค๋Š˜ ์ฃผ๋ฌธ API๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์นด์นด์˜คํŽ˜์ด ๊ด€๋ จ API ํƒ์ƒ‰ ๋ฐ ๊ตฌ์ƒ์„ ํ•˜๋˜ ๋„์ค‘ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒฐ์ œํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋– ์˜ฌ๋ ธ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ์žฅ๋ฐ”๊ตฌ๋‹ˆ API ๋™์ž‘์ด ์ž˜ ๋˜๋Š”์ง€ ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ํ™•์ธ์„ ํ•˜๋˜ ๋„์ค‘ ์ด์ƒํ•œ ์ฟ ํ‚ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.. ๋‹ค์‹œ ํ•œ๋ฒˆ ์ ๊ฒ€์„ ํ†ตํ•ด ์ฝ”๋“œ ์ˆ˜์ •์„ ํ•˜๋ฉฐ ๋‹จ๋ฒˆ์— ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋Š” ์ž๋งŒ์‹ฌ ๋Š๊ผˆ๋˜ ์ž์‹ ์— ๋ฐ˜์„ฑ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค..ใ…Žใ…Ž ๋ฌธ์ œ์  ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํ’ˆ ์ถ”๊ฐ€๊ฐ€ ๋˜์งˆ ์•Š๋Š”๋‹ค ์ฟ ํ‚ค๊ฐ€ ๋‹ค์ค‘์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค => ์ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ œ์ผ ์ปธ๋‹ค ๊ธฐ์กด ์ฝ”๋“œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ฟ ํ‚ค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ response ๊ฐ์ฒด์— ์‚ฝ์ž…ํ•œ๋‹ค. ๋ฌธ์ œ ์ƒˆ๋กœ์šด ์ฟ ํ‚ค๊ฐ€ ๊ฐ™์€ Key๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์ €์žฅ๋œ๋‹ค. => ๋‚ด๊ฐ€ ์›ํ•œ ๊ฑด ๊ธฐ์กด ์ฟ ํ‚ค๋ฅผ .. 2022. 5. 28.
๋ฐ˜์‘ํ˜•