Transactional Outbox Message (Kotlin) - Open Source

AlbertΒ·2025λ…„ 2μ›” 11일

πŸ€” What

Transactional Outbox Pattern 은 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœ λ³€κ²½κ³Ό 이벀트 λ°œν–‰μ˜ μ›μžμ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•œ 섀계 νŒ¨ν„΄μž…λ‹ˆλ‹€. μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ—…λ°μ΄νŠΈμ™€ 이벀트 λ°œν–‰μ„ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ 데이터 일관성을 μœ μ§€ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.

μžμ„Έν•œ λ‚΄μš©: Micriservices Pattern: Transactional Outbox

μž₯점:

  • 데이터 일관성 μœ μ§€: λ°μ΄ν„°λ² μ΄μŠ€ μ—…λ°μ΄νŠΈμ™€ 이벀트 λ°œν–‰μ„ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ 데이터 일관성을 보μž₯ν•©λ‹ˆλ‹€.
  • μ‹ λ’°μ„± ν–₯상: λ„€νŠΈμ›Œν¬ 였λ₯˜λ‚˜ μ‹œμŠ€ν…œ μž₯μ•  μ‹œμ—λ„ Outbox ν…Œμ΄λΈ”μ— μ €μž₯된 이벀트λ₯Ό 톡해 μž¬μ‹œλ„κ°€ κ°€λŠ₯ν•˜μ—¬ 신뒰성을 λ†’μž…λ‹ˆλ‹€.
  • ν™•μž₯μ„±: 이벀트 λ°œν–‰ λ‘œμ§μ„ λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ λΆ„λ¦¬ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ ν™•μž₯μ„±κ³Ό μœ μ§€ λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

단점:

  • λ³΅μž‘μ„± 증가: Outbox ν…Œμ΄λΈ”κ³Ό 이벀트 λ°œν–‰ ν”„λ‘œμ„ΈμŠ€λ₯Ό μΆ”κ°€λ‘œ 관리해야 ν•˜λ―€λ‘œ μ‹œμŠ€ν…œμ˜ λ³΅μž‘μ„±μ΄ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ§€μ—° κ°€λŠ₯μ„±: 이벀트 λ°œν–‰μ΄ λΉ„λ™κΈ°λ‘œ μ²˜λ¦¬λ˜λ―€λ‘œ, μ‹€μ‹œκ°„ μ²˜λ¦¬κ°€ ν•„μš”ν•œ 경우 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ₯Έ How

Transactional Outbox Pattern κ΅¬ν˜„ 방식

μœ„μ™€ 같은 방법 쀑 Middle Ware Publisher 방법을 μ±„νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ”, μš°μ„  κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.(Simple is Best) κ°€μž₯ κ°„λ‹¨ν•œ 방법은 Polling Publisher μ΄μ§€λ§Œ ν•΄λ‹Ή 방식은 MSA ν™˜κ²½μ—μ„œ μš”μ²­μ„ νŠΈλž˜ν‚Ήν•˜λŠ” κ³Όμ •μ—μ„œ νŠΈλž˜ν‚Ήμ΄ 끊길 수 μžˆλ‹€λŠ” 문제점이 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— Middle Ware Publisher 방식을 ν†΅ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ 라이브러리λ₯Ό κ΅¬ν˜„ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

Concept

  • Kafka Message λ°œν–‰λŒ€μ‹ , OutboxMessage 에 λ°œν–‰λ©”μ„Έμ§€λ“€μ„ μ €μž₯ν•œλ‹€.
  • λ§Œμ•½, Transactional κ³Όμ • 쀑 μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€λ©΄ λ‹€λ₯Έ 도메인듀과 λ™μΌν•˜κ²Œ OutboxMessage 도 둀백처리 λ˜μ–΄ μ›μžμ„±μ„ 보μž₯ν•œλ‹€
  • λ°œν–‰μ€, Interceptor ν˜Ήμ€ AOP λ₯Ό ν†΅ν•΄μ„œ λ°œν–‰ν•œλ‹€

Library

μžμ„Έν•œ κ΅¬ν˜„μ‚¬ν•­μ€ μ•„λž˜ github μ£Όμ†Œλ₯Ό ν†΅ν•΄μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°λ‘ 

MSA ν™˜κ²½μ—μ„œ νŠΈλžœμž­μ…˜μ„ 보μž₯ν•œλ‹€λŠ” 것은 맀우 λ³΅μž‘ν•œ μΌμž…μ΄λ‹€. ν•΄λ‹Ή 라이브러리λ₯Ό ν†΅ν•΄μ„œ κ°œλ°œμžκ°€ νŽΈλ¦¬ν•˜κ²Œ κ°œλ°œν•  수 μžˆλŠ” ν™˜κ²½μ΄ λ˜μ—ˆμœΌλ©΄ ν•©λ‹ˆλ‹€.

PS. ν•΄λ‹Ή μ†ŒμŠ€μ— μΆ”κ°€λ‘œ κ°œμ„ ν• μ μ΄ μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λ¬Έμ˜λ‚¨κ²¨μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

profile
개발 λΈ”λ‘œκ·Έ

0개의 λŒ“κΈ€