이벀트 μ†Œμ‹±μ„ μ μš©ν•˜κΈ° 전에 λ°˜λ“œμ‹œ κ³ λ―Όν•΄λ΄€μ–΄μ•Ό ν•  것듀

πŸ“š
Backend
2026.01.06

πŸ“š Overview

우리 μ„œλΉ„μŠ€μ˜ μ£Όλ¬Έ λ„λ©”μΈμ—λŠ” 쑰금 νŠΉμ΄ν•œ νŠΉμ§•μ΄ ν•˜λ‚˜ μžˆλ‹€.

일반적인 μƒν’ˆ μ£Όλ¬Έκ³Ό 달리 SNS λ§ˆμΌ€νŒ… 주문은 ν•˜λ‚˜μ˜ 주문이 μ—¬λŸ¬ 개의 μ‹€ν–‰ λ‹¨μœ„λ‘œ μͺΌκ°œμ§„λ‹€. 예λ₯Ό λ“€μ–΄ β€œμ’‹μ•„μš”β€ 주문이 λ“€μ–΄μ˜€λ©΄ μ‹œμŠ€ν…œ λ‚΄λΆ€μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 일듀이 순차적으둜 λ°œμƒν•œλ‹€.

  • 주문이 μƒμ„±λœλ‹€
  • 결제 및 포인트 차감이 이루어진닀
  • μ£Όλ¬Έ μƒνƒœκ°€ β€œμ§„ν–‰μ€‘β€μœΌλ‘œ λ³€κ²½λœλ‹€
  • μ’‹μ•„μš” μž‘μ—…μ΄ μ—¬λŸ¬ λ²ˆμ— λ‚˜λ‰˜μ–΄ μ‹€ν–‰λœλ‹€
  • 각 μ‹€ν–‰ κ²°κ³Όκ°€ κ°œλ³„ 둜그둜 κΈ°λ‘λœλ‹€
  • λͺ¨λ“  μž‘μ—…μ΄ λλ‚˜λ©΄ μ£Όλ¬Έ μƒνƒœκ°€ β€œμ™„λ£Œβ€λ‘œ λ³€κ²½λœλ‹€

이 κ³Όμ •μ—μ„œ μš°λ¦¬λŠ” μ£Όλ¬Έ ν•˜λ‚˜λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 수백, λ§Žκ²ŒλŠ” 수천 건의 μ‹€ν–‰ 둜그λ₯Ό μŒ“κ³  μžˆμ—ˆλ‹€.

λ˜ν•œ, 이 λ‘œκ·Έλ“€μ€ λ‹¨μˆœν•œ 디버깅 μš©λ„κ°€ μ•„λ‹ˆμ—ˆλ‹€. μš΄μ˜μ—μ„œλŠ” 이 둜그λ₯Ό κΈ°μ€€μœΌλ‘œ μ£Όλ¬Έ μ§„ν–‰ 상황을 νŒλ‹¨ν–ˆκ³  CS λŒ€μ‘μ—μ„œλ„ β€œμ–΄λ””κΉŒμ§€ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€β€ λ₯Ό μ„€λͺ…ν•˜λŠ” 근거둜 μ‚¬μš©λ˜κ³  μžˆμ—ˆλ‹€.

이 μ§€μ μ—μ„œ 이런 생각이 λ“€κΈ° μ‹œμž‘ν–ˆλ‹€.

이미 μš°λ¦¬λŠ” β€œλ¬΄μ—‡μ΄ μ–Έμ œ μΌμ–΄λ‚¬λŠ”μ§€β€λ₯Ό 이벀트처럼 κΈ°λ‘ν•˜κ³  μžˆμ§€ μ•Šμ€κ°€?

μ£Όλ¬Έ μƒνƒœ ν•˜λ‚˜λ‘œλŠ” μ„€λͺ…λ˜μ§€ μ•ŠλŠ” 흐름을 κ²°κ΅­ μˆ˜λ§Žμ€ νžˆμŠ€ν† λ¦¬ 둜그둜 λ³΄μ™„ν•˜κ³  μžˆμ—ˆκ³ , 이 λ‘œκ·Έλ“€μ΄ 사싀상 주문의 μ‹€μ œ μ§„ν–‰ 상황을 κ°€μž₯ μ •ν™•ν•˜κ²Œ 말해주고 μžˆμ—ˆλ‹€.

