์ ์ฒด ๊ธ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. ๋น๋๊ธฐ ๋ถ์ฐ ํธ๋์ญ์ (Saga)์ ๋ฉฑ๋ฑ์ฑ, ๋ฉ์์ง ์์ ์ญ์ (Out-of-Order) ํด๊ฒฐ๊ธฐ ๋ถ์ผ: MSA, Event-Driven Architecture, Saga Pattern, Idempotency, Kafka Partition Key Routing๊ด๋ จ ํ์ผ: OrderCommandService.java , OrderEventConsumer.java1. ๋ฐ๋จ: ๋น๋๊ธฐ ํ๊ฒฝ์์ ๋ฐ๊ฒฌ๋ '์๊ฐ์ฐจ ์ฃ์ง ์ผ์ด์ค'์ฃผ๋ฌธ ์์ฑ ํธ๋์ญ์ ์ ๋น๋๊ธฐ Saga ํจํด(Kafka)์ผ๋ก ๋ถ๋ฆฌํ ํ, ์์คํ ์ ์์ ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ๋ฌ ์์ธ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํจ. ๊ทธ์ค "์ ์ ์ ๊ธฐ์ต ์ทจ์" ์ํฉ์์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๋ฐ๊ฒฌํจ[์๋๋ฆฌ์ค ํ์๋ผ์ธ]์ ์ ๊ฐ ์ฃผ๋ฌธ์ ์์ฒญํ์ฌ ์ํ๊ฐ PENDING(๋๊ธฐ)์ด ๋จ.์ ์ ๊ฐ ๋ณ์ฌํ์ฌ ์ฆ์ ์ฃผ๋ฌธ ์ทจ์(cancelOrder)๋ฅผ ์์ฒญํจ. ์ํ๋ CANCELED๊ฐ ๋๊ณ , ๊น์์์ง ๋ชจ๋ฅผ ์ฌ๊ณ ๋ฅผ .. 2026. 5. 25. ๋๊ท๋ชจํธ๋ํฝ ํ๋ก์ ํธ ํค์๋์ ๋ฆฌ 1. Inventory (์ฌ๊ณ ๊ด๋ฆฌ) ๋๋ฉ์ธํต์ฌ ํค์๋: ๋์์ฑ ์ ์ด, ๋๊ด์ ๋ฝ(Optimistic Lock), Redisson ๋ถ์ฐ ๋ฝ, Connection Pool ๊ณ ๊ฐ ๋ฐฉ์ง[๋์ ๋ฐฐ๊ฒฝ ๋ฐ ๋ฌธ์ ์ํฉ]์ฃผ์ ํน์ฑ์ ํน์ ์๊ฐ๋์ ๋ค์์ ์์ฒญ์ด ๋ชฐ๋ฆผ.์ด๊ธฐ์๋ DB ์์ค์ ๋๊ด์ ๋ฝ์ ํตํด ๋์์ฑ์ ์ ์ดํ๊ณ ์ ํ์.๊ทธ๋ฌ๋ ํธ๋ํฝ ์ง์ค ์ ์ฆ์ DB ๋ฒ์ ์ถฉ๋์ด ๋ฐ์ํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฌ์๋ ๋ก์ง์ด ๋ฐ๋ณต๋๋ฉด์ ๊ฒฐ๊ตญ DB ์ปค๋ฅ์ ํ ๊ณ ๊ฐ ๋ฐ ์ ์ฒด์ ์ธ ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ก ์ด์ด์ง.[๋น์ฆ๋์ค ๋ก์ง ๋ฐ ๊ธฐ์ ์ ํ]์ฌ๊ณ ๋น์ฆ๋์ค ๋ฃฐ: ์ ์ฃผ ์ค์ ์ ๋ฐ๋ผ ํ์ฌ ์ผ์ผ ์ฌ๊ณ (current_daily_stock)๋ฅผ ์ผ์ผ ํ๋(daily_limit) ๊ฐ์ผ๋ก ์ด๊ธฐํํ๊ณ , ์์ฝ ์๋น์ค๋ก๋ถํฐ ์ฌ๊ณ ์ฐจ๊ฐ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ํ๋งค๋.. 2026. 5. 21. ์ด์ 1 2 3 4 ยทยทยท 45 ๋ค์