๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

IT Blog404

TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java (๋ฏธ์…˜ 3, 4 - FP, OOP, ๋ฆฌํŒฉํ„ฐ๋ง) ์„ธ ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ๋Š” ์ž๋ฐ” 8์˜ ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ๋„ค ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์ˆ˜๊ฐ•์‹ ์ฒญ์€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ์—์„œ ๊ฒฝํ—˜ํ•ด์•ผ ํ•  ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” 8์˜ ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ In -> Out, Out -> In ๋ฐฉ์‹์œผ๋กœ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒฝํ—˜ ์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„ค ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์ˆ˜๊ฐ•์‹ ์ฒญ์—์„œ ๊ฒฝํ—˜ํ•ด์•ผ ํ•  ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•  ๋•Œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ณดํ˜ธํ•˜๋Š” ๊ฒฝํ—˜ Q&A ์„œ๋น„์Šค์˜ ์งˆ๋ฌธ ์‚ญ์ œํ•˜๊ธฐ ๊ธฐ๋Šฅ์˜ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ฒฝํ—˜ DB ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ TDD ๊ธฐ๋ฐ˜์œผ๋กœ ๋จผ์ € ๊ฐœ๋ฐœํ•ด ๋ณด๋Š” ๊ฒฝํ—˜.. 2023. 8. 7.
TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java (๋ฏธ์…˜ 2. ๋กœ๋˜ - TDD) ์ง€๋‚œ๋ฒˆ ๋ฏธ์…˜ 1. ์ž๋™์ฐจ ๊ฒฝ์ฃผ - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , ์ด์–ด์„œ ๋ฏธ์…˜ 2. ๋กœ๋˜๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ์…˜ 1๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ, ๋ชจ๋“  ๋ฏธ์…˜์„ ๋๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์กฐ๊ธˆ ๋” ์†๋„๋ฅผ ๋‚ด์•ผ๊ฒ ๋„ค์š”... ๐Ÿ˜ญ 1๋‹จ๊ณ„ - ๋ฌธ์ž์—ด ์‹ค์Šต 1๋‹จ๊ณ„๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด ์‚ฌ์น™ ์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฏธ์…˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 + 3 * 4 / 2์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ 2 + 3 * 4 / 2 ์‹คํ–‰ ๊ฒฐ๊ณผ์ธ 10์„ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋์—๋Š” ๊ฐœํ–‰์„ ์ถ”๊ฐ€ํ•˜์ž ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ณด๋ฉด ๊ฐœํ–‰์€ ํ•˜๋‚˜์˜ ํ–‰์„ ์ •์˜ํ•˜๋Š” ํ‘œ์ค€์œผ๋กœ ๊ฐœํ–‰์ด ์—†๋‹ค๋ฉด ๋๋‚˜์ง€ ์•Š์€ ํ–‰์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์˜ ๋์—๋Š” ๊ฐœํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. https://velog.io/@doondoony/posix-eol ๊ทธ๋™์•ˆ ํŒŒ์ผ ๋์— ๊ฐœํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ.. 2023. 5. 13.
TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java (๋ฏธ์…˜ 1. ์ž๋™์ฐจ ๊ฒฝ์ฃผ - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ) 4์›” ์ดˆ๋ถ€ํ„ฐ NEXTSTEP์—์„œ ์ง„ํ–‰ํ•˜๋Š” TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java ๊ณผ์ •์„ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋…„๋ถ€ํ„ฐ ๊ณ„์† ๋“ค์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์˜ฌํ•ด ๋“ฃ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋งˆ์นจ ๋น„์Šทํ•œ ์‹œ๊ธฐ์— ๋ฒˆ์•„์›ƒ์ด ์™€๋ฒ„๋ ค์„œ.. ๐Ÿ˜ญ ์ฒซ ๋ฒˆ์งธ ๋ฏธ์…˜๋„ ๊ต‰์žฅํžˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋„ค์š”. ๐Ÿ˜ญ๐Ÿ˜ญ ๊ต์œก์—์„œ ์ง„ํ–‰ํ•œ ๋ฏธ์…˜๋“ค์„ ํ† ๋Œ€๋กœ ๋ฐฐ์šด ๋‚ด์šฉ ๋ฐ ํ”ผ๋“œ๋ฐฑ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. (ํ˜น์‹œ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š” ํฌ์ธํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๋ง์”€ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ™) ์ฒซ ๋ฒˆ์งธ ๋ฏธ์…˜์ธ ์ž๋™์ฐจ ๊ฒฝ์ฃผ - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—๋Š” ์ด 5๊ฐœ์˜ ๋ฏธ์…˜์ด ์กด์žฌํ•˜๊ณ , ๊ฐ ๋ฏธ์…˜๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ PR์„ ๋ณด๋‚ด๋ฉด ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๋Š”๋ฐ์š”, ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋ฐ›์•˜๋˜ ๋ฆฌ๋ทฐ ๋ฐ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1๋‹จ๊ณ„ - ํ•™์Šต ํ…Œ์ŠคํŠธ ์‹ค์Šต 1๋‹จ๊ณ„ ๋ฏธ.. 2023. 4. 25.
Java Map - compute(), computeIfAbsent(), computeIfPresent() Map ์ธํ„ฐํŽ˜์ด์Šค์—์„œ Java 8 ๋ฒ„์ „์— ์ถ”๊ฐ€๋œ ์ผ๋ถ€ API์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. putIfAbsent() compute() computeIfPresent() computeIfAbsent() getOrDefault() ํ•ด๋‹น ์ฝ”๋“œ๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ธ HashMap์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. 1. putIfAbsent(K key, V value) putIfAbsent() ๋ฉ”์„œ๋“œ๋Š” ๋„ค์ด๋ฐ์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Key๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ: Value ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” Key์˜ Value๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. Key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ: Key์— ํ•ด๋‹นํ•˜๋Š” Value๋ฅผ ์ €์žฅํ•œ ํ›„ null์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. Map์˜ ๊ตฌํ˜„์ฒด์ธ HashMap์„ ๋ณด๋ฉด putVal() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋˜๊ณ ,.. 2023. 3. 13.
Spring Batch (12) Retry ๐Ÿ”— Spring Batch Retry (Tasklet ๊ธฐ๋ฐ˜) ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :) ์„œ๋น„์Šค์—์„œ ์žฌ์‹œ๋„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ผ๊นŒ์š”? ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์˜ค๋ฅ˜์™€ ๊ฐ™์€ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋Š” ์žฌ์‹œ๋„๋ฅผ ํ•˜๋”๋ผ๋„ ๋™์ผํ•˜๊ฒŒ ์‹คํŒจํ•  ๊ฒฝ์šฐ๊ฐ€ ํฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ์ผ์‹œ์ ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์•  ์ƒํ™ฉ์—์„œ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค I/O์™€์˜ ํƒ€์ž„์•„์›ƒ, API ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ํƒ€์ž„์•„์›ƒ ๋“ฑ์ด ์žˆ๊ฒ ๋„ค์š”. ์ตœ๊ทผ ์‚ฌ๋‚ด์—์„œ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ„ํ—์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. reactor.core.Exceptions$ReactiveException: io.netty.channel.unix.Errors$NativeIoExc.. 2023. 3. 4.
์ข‹์•„์š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ๋™์‹œ์„ฑ ์ด์Šˆ (synchronized) ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋™์‹œ์„ฑ(Concurrency)์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๋™์‹œ์„ฑ(Concurrency) ๊ฐœ๋… ๋„ค์ด๋ฒ„ ์‚ฌ์ „์— ๊ฒ€์ƒ‰ํ•ด๋ณธ ๋™์‹œ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‘ ์‚ฌ๊ฑด์ด ๊ฐ™์€ ์‹œ๊ฐ„์— ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์ด๋ฅด๋Š” ๋ง ๋Œ€๋ถ€๋ถ„์˜ ์›น ์„œ๋ฒ„๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ(ํด๋ผ์ด์–ธํŠธ)์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์™€ ๋™์ผํ•œ ๋งฅ๋ฝ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ๊ฒŒ์‹œ๊ธ€์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ข‹์•„์š”๋ฅผ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. User A๊ฐ€ ๊ฒŒ์‹œ๊ธ€ 1์— ์ข‹์•„์š”๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ likeCount ์กฐํšŒ (likeCount = 0) User B๋„ ๊ฒŒ์‹œ๊ธ€ .. 2023. 2. 26.
Spring ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์„ธ์…˜ ๊ด€๋ฆฌํ•˜๊ธฐ (Redis Session Clustering) ๐Ÿ”— Spring ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์„ธ์…˜ ๊ด€๋ฆฌํ•˜๊ธฐ(์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง) ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ, ๋ณดํ†ต ์Šค์ผ€์ผ ์•„์›ƒ ๋“ฑ์„ ํ†ตํ•ด ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ(๋กœ๊ทธ์ธ ์œ ์ €์˜ ์„ธ์…˜ ์ •๋ณด) ์„ธ์…˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ณผ๊นŒ์š”? ์‚ฌ์šฉ์ž A๊ฐ€ localhost:8080ํฌํŠธ๋กœ login ํ˜ธ์ถœ ์‹œ ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  JSESSIONID์— ์ž„์˜์˜ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. JSESSIONID? - ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Tomcat Container์—์„œ ๋ฐœ๊ธ‰ํ•˜๋Š” Key์ด๊ณ  Value๋ฅผ ํ†ตํ•ด ์„ธ์…˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘ ๋ฐฉ์‹? 1. ๋ธŒ๋ผ์šฐ.. 2023. 2. 12.
Spring DispatcherServlet(๋””์ŠคํŒจ์ฒ˜์„œ๋ธ”๋ฆฟ) ๊ฐœ๋…๋ถ€ํ„ฐ ๋™์ž‘ ๊ณผ์ •๊นŒ์ง€ ๐Ÿ”— DispatcherServlet ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Spring์—์„œ HTTP ์š”์ฒญ ๋ฐ ์‘๋‹ต๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฐ€์žฅ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ธ DispatcherServlet์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ‰์†Œ์— ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ์–ด๋Š ์ •๋„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์–ด๋– ํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ , ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€ ๋‚ด๋ถ€ ๋™์ž‘์€ ์ž˜ ๋ชฐ๋ž์—ˆ๋Š”๋ฐ์š”, ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. (ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ง์”€ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ™) | DispatcherServlet ๊ฐœ๋… ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” DispatcherServlet์€ HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๋จผ์ € ๋ฐ›์•„์„œ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„์ž„(Delega.. 2023. 2. 11.
EasyRandom - Java beans๋ฅผ ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๐Ÿ”— EasyRandom - Java beans๋ฅผ ๋žœ๋ค ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณดํ†ต ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ž„์˜๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ€ 1~2๊ฐœ๋ผ๋ฉด ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ, ์กฐ๊ธˆ ๋งŽ์•„์ง„๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์€๊ทผ(?) ๊ท€์ฐฎ์€๋ฐ์š”, ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ฐ ํ•„๋“œ์— ๋งž๋Š” ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฝค๋‚˜ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์„ ๋•Œ, ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ EasyRandom ์ž…๋‹ˆ๋‹ค. (์‚ฌ์šฉ๋ฒ•๋„ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๋‹ˆ, ์ž์„ธํ•œ ๊ฑด ๊นƒํ—ˆ๋ธŒ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.) ๐Ÿ”— ์‚ฌ์šฉ๋ฒ• ์˜์กด์„ฑ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ˆ์ด๋“ค์€ testImplementation์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Member ํด๋ž˜์Šค Post ํด๋ž˜์Šค EasyRandom Cust.. 2023. 1. 27.
SpringBoot Multi DataSource - JPA ๐Ÿ”— SpringBoot์—์„œ ๋ฉ€ํ‹ฐ ๋ฐ์ดํ„ฐ์†Œ์Šค ์„ค์ •ํ•˜๊ธฐ - JPA ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์ด๋Ÿฐ ๊ฒฝ์šฐ DataSource๋ฅผ ์ปค์Šคํ…€์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ํ†ตํ•ด ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” GitHub์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŽˆ application.yml yml ํŒŒ์ผ์— ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(datasource, datasource-second)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •๊ณผ ๋‹ฌ๋ฆฌ ๋ฉ€ํ‹ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค HikariConfig์—์„œ๋Š” url์ด ์•„๋‹Œ jdbc-url์œผ๋กœ ๋„ค์ด๋ฐ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.) ๐ŸŽˆ DataSource Configuration ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ํŒจ.. 2023. 1. 21.
๋ฐ˜์‘ํ˜•