Jinu's Blog

[๊ฐœ๋ฐœ์ž์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„œ๋ž] ์ฒซ ๋ฒˆ์งธ: '์ •๋ ฌ' ์„ ๊บผ๋‚ด๋‹ค

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ •๋ ฌ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ, โ€˜์–ด๋–ค ์ •๋ ฌ์„ ์จ์•ผ ํ• ๊นŒ?โ€™ ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋ฉด ์†Œ์ค‘ํ•œ ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ๊ฐ‘๋‹ˆ๋‹ค. Arrays.sort()๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํšจ๊ณผ์ ์ด์ง€๋งŒ, ๋ชจ๋“  ์ƒํ™ฉ์— ๋งž๋Š” ๋งŒ๋Šฅ ์—ด์‡ ๋Š” ์•„๋‹ˆ๊ธฐ์— ๋•Œ๋กœ๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์€ ์‹ค์ „์—์„œ ์œ ์šฉํ•œ ์ •๋ ฌ ์ „๋žต์„ ์„ธ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์›์น™๊ณผ ๊ธฐ์ค€์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‚ด...

๋‚˜๋„ ๊ฒช์—ˆ๋˜ Spring Boot ์‹ค์ˆ˜๋“ค - ํ•œ ๊ฐœ๋ฐœ์ž์˜ ํšŒ๊ณ ์— ๊ณต๊ฐํ•˜๋ฉฐ..

๐Ÿ–‡๏ธ ์ถœ์ฒ˜: Donโ€™t Repeat These 5 Costly Spring Boot Mistakes I Made for Years๐Ÿ˜ž ์ตœ๊ทผ ์ฝ์€ ๊ธ€ โ€œDonโ€™t Repeat These 5 Costly Spring Boot Mistakes I Made for Yearsโ€ ์—์„œ๋Š” Spring Boot ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒช๊ธฐ ์‰ฌ์šด ๋‹ค์„ฏ ๊ฐ€์ง€ ์‹ค์ˆ˜๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์—ˆ...

100๊ฐœ์˜ ์‹ค์ „ Spring Boot API์—์„œ ๋ฐฐ์šด ๊ตํ›ˆ๋“ค

๐Ÿ–‡๏ธ ์ถœ์ฒ˜: I Built 100 APIs with Spring Boot โ€” Hereโ€™s What I Learned the Hard Way ์ตœ๊ทผ Spring Boot ๊ธฐ๋ฐ˜ API ์„ค๊ณ„์— ๊ด€ํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฝ๊ณ , ๊ธฐ์ˆ ์ ์ธ ํŒ์„ ๋„˜์–ด ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋‚˜ ๊ฐœ์ธ์ ์ธ ๊ฐœ๋ฐœ ์Šต๊ด€์— ๋Œ€์ž…ํ•ด...

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ Local Cache ๋™๊ธฐํ™”ํ•˜๊ธฐ โ€“ Redis Pub/Sub ์ „๋žต

๐Ÿงฉ ๊ฐœ์š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ Redis๋งŒ์œผ๋กœ ์บ์‹œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŽ์€ ์‹œ์Šคํ…œ์€ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ(Caffeine ๋“ฑ)์™€ Redis๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” 2๋‹จ๊ณ„ ์บ์‹ฑ(two-level caching) ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ตฌ์กฐ๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ„ ์บ์‹œ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ...

๋Œ€๋Ÿ‰ ์ฃผ๋ฌธ ํŠธ๋ž˜ํ”ฝ ๋Œ€์‘์„ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ์„ค๊ณ„

1. ๋ฌธ์„œ ๊ฐœ์š” ์ด ๋ฌธ์„œ๋Š” ๋Œ€๋Ÿ‰ ์ฃผ๋ฌธ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ์—์„œ ์„œ๋ฒ„ ์•ˆ์ •์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์„ค๊ณ„ ๋ฐฉ์•ˆ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ: ์ฃผ๋ฌธ ์š”์ฒญ ์‹คํŒจ ์—†์ด ๋†’์€ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์–ด๋–ค ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ•œ๊ฐ€? ์‚ฌ์šฉ์ž ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ฉด์„œ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€? MVP ์ˆ˜์ค€์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์€? 2. ๋ฌธ์ œ...

