이커머스 시스템은 *어떻게 동작하는가* — *''*'주문 1 건의 라이프사이클'*''* 로 풀어보는 MSA·이벤트·Outbox·Saga·동시성
’‘‘주문 ’‘‘1 건이 ’‘‘성공적으로 처리되기 위해서 ’‘‘평균 ’‘‘15-30 개의 시스템 호출이 발생한다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ — 검색·카탈로그·장바구니·재고·결제·배송·정산·알림·통계 등 ’‘‘동시에 살아있어야 하는 컴포넌트만 ’‘‘10 개 이상’‘’‘’‘. ’‘‘그 중 ’‘‘한 곳만 ’‘‘한 번 ’‘‘잘못되면’‘’‘’‘’‘’‘’‘’’* — ’‘‘돈은 빠졌는데 주문은 안 들어감, ’‘‘1000 명이 동시에 마지막 1 개 사려고 함, ’‘‘검색 결과가 ’‘‘왜 그 상품을 안 보여주냐’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘이커머스 시스템 아키텍처’‘’‘’’* 는 ’‘‘그 사고들을 ’‘‘어떻게 막을지의 ’‘‘역사’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. 이 글은 *’‘‘한 주문이 도는 라이프사이클’‘’‘’‘’’ 을 ’‘‘MSA + 이벤트 + Outbox + Saga + 동시성 제어 + 검색’’* 6 가지 축으로 ’‘‘도메인 지식으로 ’‘‘풀어본다’‘’‘’‘’‘’‘’‘*.
이 글은 ’‘‘공개된 도메인 지식’‘’‘’‘’’ 만 다룬다. ’‘‘특정 회사의 ’‘‘내부 구현 / 운영 노하우’‘’‘’‘’‘’‘’’ 은 ’‘‘공개된 자료 (DEVIEW, IF Kakao, 토스 SLASH, 우아콘) 인용’‘’‘’‘’‘’‘’’* 으로 ’‘‘한정’‘’‘’‘’‘’‘*.
1. ’‘‘이커머스 시스템의 ’‘‘3 가지 근본 어려움*’‘’‘’‘’‘’‘’‘’‘’’*
이커머스 시스템이 ’‘‘다른 시스템과 ’‘‘다른 이유’‘’‘’‘’’ — ’‘‘돈 + 재고 + 시간이 ’‘‘동시에 ’‘‘틀어진다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘세 가지 차원이 ’‘‘서로를 ’‘‘결정한다’‘’‘’‘’‘’‘’‘.
| 차원 | 어려움 |
|---|---|
| 돈 (결제) | ’‘‘중복 결제 / ’‘‘실패한 결제 / ’‘‘환불 / ’‘‘Race condition*’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* |
| 재고 (Inventory) | ’‘‘1000 명이 ’‘‘마지막 1 개를 ’‘‘동시에 ’‘‘시도*’‘’‘’‘’‘’‘’‘’‘’‘’’ |
| 시간 (이벤트 순서) | ’‘‘주문 → 결제 → 배송 → 환불 → 정산의 ’‘‘상태가 ’‘‘역행하지 않게’‘’‘’‘’‘’‘’‘’‘’’ |
이 ’‘‘세 차원이 ’‘‘모두 분산 시스템에서 ’‘‘일관성을 유지’‘’‘’‘’‘’‘’‘’‘’’ 해야 한다는 게 ’‘‘이커머스의 ’‘‘진짜 문제*’‘’‘’‘’‘’‘’‘*.
2. ’‘‘한 주문의 ’‘‘라이프사이클** — ’‘‘*12 단계’‘’‘’‘’‘’‘’‘’’*
[사용자]
│
│ ① 접속 (HTTPS)
▼
[CDN / 로드밸런서]
│
│ ② 검색
▼
[Search Service] ←──→ Elasticsearch / OpenSearch
│
│ ③ 상품 상세 조회
▼
[Catalog Service] ←──→ MySQL/PostgreSQL + Redis (캐시)
│
│ ④ 장바구니 담기
▼
[Cart Service] ←──→ Redis (사용자 키 기반)
│
│ ⑤ 주문 시도 (Order 생성)
▼
[Order Service] ──┬─→ [Inventory Service] (재고 락 / 차감)
│
└─→ [Payment Service] (결제 요청)
│
│ ⑥ PG 결제 호출
▼
[외부 PG: 토스/이니시스/카카오페이]
│
│ ⑦ PG 콜백 (성공/실패)
▼
[Payment Service] ──→ Order 확정 (Order Status: PAID)
│
│ ⑧ 이벤트 발행 (Outbox → Kafka)
▼
[Kafka: OrderPlacedEvent]
├──→ [Shipping Service] 배송 준비 + 송장
├──→ [Settlement Service] 정산 계산 (셀러 수수료)
├──→ [Notification Service] 알림 (메일/SMS/푸시)
├──→ [Analytics Service] 통계 / BI
└──→ [Recommendation Service] 사용자 선호 업데이트
│
│ ⑨ 배송 진행
▼
[Shipping Service] ←──→ 택배사 API (CJ대한통운/한진/롯데)
│
│ ⑩ 배송 완료 / 구매 확정
▼
[Order Service] ──→ Order Status: DELIVERED → CONFIRMED
│
│ ⑪ 정산 실행 (D+N 일 후 셀러에게 송금)
▼
[Settlement Service]
│
│ ⑫ 환불 / 반품 (선택)
▼
[Refund Flow: 보상 트랜잭션]
’‘‘12 단계’‘’‘’’* 중 ’‘‘①-⑦ 은 동기적 (사용자 대기)’‘’‘’‘’‘’‘, *’‘‘⑧-⑫ 는 비동기적 (백그라운드)’‘’‘’‘’‘’‘’‘. ’‘‘이 ’‘‘동기-비동기 경계 설계가 ’‘‘*시스템 응답성을 결정한다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
3. ’‘‘핵심 컴포넌트 ’‘‘9 개’‘’‘’‘’‘’‘’‘’’*
| 영역 | 책임 | 대표 기술 | 데이터 특성 |
|---|---|---|---|
| 검색 | 상품 찾기 + 정렬 | Elasticsearch / OpenSearch + dense embedding | Read 압도적, 인덱스 분리 |
| 카탈로그 | 상품 메타 / 가격 | RDS (MySQL/PostgreSQL) + Redis | Read 많음, Cache aside |
| 장바구니 | 임시 보관 | Redis (Key=userId) | 휘발성 OK, TTL 1-7 일 |
| 주문 | 트랜잭션 핵심 | RDS (강한 일관성) | ACID 필수 |
| 재고 | 동시성 제어 | Redis (INCR/DECR) or RDS row lock | 매우 자주 변경 |
| 결제 | PG 연동 | 외부 API + Idempotency Key | 외부 의존성 큼 |
| 배송 | 송장 / 상태 | RDS + 택배사 API | State machine |
| 정산 | 셀러 정산 | RDS + 배치 + Outbox | 정확성 > 속도 |
| 이벤트 버스 | 서비스간 통신 | Kafka / Pulsar / SQS | At-least-once 보장 |
4. ’‘‘5 가지 동작 원리’‘’‘’‘’‘’’*
4.1. ’‘‘MSA (마이크로서비스 아키텍처)’‘’‘’‘’‘’‘’’
’‘‘카탈로그·주문·결제·재고·배송·정산이 ’‘‘각자 독립 서비스’‘’‘’‘’‘’‘’‘’‘. *’‘‘한 서비스가 죽어도 ’‘‘다른 서비스는 ’‘‘살아있어야 한다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
경계 결정 원칙 (DDD Bounded Context):
- 카탈로그 ↔ 주문 — ’‘‘다른 컨텍스트’‘’‘’‘’‘. 카탈로그의
Product와 주문의OrderedItem은 *’‘‘다른 모델’‘’‘’‘’‘’‘’‘’‘’’ - 주문 ↔ 결제 — ’‘‘같은 도메인 같은 라이프사이클’‘’‘’‘’‘’‘’‘’’ 인 경우 ’‘‘한 서비스로 ’‘‘같이 두기도 함’‘’‘’‘’‘’‘’‘’’*
MSA 의 ’‘‘진짜 어려움’‘’‘’‘’‘’‘’’* — ’‘‘서비스 경계를 ’‘‘언제 ’‘‘어떻게 자를지’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘너무 일찍 자르면 ’‘‘Distributed Monolith** (분산 모놀리스), ’‘‘너무 늦게 자르면 ’‘‘Big Ball of Mud’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
4.2. ’‘‘이벤트 기반 통신’‘’‘’‘’’
’‘‘주문 확정 → ’‘‘OrderPlacedEvent 발행 (Kafka)’‘’‘’‘’‘’‘’’ → ’‘‘배송 / 정산 / 알림 / 통계가 ’‘‘각자 구독 처리’‘’‘’‘’‘’‘’‘’‘’‘.
’‘‘동기 API 호출’‘’‘’’* 의 문제:
- ’‘‘배송팀 서비스 다운 → 주문 실패’‘’‘’‘’‘’‘’’ (강결합)
- ’‘‘5 개 다 호출하면 ’‘‘누적 지연 + 단일 실패점’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
’‘‘이벤트 발행으로 ’‘‘전환’‘’‘’‘’‘:
- ’‘‘Order 서비스는 ’‘‘Kafka 에 ’‘‘한 번 발행만’‘’‘’‘’‘’‘’‘’’*
- ’‘‘구독자들이 ’‘‘각자 ’‘‘자기 페이스로 처리’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘한 구독자 죽어도 ’‘‘다른 구독자는 OK*’‘’‘’‘’‘’‘’’*
4.3. ’‘‘Outbox Pattern’‘’‘’’*
’‘‘DB 트랜잭션 + Kafka 발행의 ’‘‘원자성 보장’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
문제 — DB 커밋 후 Kafka 발행 ’‘‘사이’‘’‘’‘’‘’’* 에 ’‘‘프로세스 죽으면’‘’‘’‘’‘’‘’’ — ’‘‘DB 엔 ’‘‘주문 있지만 ’‘‘메시지는 ’‘‘발행 안 됨’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘결제 성공했는데 ’‘‘배송 안 가는 사고*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
해법:
-- 같은 트랜잭션 안에서:
BEGIN;
INSERT INTO orders ...;
INSERT INTO outbox (event_id, payload) VALUES (...);
COMMIT;
-- 별도 poller / Debezium 이 outbox 읽어서 Kafka 발행
-- 발행 성공하면 outbox.status = 'PUBLISHED'
’‘‘Triple Idempotency’‘’‘’‘’’ (3 중 멱등성):
- L1 —
outbox.event_id UNIQUE(DB 차원) - L2 — Consumer 의
processed_events테이블 PK (중복 처리 방지) - L3 — 비즈니스 unique 제약 (예:
payment.idempotency_keyUNIQUE)
4.4. ’‘‘Idempotency Key (멱등성 키)’‘’‘’‘’‘’‘’’*
’‘‘같은 요청을 ’‘‘몇 번 보내도 ’‘‘같은 결과’‘’‘’‘’‘’‘’‘’‘’‘.
현실 시나리오:
- 사용자가 결제 버튼 ’‘‘두 번 클릭’‘’‘’‘’’*
- 네트워크 끊김 후 ’‘‘클라이언트 재시도’‘’‘’‘’‘’‘’’*
- 모바일 백그라운드 → 다시 활성화 → ’‘‘재요청’‘’‘’‘’’
해법:
POST /api/v1/payments
Idempotency-Key: 6f8c4e2a-... ← 사용자가 생성한 UUID
{
"orderId": "ORD-2026-...",
"amount": 35000
}
서버:
- ’‘‘같은 키로 ’‘‘요청 오면’‘’‘’‘’‘’‘’’ → ’‘‘이전 결과 그대로 반환’‘’‘’‘’‘’‘’’*
- ’‘‘Stripe 의 ’‘‘전 API 가 ’‘‘이 패턴**’‘’‘’‘’‘’‘’‘’’
4.5. ’‘‘Read-Write 분리’‘’‘’’*
’‘‘카탈로그는 ’‘‘Read 가 ’‘‘Write 의 ’‘‘100-1000 배’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
분산 전략:
- 검색 = ES 인덱스 (read 전용)
- 상세 조회 = Redis 캐시 (TTL 1-5 분)
- 재고 = Redis (실시간) + RDS (정확성 보장)
- 주문 = RDS 마스터 (write) + Read Replica (조회)
’‘‘캐시 전략’‘’‘’‘*:
- Cache Aside — read 시 ’‘‘캐시 미스 → DB → 캐시 쓰기’‘’‘’‘’‘’‘’‘’’*
- Write Through — write 시 ’‘‘DB + 캐시 동시 갱신’‘’‘’‘’‘’‘’‘’‘’’
- Write Behind — write 시 ’‘‘캐시만 즉시, ’‘‘DB 는 비동기*’‘’‘’‘’‘’‘’‘’‘’’*
5. ’‘‘가장 어려운 ’‘‘3 가지 영역’‘’‘’‘’‘’’*
5.1. ’‘‘재고 동시성’‘’’
문제: ’‘‘오후 8 시 라이브 방송 종료. ’‘‘한정 수량 상품 1 개’‘’‘’‘’‘’‘’‘’‘’’ 에 ’‘‘5,000 명 동시 클릭’‘’‘’‘’‘’‘’‘. *’‘‘누가 가져가야 ’‘‘일관성 + 공정성 + 성능’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ 을 ’‘‘모두 만족하나?’‘’‘’‘’‘’‘’’*
해법 3 가지:
[A] DB Pessimistic Lock (SELECT ... FOR UPDATE)
- 정확함, 단순함
- ’‘‘처리량 한계 ~ 100-500 TPS’‘’‘’‘’‘’‘’‘’’*
- 트랜잭션 길어지면 ’‘‘전체 락 대기’‘’‘’‘’‘’‘’’*
[B] Optimistic Lock (version 컬럼)
- 처리량 좋음
- ’‘‘충돌 시 ’‘‘재시도 부담*’‘’‘’‘’‘’‘’’*
- ’‘‘경합 심하면 ’‘‘재시도 폭증*’‘’‘’‘’‘’‘’‘’’
[C] Redis 원자 연산 (DECR)
- 처리량 ’‘‘최고 (10K+ TPS)’‘’‘’‘’‘’’*
- 단일 명령 원자성 → ’‘‘락 없이 안전’‘’‘’‘’’
- ’‘‘RDS 와 ’‘‘동기화 필요’‘’‘’‘’‘’‘’‘’’* (cron / outbox)
- 선착순 이벤트 표준 패턴
5.2. ’‘‘결제 신뢰성’‘’‘’’*
시나리오 5 가지:
- ’‘‘결제 성공 → 콜백 늦게 옴 → 사용자 ’‘‘다시 결제 시도*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘결제 성공 → 콜백 옴 → ’‘‘Order 서비스 다운*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
- ’‘‘결제 성공 → 콜백 → ’‘‘배송 등록 ’‘‘중간에 ’‘‘예외’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘결제 ’‘‘성공 → Kafka 발행 실패’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘환불 → 일부만 처리됨’‘’‘’‘’‘’’*
해법 — Saga Pattern:
’‘‘여러 서비스 거치는 트랜잭션을 ’‘‘작은 단계로 ’‘‘쪼개고 ’‘‘각 단계마다 ’‘‘보상 (compensation) 정의’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
[정상 흐름]
1. Order 생성 (PENDING)
2. Inventory 차감
3. Payment 결제
4. Order 확정 (PAID)
5. Shipping 등록
[중간에 실패하면 보상]
1. Order 생성 (PENDING)
2. Inventory 차감 ✅
3. Payment 결제 ❌ 실패
↓
[보상] Inventory 복구 + Order CANCELLED
Choreography Saga (분산 이벤트) vs Orchestration Saga (중앙 코디네이터) — ’‘‘처리 복잡성 / 디버깅 트레이드오프’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
5.3. ’‘‘검색 품질’‘’’
’‘‘검색 = 매출 직결’‘’‘’‘’‘. ’‘‘100ms 지연 = ’‘‘매출 -1%*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ (Amazon 공식 자료).
진화 단계:
| 시대 | 방법 | 한계 |
|---|---|---|
| 2000s | RDB LIKE '%검색어%' |
처리량 낮음, 의미 매칭 불가 |
| 2010s | Elasticsearch BM25 | 키워드 매칭 좋음, ’‘‘*의도 파악 약함’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ |
| 2020s | dense embedding (BERT) | ’‘‘의미 매칭 좋음’‘’‘’‘’‘’‘*, 비용 높음 |
| 2023+ | Hybrid Search (BM25 + dense + RRF) | ’‘‘둘 다 잡음’‘’‘’‘’‘’‘’‘’‘’’ |
| 2024+ | Re-ranking (Cross-encoder) | ’‘‘정확도 +20-40%’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ |
| 2025+ | LLM 기반 ’‘‘쿼리 확장 / 의도 분류’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* | 컨텍스트 풍부 |
현대 이커머스 검색의 ’‘‘3 단계 파이프라인**’‘’‘’‘’‘’‘’‘’‘’‘*:
1. Retrieval (Top-K, K=100-500)
- Hybrid: ES BM25 + vector search
2. Re-ranking (Top-K → Top-20)
- Cross-encoder 모델
3. Business rules (Top-20 → Top-N)
- 재고 / 광고 / 개인화 가중치
6. ’‘‘한국 대표 사례 — ’‘‘공개 자료 기반’‘’‘’‘’‘’‘’‘’’*
6.1. 쿠팡
- AWS 기반 대규모 인프라
- Java / Spring + Kafka
- ’‘‘검색 RAG 도입’‘’‘’‘’‘’‘’’* (2024+, Coupang Engineering blog
Search Recall Improvement using LLM 2nd-stage Re-Ranking시리즈) - ’‘‘Amazon DNA’‘’‘’‘’‘’’* — ’‘‘Bar Raiser 면접, You Build It You Run It’‘’‘’‘’‘’‘’‘’‘’’
6.2. 네이버 쇼핑
- 자체 인프라 + HyperCLOVA X (한국어 LLM)
- ’‘‘검색의 한국어 ’‘‘의도 파악*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ 강점
- DEVIEW 2024 — ’‘‘HyperCLOVA X 를 활용한 쇼핑 사례’‘’‘’‘’‘’‘’’*
6.3. 무신사
- Spring + Elasticsearch + MySQL
- AI 스타일링 + 이미지 임베딩 — ’‘‘옷 사진 → 유사 상품’‘’‘’‘’’
- 무신사 기술블로그 — ’‘‘AI 검색 개편기’‘’‘’‘’‘’‘’’
6.4. 카카오톡스토어
- 카카오톡 통합 — ’‘‘사용자 폭증의 ’‘‘도전*’‘’‘’‘’‘’‘’‘’‘’‘’’
- IF Kakao 발표 — ’‘‘*MSA 전환 사례’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
6.5. 당근마켓
- 지역 기반 검색 — Geo Hash 인덱스
- ’‘‘Hyperlocal 의 기술 도전’‘’‘’‘’‘’‘’‘’‘’’
- ’‘‘당근 테크 블로그’‘’‘’‘’‘’‘’’
7. ’‘‘AI 가 ’‘‘이커머스를 ’‘‘어떻게 바꾸는가*’‘’‘’‘’‘’‘’‘’‘’‘’’
7.1. 검색의 ’‘‘자연어 화**’‘’‘’‘’‘’‘’’*
’‘‘“여름에 시원한 면 셔츠 화이트 컬러” 같은 ’‘‘자연어 쿼리’‘’‘’‘’‘’‘’’* 가 ’‘‘키워드 단위로 분해되지 않고 ’‘‘의미로 검색됨’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘Amazon Rufus, Walmart Sparky, Coupang 의 ’‘‘Search Recall* ’‘‘시리즈가 ’‘‘*대표 사례’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
7.2. ’‘‘Agentic Shopping’‘’‘’’*
’‘‘AI 가 ’‘‘사용자 대신 ’‘‘여러 사이트 비교 → 추천 → 구매까지 자동화’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘OpenAI Operator (2025), Claude Computer Use, Google Project Astra 같은 ’‘‘agent 형 인터페이스’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘이커머스 ’‘‘플랫폼이 ’‘‘agent-friendly API 제공해야 하는 시대**’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
7.3. ’‘‘개인화 ↑’‘’‘’’
’‘‘Two-Tower 모델 + 임베딩 기반 추천’‘’‘’‘’‘’‘’’ — ’‘‘Netflix, YouTube, Spotify 의 패턴이 ’‘‘이커머스로 확산’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘개인 history + 실시간 행동 + 글로벌 트렌드’‘’‘’‘’‘’‘’‘’’* 의 ’‘‘3 축 결합**’‘’‘’‘’‘’‘’‘*.
7.4. ’‘‘상담 자동화’‘’‘’‘’‘’‘’’*
’‘‘RAG 기반 챗봇이 ’‘‘FAQ + 주문 이력 + 정책 ’‘‘모두 참조하여 응답’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘1 차 상담 자동화율 60-80%’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
7.5. ’‘‘가격·재고 ’‘‘예측**’‘’‘’‘’‘’‘’‘’‘’’*
’‘‘ML 모델이 ’‘‘수요 예측 → 재고 사전 배치 → 동적 가격 조정’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘Amazon 의 ’‘‘Anticipatory Shipping 특허’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* (사용자가 주문하기 전에 ’‘‘미리 ’‘‘근처 창고로 ’‘‘옮김*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*).
8. ’‘‘흔한 실수 ’‘‘7 가지’‘’‘’‘’‘’‘’’*
- ’‘‘MSA 너무 일찍 분리’‘’‘’‘’‘’‘’’ — ’‘‘3 명 팀 + 7 개 서비스 = ’‘‘Distributed Monolith’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘모놀리스로 시작 → 경계 확실해진 후 분리*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘Outbox 안 쓰고 ’‘‘Kafka 직접 호출’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* — ’‘‘원자성 보장 안 됨**’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘Idempotency Key 빠짐’‘’‘’‘’‘’‘’‘’‘’’* — ’‘‘결제 중복 사고’‘’‘’‘’‘’‘’‘’‘’’
- ’‘‘DB 락만 ’‘‘무조건 ’‘‘사용’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ — ’‘‘Redis 원자 연산이 ’‘‘적합한 케이스 놓침’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘검색 = ES 만 ’‘‘사용’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ — ’‘‘dense embedding + re-rank 도입 늦음’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
- ’‘‘Read-Write 분리 ’‘‘없이 ’‘‘대규모 운영’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* — ’‘‘RDS 마스터 폭주 → 전체 다운’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- ’‘‘모니터링 없이 ’‘‘배포’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ — ’‘‘문제 발생 시 ’‘‘어디서 ’‘‘터졌는지 모름*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
9. ’‘‘이커머스 시스템의 ’‘‘다음 5 년*’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
- AI Agent 시대 — ’‘‘상품 페이지가 ’‘‘사람만 보는 게 아니라 ’‘‘agent 가 ’‘‘파싱’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘MCP 같은 표준 등장*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
- 결제 인프라 분산 — ’‘‘Stripe / 토스 / Wise 같은 ’‘‘글로벌 결제 추상 레이어*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
- 재고 실시간 통합 — ’‘‘Omnichannel (온라인 + 오프라인 통합 재고)
- 검색 → 대화 — ’‘‘대화형 쇼핑 인터페이스’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
- 물류 자동화 — ’‘‘로봇 창고 + 드론 / 자율주행 ’‘‘라스트 마일*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’*
10. ’‘‘결론 — ’‘‘시스템 = 사람의 ’‘‘약속의 ’‘‘기술적 표현’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’
이커머스 시스템 아키텍처는 ’‘‘기술이 아니라 ’‘‘사람의 약속의 ’‘‘기술적 표현’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘돈은 정확하게 흐른다’‘’‘’‘’‘’‘’’ + ’‘‘재고는 두 명에게 ’‘‘같이 가지 않는다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* + ’‘‘주문 상태는 ’‘‘역행하지 않는다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* — ’‘‘이 ’‘‘3 가지 약속을 ’‘‘컴퓨터로 표현’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ 한 것이 ’‘‘MSA + 이벤트 + Outbox + Saga + 멱등성*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘*.
’‘‘좋은 이커머스 시스템 = ’‘‘사용자가 ’‘‘복잡함을 ’‘‘못 느끼는 시스템’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. ’‘‘복잡함은 ’‘‘시스템 안에 박혀 있어야 한다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘사용자는 ’‘‘클릭 한 번에 ’‘‘주문이 가는 듯한 ’‘‘경험만 본다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘그 ’‘‘클릭 한 번 ’‘‘뒤에 ’‘‘15-30 개의 시스템이 ’‘‘동시에 ’‘‘살아 움직이는 것’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’* — ’‘‘그게 ’‘‘이커머스의 아름다움이자 어려움**’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
’‘‘AI 시대’‘’‘’’* — ’‘‘검색이 ’‘‘대화’’* 가 되고, ’‘‘결제가 ’‘‘agent 의 의사결정’‘’‘’‘’‘’‘’‘’‘’’ 이 되고, ’‘‘추천이 ’‘‘개인 큐레이션’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’ 이 되는 ’‘‘진화의 ’‘‘다음 단계’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘그러나 ’‘‘근본 약속 (돈·재고·시간) 은 ’‘‘변하지 않는다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘. *’‘‘이커머스 시스템 아키텍처의 ’‘‘미래는 ’‘‘그 위에서 ’‘‘진화한다’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘.
더 읽을 거리
- Designing Data-Intensive Applications — Martin Kleppmann (분산 시스템의 ’‘‘*현대 고전’‘’‘’‘’‘’‘’‘)
- Microservices Patterns — Chris Richardson (Saga, Outbox 등 패턴 카탈로그)
- Building Microservices — Sam Newman (MSA 도입 가이드)
- Patterns of Enterprise Application Architecture — Martin Fowler (트랜잭션·동시성·캐싱)
- Stripe API Documentation — ’‘‘Idempotency Key 의 ’‘‘산업 표준 구현*’‘’‘’‘’‘’‘’‘’‘’’*
- Amazon Builder’s Library — ’‘‘대규모 분산 시스템 운영 노하우’‘’‘’‘’‘’‘’‘’‘’’
- 한국 — Coupang Engineering Blog, NAVER DEVIEW, 카카오 IF Kakao, 토스 SLASH, 우아콘, 무신사 기술블로그, 당근마켓 테크 블로그
다음 글 예고: Outbox Pattern 실전 — *’‘‘Spring Boot + PostgreSQL + Kafka + Debezium 으로 ’‘‘Triple Idempotency 구현하기*’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’’