κ·Έλž˜μ„œ μš°λ¦¬λŠ” μ£Όλ¬Έ 도메인을 β€œν˜„μž¬ μƒνƒœβ€κ°€ μ•„λ‹ˆλΌ β€œλ°œμƒν•œ μΌλ“€μ˜ νλ¦„β€μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것이 더 μžμ—°μŠ€λŸ½μ§€ μ•Šμ„κΉŒ? λΌλŠ” 고민을 ν•˜κ²Œ λ˜μ—ˆλ‹€. 이 고민의 λμ—μ„œ λ“±μž₯ν•œ 선택지가 λ°”λ‘œ 이벀트 μ†Œμ‹±(Event Sourcing) μ΄μ—ˆλ‹€.

이 글은 비ꡐ적 λ³΅μž‘ν•œ λ„λ©”μΈμ—μ„œ μ™œ 이벀트 μ†Œμ‹±μ„ κ³ λ €ν•˜κ²Œ λ˜μ—ˆλŠ”μ§€, 그리고 μ‹€μ œλ‘œ μ μš©ν•΄λ³Έ λ’€ 무엇을 μ–»κ³  무엇을 λ‚΄λ €λ†“κ²Œ λ˜μ—ˆλŠ”μ§€λ₯Ό μ •λ¦¬ν•œ 기둝이닀.



1. 이벀트 μ†Œμ‹±μ„ 처음 μ ‘ν–ˆμ„ λ•Œ, κ°€μž₯ λ§€λ ₯적으둜 느껴쑌던 점


이벀트 μ†Œμ‹±μ΄ λ§€λ ₯적으둜 느껴쑌던 μ΄μœ λŠ” μƒˆλ‘œμš΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄μ–΄μ„œκ°€ μ•„λ‹ˆμ—ˆλ‹€. 이미 우리 μ‹œμŠ€ν…œμ€ μƒνƒœλ³΄λ‹€ β€œλ¬΄μŠ¨ 일이 μΌμ–΄λ‚¬λŠ”μ§€β€ 둜 더 λ§Žμ€ μ§ˆλ¬Έμ— λ‹΅ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

  • 이 주문은 μ§€κΈˆ μ–΄λ””κΉŒμ§€ μ§„ν–‰λ˜μ—ˆλŠ”κ°€?
  • λ§ˆμ§€λ§‰μœΌλ‘œ μ„±κ³΅ν•œ μž‘μ—…μ€ 무엇인가?
  • μ‹€νŒ¨κ°€ λ°œμƒν–ˆλ‹€λ©΄ μ–΄λŠ μ§€μ μ—μ„œ λ©ˆμ·„λŠ”κ°€?

이 μ§ˆλ¬Έλ“€μ— λŒ€ν•΄ μš°λ¦¬λŠ” μ£Όλ¬Έ ν…Œμ΄λΈ”μ˜ μƒνƒœ 값이 μ•„λ‹ˆλΌ μˆ˜λ§Žμ€ μ‹€ν–‰ 둜그λ₯Ό κΈ°μ€€μœΌλ‘œ νŒλ‹¨ν•˜κ³  μžˆμ—ˆλ‹€. 이벀트 μ†Œμ‹±μ€ 이런 상황을 μ „ν˜€ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ ν•΄μ„ν•˜κ²Œ λ§Œλ“€μ—ˆλ‹€.

이벀트 μ†Œμ‹±μ—μ„œλŠ” ν˜„μž¬ μƒνƒœκ°€ μ§„μ‹€μ˜ μ›μ²œμ΄ μ•„λ‹ˆλ‹€. β€œμ£Όλ¬Έμ΄ μ™„λ£Œλ˜μ—ˆλ‹€β€ λΌλŠ” μƒνƒœλŠ” 결과일 뿐이고, κ·Έ μƒνƒœμ— λ„λ‹¬ν•˜κΈ°κΉŒμ§€ λ°œμƒν•œ 사건듀이 μ§„μ§œ 기둝이 λœλ‹€.

  • 주문이 μƒμ„±λ˜μ—ˆλ‹€
  • ν¬μΈνŠΈκ°€ μ°¨κ°λ˜μ—ˆλ‹€
  • μ£Όλ¬Έ μƒνƒœκ°€ λ³€κ²½λ˜μ—ˆλ‹€
  • μ’‹μ•„μš” μž‘μ—…μ΄ μ‹€ν–‰λ˜μ—ˆλ‹€