์บ์‹œ์™€ ์บ์‹œ ์Šคํƒฌํ”ผ๋“œ ์ดํ•ด ๋ฐ ๋ฐฉ์ง€ ์ „๋žต

๐Ÿ“Œ ์บ์‹œ ์Šคํƒฌํ”ผ๋“œ(Cache Stampede)๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ์บ์‹œ ์Šคํƒฌํ”ผ๋“œ(Cache Stampede) ๋Š” ๋™์‹œ์— ๋‹ค์ˆ˜์˜ ์š”์ฒญ์ด ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด(์บ์‹œ ๋ฏธ์Šค), ์ผ์‹œ์— ๋ฐฑ์—”๋“œ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์™ธ๋ถ€ API ๋“ฑ)์— ๊ณผ๋„ํ•œ ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ณ ๊ฐˆ๋˜๊ฑฐ๋‚˜ ์‘๋‹ต ์†๋„๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋А๋ ค์ง€๊ณ , ์‹ฌ๊ฐํ•œ ๊ฒฝ์šฐ ์ „์ฒด ์„œ๋น„์Šค ์žฅ์• ๋กœ ์ด...

ํ•ญํ•ด ํ”Œ๋Ÿฌ์Šค ๋ฐฑ์—”๋“œ ๊ณผ์ • 9์ฃผ์ฐจ ํšŒ๊ณ 

Keep: ํ˜„์žฌ ๋งŒ์กฑํ•˜๊ณ  ๊ณ„์† ์œ ์ง€ํ•  ๋ถ€๋ถ„ Kafka ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Outbox ํŒจํ„ด์„ ์ž˜ ์ ์šฉํ•˜์—ฌ, ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ์‹คํŒจ ์‹œ์˜ ๋ณต๊ตฌ๋ ฅ์„ ๊ฐ•ํ™”ํ•œ ์ . ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ†ตํ•ด ํŒจํ„ด์˜ ํšจ๊ณผ๋ฅผ ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆํ•œ ์ . ์„œ๋กœ ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ ์Šค๋ ˆ๋“œ๋ฅผ ๊ทธ๋ฃน ID๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ์ . ํ…Œ์ŠคํŠธ ...

ํ•ญํ•ด ํ”Œ๋Ÿฌ์Šค ๋ฐฑ์—”๋“œ ๊ณผ์ • 8์ฃผ์ฐจ ํšŒ๊ณ 

Keep : ํ˜„์žฌ ๋งŒ์กฑํ•˜๊ณ  ๊ณ„์† ์œ ์ง€ํ•  ๋ถ€๋ถ„ MSA ์ „ํ™˜ ์„ค๊ณ„์—์„œ SAGA์™€ Outbox ํŒจํ„ด์„ ๊ฒฐํ•ฉํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์•ˆ์„ ๊ตฌ์ƒํ•œ ์ ์ด ๋งŒ์กฑ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. Problem : ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฌธ์ œ์  ์„ค๊ณ„ํ•œ ๋‚ด์šฉ์ด ์•ฝ๊ฐ„ ๋ถ€์กฑํ•œ ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•œ ๋กœ์ง๋“ค์˜ ์„ธ์„ธํ•œ ๋ถ€๋ถ„๋„ ์ถ”๊ฐ€ํ•ด์„œ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. Try : ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด...

๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ ์„ค๊ณ„

๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ชฉ์ฐจ ๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ฐœ์š” ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์กด DB ์‹œ์Šคํ…œ Redis ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ์„ ์ • ์ด์œ  ์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ ๋ฐฉ์‹ ...

์บ์‹œ๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ๊ฐœ์„ 

์บ์‹œ๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ชฉ์ฐจ ์บ์‹œ๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ๊ฐœ์„  ์บ์‹ฑ์˜ ์ดํ•ด์™€ ํšจ๊ณผ ์บ์‹ฑ์ด๋ž€? ํšจ๊ณผ ๋กœ์ปฌ ์บ์‹ฑ vs ๊ธ€๋กœ๋ฒŒ ์บ์‹ฑ ๋กœ์ปฌ ์บ์‹ฑ ๊ธ€๋กœ๋ฒŒ ์บ์‹ฑ ...