← 카탈로그

신뢰성 있는 비동기 부수효과 — 커밋과 외부작용 연결

architecturevcraft

"숙제를 다 한 뒤, 잊지 않고 엄마한테 확인 도장을 받는 법" 이에요. 할 일(DB 저장)을 끝낸 다음에 따라오는 뒷일(메일 보내기, 정산하기, 알림 쏘기)을 하나도 빠뜨리지 않고, 그렇다고 두 번 하지도 않게 처리하는 방법이에요.

비유: 편지 부치기 ✉️

방금 친구에게 줄 편지를 다 썼다고 해봐요. 이제 이걸 부쳐야 해요. 부치는 방법이 두 가지 있어요.

  • 그때그때 직접 뛰어가기 — 편지 쓰자마자 우체국까지 냅다 뛰어가서 부쳐요. 빠르지만, 뛰다가 넘어지면(내 컴퓨터가 갑자기 꺼지면) 편지가 그냥 사라져요. 아무도 몰라요.
  • 우체통에 넣어두기 (outbox) — 편지를 일단 우리 집 앞 빨간 우체통에 넣어둬요. 집배원 아저씨가 정해진 시간마다 와서 가져가요. 혹시 못 가져갔으면 다음번에 또 가져가요. 느긋하지만, 편지가 절대 안 사라져요.

여기서 우체통이 바로 outbox(아웃박스) 예요. "보낼 것"을 안전한 곳에 먼저 적어두는 상자죠.

왜 우체통이 안전할까 (흐름)

핵심은 편지 내용과 "부칠 거야"라는 메모를 같이, 한 번에 적어두는 거예요. 숙제 공책에 답을 적을 때 "이거 엄마한테 보여주기"도 같은 페이지에 적는 것처럼요. 그러면 둘 중 하나만 되고 하나는 안 되는 일이 없어요.

메모에 "완료" 도장을 찍기 전까지는 계속 남아있으니까, 실패해도 다음 집배원이 또 챙겨요. 이게 "빠짐없이" 의 비결이에요.

두 명이 동시에 집으면 안 돼요 (중복 방지)

만약 집배원이 두 명이라면(서버가 여러 대라면), 같은 편지를 둘 다 집어서 똑같은 걸 두 번 부칠 수도 있어요. 그래서 편지 하나를 집을 때 "이건 내가 가져간다"고 딱지를 붙여서, 다른 사람은 그 편지를 못 건드리게 해요.

빠른 길도 있어요 (트레이드오프)

우체통은 안전하지만 좀 느려요(집배원 올 때까지 기다림). 그리고 상자·집배원 관리도 해야 해요.

그래서 안 없어져도 크게 상관없는 편지(예: "오늘 이벤트 있어요~" 같은 대량 광고 메일)는 그냥 바로 뛰어가서 부치기도 해요. 조금 사라져도 괜찮고, 대신 빠르니까요.

  • 꼭 도착해야 하는 것 (결제 → 정산, 주문 → 영수증) → 우체통 방식. 느려도 안전.
  • 좀 없어져도 되는 것 (대량 알림 메일) → 그때그때 방식. 빠르고 가벼움.

한 가지 공통 규칙: 뒷일은 반드시 다른 일꾼에게 시켜야 해요. 내가 나한테 "이거 나중에 해"라고 혼잣말하면 그 일꾼이 못 알아듣거든요(자기 자신 호출 함정).

핵심만 다시

  1. 할 일을 끝낸 뒤에 따라오는 뒷일(메일·알림·정산)을 처리하는 이야기예요.
  2. 우체통(outbox) 에 "보낼 것"을 먼저 적어두면, 실패해도 다음번에 또 챙겨서 안 사라져요.
  3. 여러 일꾼이 있으면 딱지를 붙여 같은 걸 두 번 안 부치게 해요.
  4. 안 없어져도 되는 건 그냥 바로 보내서 빠르게 — 안전함과 빠름 중 골라요.

더 자세한 진짜 코드·설계는 옆의 개요 / Variants / Apply Recipe 탭에서 볼 수 있어요.