이 각각을 ν•˜λ‚˜μ˜ 이벀트둜 닀루고 ν˜„μž¬ μƒνƒœλŠ” 이 μ΄λ²€νŠΈλ“€μ˜ λˆ„μ  결과둜 κ³„μ‚°ν•œλ‹€λŠ” κ°œλ…μ€ 이미 μš°λ¦¬κ°€ 운영 κ³Όμ •μ—μ„œ ν•˜κ³  있던 일과 크게 λ‹€λ₯΄μ§€ μ•Šμ•„ λ³΄μ˜€λ‹€.

였히렀 이벀트 μ†Œμ‹±μ€ κ·Έλ™μ•ˆ 흩어져 있던 λ‘œκ·Έμ™€ νžˆμŠ€ν† λ¦¬λ₯Ό μ‹œμŠ€ν…œμ˜ 쀑심 κ°œλ…μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬λŠ” ꡬ쑰처럼 λŠκ»΄μ‘Œλ‹€.

λ‘œκ·Έκ°€ 보쑰 μˆ˜λ‹¨μ΄ μ•„λ‹ˆλΌ μ§„μ‹€μ˜ μ›μ²œμ΄ 되고 μƒνƒœλŠ” κ²°κ³Όλ‘œμ„œ νŒŒμƒλ˜λŠ” ꡬ쑰. 이 점이 이벀트 μ†Œμ‹±μ„ 기술적으둜 λ©‹μžˆμ–΄ 보이기보닀 도메인 흐름에 잘 λ§žλŠ” μ„ νƒμ§€μ²˜λŸΌ 보이게 λ§Œλ“€μ—ˆλ‹€.



2. 이벀트 μ†Œμ‹± μ•„ν‚€ν…μ²˜λ₯Ό μ‹œλ²”μ μœΌλ‘œ λ„μž…ν•΄λ³΄λ©° λŠλ‚€ 점


이벀트 μ†Œμ‹±μ„ κ²€ν† ν•˜λ©΄μ„œ κ°€μž₯ λ¨Όμ € μ •λ¦¬ν•˜λ € ν–ˆλ˜ 건 β€œμ΄κ±Έ μ–΄λ””κΉŒμ§€ μ΄ν•΄ν•˜κ³  λ„μž…ν•  것인가” μ˜€λ‹€. 이벀트 μ†Œμ‹±μ€ λ‹¨μˆœνžˆ 이벀트λ₯Ό μ €μž₯ν•˜λŠ” 방식이 μ•„λ‹ˆλΌ μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό λ°”λΌλ³΄λŠ” 관점을 λ°”κΎΈλŠ” μ•„ν‚€ν…μ²˜μ— 가깝닀.

기본적인 κ΅¬μ‘°λŠ” 비ꡐ적 λͺ…ν™•ν–ˆλ‹€.

  • 이벀트 μ†Œμ‹±μ—μ„œλŠ” μ‹œμŠ€ν…œμ˜ ν˜„μž¬ μƒνƒœλ₯Ό 직접 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • Aggregateκ°€ λ‚΄λ¦° νŒλ‹¨μ˜ κ²°κ³Όλ₯Ό 이벀트둜 λ§Œλ“€μ–΄ Event Store에 μˆœμ„œλŒ€λ‘œ κΈ°λ‘ν•œλ‹€.
  • ν˜„μž¬ μƒνƒœλŠ” 이 μ΄λ²€νŠΈλ“€μ„ μž¬μƒν•΄ κ³„μ‚°ν•œλ‹€.
  • 이벀트 μˆ˜κ°€ λ§Žμ•„μ§ˆ 경우λ₯Ό λŒ€λΉ„ν•΄, 쀑간 κ²°κ³Όλ₯Ό Snapshot으둜 μ €μž₯ν•΄ μž¬μƒ λΉ„μš©μ„ 쀄인닀.

