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

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ222

์ž์ • ๋ฐฐ์น˜ ์Šค์ผ€์ค„๋Ÿฌ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์บ์‹œ ์žฌ์˜ค์—ผ(Stale Data) ๋ฐฉ์ง€ ๋ฐ ๋ถ„์‚ฐ ๋ฝ ์ œ์–ด ๋ถ„์•ผ: MSA, Batch Processing, Cache Consistency (Stale Data), Distributed Lock (ShedLock), Race Condition๊ด€๋ จ ํŒŒ์ผ: CatalogVisibilityScheduler.java, ShedLockConfig.java1. ๋ฐœ๋‹จ: ์กฐํšŒ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์ž์ • ๋ฐฐ์น˜ ์Šค์ผ€์ค„๋Ÿฌ ๋„์ž…์นดํƒˆ๋กœ๊ทธ ์„œ๋น„์Šค๋Š” ์ปค๋จธ์Šค ๋ฉ”์ธ ํ™”๋ฉด์˜ ๋Œ€๊ทœ๋ชจ ์กฐํšŒ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์ƒํ’ˆ ๋ชฉ๋ก์„ Redis์— ์บ์‹ฑ(products_cache)ํ•˜์—ฌ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ์Œ.๋˜ํ•œ ๋งค์ผ ์ž์ •(00:00:00), ์ƒํ’ˆ์˜ ๋…ธ์ถœ ์ƒํƒœ(isVisible)๋ฅผ ์ผ๊ด„ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฐ์น˜ ์Šค์ผ€์ค„๋Ÿฌ(CatalogVisibilityScheduler)๊ฐ€ ๊ตฌ๋™๋จ.์ดˆ๊ธฐ ์„ค๊ณ„์—์„œ๋Š” DB ์—…๋ฐ์ดํŠธ ์ „ ์บ์‹œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ .. 2026. 6. 30.
์กฐํšŒ ๋ชจ๋ธ(Read Model)์˜ ๊ฐ€์‹œ์„ฑ ์ฒ˜๋ฆฌ ์ „๋žต: ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ vs ์ž์ • ๋ฐฐ์น˜์˜ Trade-off์™€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ• ๋ถ„์•ผ: MSA, CQRS Pattern, Read Model Optimization, Performance Tuning, Hybrid Visibility Strategy๊ด€๋ จ ํŒŒ์ผ: ProductViewCommandService.java, ProductViewRepository.java, StockEventConsumer.java, DailyStockResetEvent.java1. ๋ฐœ๋‹จ: ์กฐํšŒ ์„œ๋น„์Šค(Catalog)์˜ '๊ฐ€์‹œ์„ฑ ๋ณด์žฅ'๊ณผ 'I/O ๋ถ€ํ•˜'์˜ ๋”œ๋ ˆ๋งˆCQRS ํŒจํ„ด์— ๋”ฐ๋ผ ์นดํƒˆ๋กœ๊ทธ ์„œ๋น„์Šค๋Š” ์˜ค๋”/์ธ๋ฒคํ† ๋ฆฌ์˜ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ์กฐํšŒ ์ „์šฉ ๋ฐ์ดํ„ฐ์…‹(MongoDB)์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ณ  ์žˆ์—ˆ์Œ. ํ•˜์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์  ๋ณ‘๋ชฉ ์˜ˆ์ƒ์ด ๊ฐ์ง€๋จ๊ธฐ์กด ๊ตฌ์กฐ์˜ ๋ณ‘๋ชฉ: ์ƒ.. 2026. 6. 5.
๋‹จ์ผ ํ† ํ”ฝ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฉ”์‹œ์ง€ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ: Envelope DTO ํŒจํ„ด vs ๋‹คํ˜•์„ฑ ๋ผ์šฐํŒ…(@KafkaHandler) ๋ถ„์•ผ: Spring Kafka, Message Routing, Payload Design๊ด€๋ จ ํŒŒ์ผ: OrderEventConsumer.java1. ๋ฐฐ๊ฒฝ: ํ† ํ”ฝ ํ†ตํ•ฉ์œผ๋กœ ์ธํ•œ ์‹๋ณ„ ๋ฌธ์ œ์ง์ „์—, ์นดํ”„์นด ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ์—ญ์ „(Out-of-Order) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฒคํ† ๋ฆฌ ์„œ๋น„์Šค๋กœ ํ–ฅํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ช…๋ น(์žฌ๊ณ  ์ฐจ๊ฐ, ์žฌ๊ณ  ๋ณต๊ตฌ)์„ ๊ฐœ๋ณ„ ํ† ํ”ฝ์—์„œ ๋‹จ์ผ ํ† ํ”ฝ(inventory.command)์œผ๋กœ ํ†ตํ•ฉํ•จ๋ฌธ์ œ๋Š” ํ† ํ”ฝ์ด ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง€๋ฉด์„œ, ์ธ๋ฒคํ† ๋ฆฌ ์„œ๋น„์Šค์˜ ์ปจ์Šˆ๋จธ๊ฐ€ "์ง€๊ธˆ ๋“ค์–ด์˜จ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฐจ๊ฐ ๋ช…๋ น์ธ์ง€ ๋ณต๊ตฌ ๋ช…๋ น์ธ์ง€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•  ๊ฒƒ์ธ๊ฐ€?" ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์ž˜ ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜์Œ...2. ๊ณ ๋ฏผ: ์ „ํ†ต์ ์ธ Envelope(๋ด‰ํˆฌ) ํŒจํ„ด์˜ ํ•œ๊ณ„๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ฆฐ ํ•ด๊ฒฐ์ฑ…์€ ๋‘ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ๋Š” ๊ฑฐ๋Œ€ํ•œ '๋ด‰ํˆฌ(Envelop.. 2026. 6. 2.