이 κ΅¬μ‘°μ—μ„œ μ€‘μš”ν•œ μ „μ œλŠ” ν•˜λ‚˜μ˜€λ‹€.

ν˜„μž¬ μƒνƒœκ°€ μ§„μ‹€μ˜ μ›μ²œμ΄ μ•„λ‹ˆλ‹€. 진싀은 항상 이벀트의 흐름에 μžˆλ‹€.

이 말이 μ˜λ―Έν•˜λŠ” λ°”λŠ” 생각보닀 μ»Έλ‹€. κΈ°μ‘΄ κ΅¬μ‘°μ—μ„œλŠ” μƒνƒœλ₯Ό λ¨Όμ € μ •ν•˜κ³  이 μƒνƒœλ₯Ό μ–΄λ–»κ²Œ λ³€κ²½ν• μ§€λ₯Ό κ³ λ―Όν–ˆλ‹€λ©΄ 이벀트 μ†Œμ‹±μ—μ„œλŠ” κ·Έ λ°˜λŒ€μ˜€λ‹€.

  • μ–΄λ–€ 일이 λ°œμƒν–ˆλŠ”κ°€
  • κ·Έ 일이 μ–΄λ–€ μˆœμ„œλ‘œ μΌμ–΄λ‚¬λŠ”κ°€
  • κ·Έ 결과둜 μ§€κΈˆμ˜ μƒνƒœκ°€ λ§Œλ“€μ–΄μ‘ŒλŠ”κ°€

μƒνƒœκ°€ 더 이상 기쀀이 μ•„λ‹ˆλΌ μ΄λ²€νŠΈλ“€μ˜ λˆ„μ  κ²°κ³Όκ°€ 기쀀이 λœλ‹€. 이 관점이 κ°€μž₯ 크게 μ™€λ‹Ώμ•˜λ˜ μ΄μœ λŠ” 도메인을 μ„€λͺ…ν•˜λŠ” 방식 μžμ²΄κ°€ λ‹¬λΌμ‘ŒκΈ° λ•Œλ¬Έμ΄λ‹€.

β€œμ£Όλ¬Έμ΄ μ™„λ£Œλ˜μ—ˆλ‹€.” λΌλŠ” 짧은 λ¬Έμž₯ λŒ€μ‹  β€œμ£Όλ¬Έμ΄ μƒμ„±λ˜μ—ˆκ³ , κ²°μ œκ°€ λ˜μ—ˆκ³ , μž‘μ—…μ΄ μ—¬λŸ¬ 번 μ‹€ν–‰λœ 끝에 μ™„λ£Œλ˜μ—ˆλ‹€.” λΌλŠ” νλ¦„μœΌλ‘œ 도메인을 μ„€λͺ…ν•΄μ•Όλ§Œ ν•œλ‹€. κ·Έλž˜μ„œ 이벀트 μ†Œμ‹±μ„ λ‹¨μˆœν•œ μ €μž₯ μ „λž΅μ΄ μ•„λ‹ˆλΌ, 도메인을 ν‘œν˜„ν•˜λŠ” λ°©λ²•μœΌλ‘œ μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ‹œλ²”μ μœΌλ‘œ 이벀트 μ†Œμ‹± ꡬ쑰λ₯Ό λ„μž…ν•΄λ³΄λ©° μš°λ¦¬λŠ” 이 μ•„ν‚€ν…μ²˜κ°€ μš”κ΅¬ν•˜λŠ” μ „μ œλ“€μ„ ν•˜λ‚˜μ”© μ²΄κ°ν•˜κΈ° μ‹œμž‘ν–ˆλ‹€.

  • μ΄λ²€νŠΈλŠ” ν•œ 번 기둝되면 μˆ˜μ •ν•  수 μ—†κ³ , 항상 λˆ„μ λœλ‹€.
  • λͺ…령을 μ²˜λ¦¬ν•˜λŠ” λͺ¨λΈκ³Ό 쑰회λ₯Ό λ‹΄λ‹Ήν•˜λŠ” λͺ¨λΈμ΄ ꡬ쑰적으둜 λΆ„λ¦¬λœλ‹€.
  • μƒνƒœ 쑰회λ₯Ό μœ„ν•΄ 이벀트 μŠ€νŠΈλ¦Όμ„ 기반으둜 Projection*을 μœ μ§€ν•΄μ•Ό ν•œλ‹€.

πŸ’‘ Projectionμ΄λž€?

κΈ°μ‘΄ CRUD λ°©μ‹μ—μ„œλŠ” ν…Œμ΄λΈ” ν•˜λ‚˜ μ‘°νšŒν•˜λ©΄ μƒνƒœκ°€ λ°”λ‘œ λ‚˜μ™”μ§€λ§Œ 이벀트 μ†Œμ‹±μ—μ„œλŠ” λ‹€λ₯΄λ‹€. Event Storeμ—λŠ” μ΄λ²€νŠΈλ“€λ§Œ μžˆκΈ°μ— β€œν˜„μž¬ μƒνƒœβ€λΌλŠ” κ°œλ…μ˜ ν…Œμ΄λΈ”μ΄ μ—†λ‹€.

μƒνƒœλŠ” 이벀트λ₯Ό λͺ¨λ‘ μž¬μƒν•΄μ•Όλ§Œ 계산 κ°€λŠ₯ν•œλ° 이걸 맀번 ν•˜λ©΄ λ„ˆλ¬΄ 느리고 λΉ„νš¨μœ¨μ μ΄λ‹€. 이λ₯Ό μœ„ν•΄ 이벀트 μŠ€νŠΈλ¦Όμ„ κ΅¬λ…ν•΄μ„œ μ‘°νšŒμ— μ΅œμ ν™”λœ ν˜•νƒœμ˜ 데이터λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄λ‘λŠ” 것을 Projection이라 ν•œλ‹€.

이 μ‹œμ λΆ€ν„° 이벀트 μ†Œμ‹±μ€ β€œμ μš©ν• μ§€ 말지” 의 λ¬Έμ œκ°€ μ•„λ‹ˆλΌ, β€œμ΄ μ „μ œλ₯Ό 감당할 수 μžˆλŠ” 도메인인가”λ₯Ό λ¬»λŠ” 문제둜 λ°”λ€ŒκΈ° μ‹œμž‘ν–ˆλ‹€.



3. 이벀트 μ†Œμ‹±μ€ μž₯점만큼의 λΉ„μš©μ„ μš”κ΅¬ν–ˆλ‹€


이벀트 μ†Œμ‹±μ„ μ‹œλ²”μ μœΌλ‘œ μ μš©ν•΄λ³΄λ©΄μ„œ κ°€μž₯ λ¨Όμ € λŠλ‚€ 건 β€œμ΄ κ΅¬μ‘°λŠ” λ‹¨μˆœνžˆ μ €μž₯ 방식을 λ°”κΎΈλŠ” λ¬Έμ œκ°€ μ•„λ‹ˆλ‹€β€ λΌλŠ” μ μ΄μ—ˆλ‹€.

이벀트 μ†Œμ‹±μ€ 섀계 λ‹¨κ³„μ—μ„œλΆ€ν„° μ—¬λŸ¬ μ „μ œλ₯Ό μžμ—°μŠ€λŸ½κ²Œ μš”κ΅¬ν•œλ‹€.

λ¨Όμ €, μ΄λ²€νŠΈλŠ” ν•œ 번 기둝되면 μˆ˜μ •ν•  수 μ—†λ‹€. 잘λͺ»λœ 이벀트λ₯Ό μ§€μš°κ±°λ‚˜ κ³ μΉ˜λŠ” λŒ€μ‹ , 항상 μƒˆλ‘œμš΄ 이벀트둜 보정해야 ν•œλ‹€. 이건 데이터 κ΄€μ μ—μ„œλŠ” ꡉμž₯히 μ •μ§ν•˜μ§€λ§Œ 섀계 λ‹¨κ³„μ—μ„œ 훨씬 μ‹ μ€‘ν•œ νŒλ‹¨μ„ μš”κ΅¬ν•œλ‹€.

또 ν•˜λ‚˜λŠ” 이벀트 μŠ€ν‚€λ§ˆμ˜ λ¬΄κ²Œμ˜€λ‹€. μ΄λ²€νŠΈλŠ” λ‹¨μˆœν•œ λ‘œκ·Έκ°€ μ•„λ‹ˆλΌ λ„λ©”μΈμ—μ„œ μ‹€μ œλ‘œ μΌμ–΄λ‚œ 일을 μ„€λͺ…ν•˜λŠ” 곡식 기둝이 λœλ‹€. ν•œ 번 μ •μ˜ν•œ 이벀트 μŠ€ν‚€λ§ˆλŠ” Projectionμ΄λ‚˜ λ‹€λ₯Έ μ†ŒλΉ„μžλ“€μ΄ κ·ΈλŒ€λ‘œ μ˜μ‘΄ν•˜κ²Œ 되고 변경이 ν•„μš”ν•΄μ§ˆμˆ˜λ‘ κ·Έ 영ν–₯ λ²”μœ„λ„ ν•¨κ»˜ 컀진닀.

읽기 λͺ¨λΈμ„ λ”°λ‘œ 관리해야 ν•œλ‹€λŠ” 점도 생각보닀 λΆ€λ‹΄μ΄μ—ˆλ‹€. 이벀트λ₯Ό μ €μž₯ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” λ°”λ‘œ 화면에 보여쀄 μƒνƒœλ₯Ό λ§Œλ“€ 수 μ—†κΈ° λ•Œλ¬Έμ— 이벀트λ₯Ό μ†ŒλΉ„ν•΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” Projection을 λ³„λ„λ‘œ μ„€κ³„ν•˜κ³  μœ μ§€ν•΄μ•Ό ν–ˆλ‹€.

κ²°κ΅­ 이런 μ§ˆλ¬Έλ“€μ΄ 계속 λ”°λΌλΆ™μ—ˆλ‹€.

  • 이 도메인은 이벀트 λΆˆλ³€μ„±μ„ λκΉŒμ§€ 감당할 수 μžˆλŠ”κ°€?
  • 이벀트 μŠ€ν‚€λ§ˆ λ³€κ²½ λΉ„μš©μ„ 받아듀일 수 μžˆλŠ”κ°€?
  • 읽기 λͺ¨λΈκ³Ό μ“°κΈ° λͺ¨λΈμ„ λΆ„λ¦¬ν•΄μ„œ 관리할 만큼의 λ³΅μž‘λ„κ°€ μžˆλŠ”κ°€?

이 μ§ˆλ¬Έλ“€μ— μ„ λœ» β€œκ·Έλ ‡λ‹€β€ κ³  λ‹΅ν•˜κΈ° μ–΄λ €μš΄ μˆœκ°„λ“€μ΄ λŠ˜μ–΄λ‚˜λ©΄μ„œ 이벀트 μ†Œμ‹±μ€ 점점 β€œλͺ¨λ“  도메인에 μ μš©ν•  κΈ°λ³Έ ꡬ쑰” κ°€ μ•„λ‹ˆλΌ β€œμ‘°κ±΄μ΄ λ§žλŠ” κ²½μš°μ—λ§Œ 선택해야 ν•  μ•„ν‚€ν…μ²˜β€ 둜 보이기 μ‹œμž‘ν–ˆλ‹€.

ꡬ쑰 μžμ²΄λŠ” λΆ„λͺ… λ§€λ ₯μ μ΄μ—ˆμ§€λ§Œ, κ·Έ λ§€λ ₯을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 감당해야 ν•  λΉ„μš©λ„ 같이 바라봐야 ν•œλ‹€λŠ” κ±Έ 이 μ‹œμ μ—μ„œ μ²΄κ°ν•˜κ²Œ λ˜μ—ˆλ‹€.



4. λͺ¨λ“  도메인에 같은 ꡬ쑰λ₯Ό μ μš©ν•˜μ§€ μ•ŠκΈ°λ‘œ ν–ˆλ‹€


λͺ¨λ“  도메인에 이벀트 μ†Œμ‹±μ„ λ„μž…ν–ˆλ‹€κ°€ κ±·μ–΄λ‚Έ κ²½ν—˜ 이후, 우리 νŒ€μ€ μ•„ν‚€ν…μ²˜λ₯Ό λ°”λΌλ³΄λŠ” 기쀀을 쑰금 λ‹€λ₯΄κ²Œ μ„Έμš°κ²Œ λ˜μ—ˆλ‹€. β€œμ΄ ꡬ쑰가 쒋은가?” κ°€ μ•„λ‹ˆλΌ β€œμ΄ 도메인에 이 ꡬ쑰가 ν•„μš”ν•œκ°€?” λ₯Ό λ¨Όμ € 묻기둜 ν•œ 것이닀.

ν˜„μž¬ 우리 νŒ€μ€ MSA ν™˜κ²½μ—μ„œ μ—¬λŸ¬ 도메인을 μš΄μ˜ν•˜κ³  μžˆλ‹€. κ·Έ κ³Όμ •μ—μ„œ λͺ¨λ“  도메인에 이벀트 μ†Œμ‹±μ„ λ™μΌν•˜κ²Œ μ μš©ν•˜μ§€ μ•Šκ³  λ„λ©”μΈμ˜ 성격에 따라 μ„œλ‘œ λ‹€λ₯Έ ꡬ쑰λ₯Ό μ„ νƒν•˜κ³  μžˆλ‹€.

도메인 νžˆμŠ€ν† λ¦¬κ°€ 핡심 κ°€μΉ˜μΈ μ˜μ—­μ—μ„œλŠ” 이벀트 μ†Œμ‹±μ„ μœ μ§€ν•˜κ³ , ν˜„μž¬ μƒνƒœλ§Œ λͺ…ν™•ν•˜λ©΄ μΆ©λΆ„ν•œ μ˜μ—­μ—μ„œλŠ” 일반적인 CQRS νŒ¨ν„΄λ§Œ μ μš©ν•΄ λͺ¨λΈμ„ λ‹¨μˆœν™”ν–ˆλ‹€.

예λ₯Ό λ“€μ–΄, 이벀트의 μˆœμ„œμ™€ λˆ„μ  νžˆμŠ€ν† λ¦¬κ°€ λΉ„μ¦ˆλ‹ˆμŠ€ 의미λ₯Ό κ°–λŠ” λ„λ©”μΈμ—μ„œλŠ” 이벀트 μ†Œμ‹±μ΄ λΆ„λͺ…ν•œ μž₯점을 μ œκ³΅ν•œλ‹€. λ°˜λŒ€λ‘œ, μƒνƒœ 전이가 λ‹¨μˆœν•˜κ³  κ³Όκ±° λ³€κ²½ 이λ ₯이 큰 의미λ₯Ό κ°–μ§€ μ•ŠλŠ” κ²½μš°μ—λŠ” 이벀트 μ†Œμ‹±μ΄ 였히렀 λ³΅μž‘λ„λ₯Ό ν‚€μš°λŠ” 선택이 될 수 μžˆμ—ˆλ‹€.

μ΄λ ‡κ²Œ λ„λ©”μΈλ³„λ‘œ ꡬ쑰λ₯Ό 달리 κ°€μ Έκ°€λ©΄μ„œ λŠλ‚€ 점은 λΆ„λͺ…ν–ˆλ‹€. μ•„ν‚€ν…μ²˜λŠ” 일관성보닀 적합성이 더 μ€‘μš”ν•˜λ‹€λŠ” 사싀이닀.

λͺ¨λ“  도메인을 같은 λ°©μ‹μœΌλ‘œ λ§žμΆ”λŠ” 것이 μ•„λ‹ˆλΌ 각 도메인이 ν•΄κ²°ν•΄μ•Ό ν•˜λŠ” 문제의 성격에 맞좰 이벀트 μ†Œμ‹±μ„ μ„ νƒν•˜κ±°λ‚˜, ν˜Ήμ€ μ„ νƒν•˜μ§€ μ•ŠλŠ” 것.

이 κ²½ν—˜ μ΄ν›„λ‘œ 우리 νŒ€μ€ μ•„ν‚€ν…μ²˜λ₯Ό β€œλ„μž…ν•˜λŠ” 것” 보닀 μ–Έμ œ μ“°κ³ , μ–Έμ œ μ“°μ§€ μ•Šμ„μ§€λ₯Ό κ²°μ •ν•˜λŠ” 과정을 더 μ€‘μš”ν•˜κ²Œ 닀루고 μžˆλ‹€.



πŸ€” Understanding

이벀트 μ†Œμ‹±μ„ λ„μž…ν–ˆλ‹€κ°€ λ‹€μ‹œ 일뢀 λ„λ©”μΈμ—μ„œ κ±·μ–΄λ‚΄λŠ” 과정은 λ‹¨μˆœνžˆ μ•„ν‚€ν…μ²˜ ν•˜λ‚˜λ₯Ό μ„ νƒν–ˆλ‹€κ°€ μ‹€νŒ¨ν•œ κ²½ν—˜μ€ μ•„λ‹ˆμ—ˆλ‹€.

였히렀, β€œμ–΄λ–€ ꡬ쑰가 더 μ’‹μ•„ λ³΄μ΄λŠ”κ°€β€ 보닀 β€œμ΄ 도메인이 정말 ν•„μš”λ‘œ ν•˜λŠ” 게 무엇인가” λ₯Ό 더 μ§„μ§€ν•˜κ²Œ κ³ λ―Όν•˜κ²Œ λ§Œλ“  κ³„κΈ°μ˜€λ‹€.

이벀트 μ†Œμ‹±μ€ λΆ„λͺ… κ°•λ ₯ν•œ 도ꡬ닀. νžˆμŠ€ν† λ¦¬κ°€ κ³§ λ„λ©”μΈμ˜ κ°€μΉ˜κ°€ λ˜λŠ” μ˜μ—­μ—μ„œλŠ” λ‹€λ₯Έ κ΅¬μ‘°λ‘œλŠ” λŒ€μ²΄ν•˜κΈ° μ–΄λ €μš΄ μž₯점을 κ°€μ§„λ‹€. ν•˜μ§€λ§Œ 그만큼 λ§Žμ€ μ „μ œμ™€ μ±…μž„μ„ ν•¨κ»˜ μš”κ΅¬ν•˜λŠ” ꡬ쑰이기도 ν–ˆλ‹€.

이 κ²½ν—˜ μ΄ν›„λ‘œ 우리 νŒ€μ€ μ•„ν‚€ν…μ²˜λ₯Ό ν•˜λ‚˜μ˜ μ •λ‹΅μœΌλ‘œ 두지 μ•Šκ²Œ λ˜μ—ˆλ‹€. MSA ν™˜κ²½μ—μ„œ 각 λ„λ©”μΈμ˜ 성격에 맞좰 이벀트 μ†Œμ‹±μ„ μ„ νƒν•˜κΈ°λ„ ν•˜κ³ , λ‹¨μˆœν•œ CQRS둜 μΆ©λΆ„ν•˜λ‹€κ³  νŒλ‹¨ν•˜κΈ°λ„ ν•œλ‹€.

μ§€κΈˆ 돌이켜보면, κ°€μž₯ 큰 μˆ˜ν™•μ€ β€œμ΄λ²€νŠΈ μ†Œμ‹±μ„ μΌλ‹€β€λŠ” 사싀이 μ•„λ‹ˆλΌ 직접 써보고, μœ μ§€ν•΄λ³΄κ³ , λ‹€μ‹œ 되돌릴 수 μžˆμ—ˆλ˜ κ²½ν—˜ μžμ²΄μ˜€λ˜ 것 κ°™λ‹€.

μ•„ν‚€ν…μ²˜λŠ” λ„μž…ν•˜λŠ” 것보닀 μ–Έμ œ μ“°κ³ , μ–Έμ œ μ“°μ§€ μ•Šμ„μ§€λ₯Ό κ²°μ •ν•˜λŠ” 일이 더 μ–΄λ ΅λ‹€. 이번 κ²½ν—˜μ€ κ·Έ νŒλ‹¨μ„ 쑰금 더 λ‹¨λ‹¨ν•˜κ²Œ λ§Œλ“€μ–΄μ£Όμ—ˆλ‹€.

Previous
AI μ‹œλŒ€μ— λ‹€μ‹œ λ– μ˜¬λ¦¬κ²Œ 된 "μž₯인 μ •μ‹ "μ΄λΌλŠ” κΈ°μ€€
πŸ“–Book
2026.01.04
Next
Map에 λ“œλ””μ–΄ 생긴 getOrInsert: β€œμ—†μœΌλ©΄ λ„£κ³ , 있으면 꺼내기”
πŸ“šJavaScript
2026.02.15