538. 이벤트 기반 아키텍처 (EDA) - 이벤트 생산자, 브로커, 소비자
핵심 인사이트 (3줄 요약)
- 본질: 이벤트 기반 아키텍처(EDA, Event-Driven Architecture)는 "명령(Command: A야 B 해라!)" 중심의 수직적 동기 통신을 버리고, "사건(Event: 나 C 했다!)"을 허공에 외치면 관심 있는 자들이 알아서 주워 먹는 수평적 비동기 통신 생태계로 시스템의 뇌 구조 자체를 뜯어고치는 탈중앙화 철학이다.
- 가치: 마이크로서비스(MSA) 50개가 서로 IP 주소를 외우고 전화를 돌리다(API 호출) 다 같이 타임아웃(Time-out)으로 뻗어버리는 강결합(Tight Coupling)의 지옥을 종식시킨다. **송신자는 던지고 잊고(Fire-and-Forget), 수신자는 자기 속도대로 처리(Asynchronous)**함으로써 극한의 확장성(Scale-out)과 100% 독립적인 생존력을 쟁취한다.
- 융합: 이벤트 생산자(Producer), 우체국 역할을 하는 거대한 이벤트 브로커(Kafka, RabbitMQ), 그리고 이벤트를 씹어먹는 소비자(Consumer)의 3위 일체로 융합되며, 현대 클라우드의 **서버리스(Serverless FaaS)**와 가장 완벽하게 톱니바퀴가 맞물려 들어가는 차세대 인프라의 마스터키다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: EDA(Event-Driven Architecture)는 상태(State)가 변한 '과거의 사실(Event)'을 중심으로 시스템이 돌아간다. 결제 서버가 배송 서버에게
sendDelivery()라고 명령(Command)하지 않는다. 결제 서버는 그냥 자기가 한 일,[결제완료_이벤트]딱지를 브로커(게시판)에 틱 던지고 끝이다. 배송 서버는 심심할 때 게시판을 쓱 보고 "오! 결제완료네? 택배 싸야지~" 하고 스스로 일(Trigger)을 시작한다. 서로 얼굴도 모르고 이름도 모르는 완벽한 남남이다. -
필요성: 쿠팡에서 고객이 결제 버튼을 눌렀다. 백엔드에서 1) DB 잔고 차감, 2) 쿠폰 회수, 3) 판매자 알림, 4) 영수증 메일 발송, 5) 빅데이터 로그 적재... 이 5가지 일을 REST API(동기)로 연달아 불렀다. 만약 4번(메일 서버)이 3초 멈추면? 결제 완료 화면이 3초 늦게 뜬다. 최악은 5번(빅데이터)이 터졌다고 결제 전체가
Rollback쳐져서 고객이 돈을 못 쓰는 코미디가 벌어진다. "핵심 로직(결제)이 쩌리 로직(메일, 로그)의 장애에 발목 잡혀 회사 매출이 날아가는 이 끔찍한 종속성을 박살 내기 위해" 중간에 쿠션(브로커)을 대고 책임을 완전히 찢어버리는 EDA가 구원투수로 등판했다. -
💡 비유: 이벤트 기반 아키텍처는 식당의 **'주문 전표 회전판(Order Ticket Carousel)'**과 똑같습니다. 옛날 방식(동기)은 웨이터(생산자)가 주방장(소비자)을 찾아가서 요리가 끝날 때까지 10분 동안 옆에 우두커니 서서 기다렸습니다(스레드 블로킹). EDA 방식은 웨이터가 주문을 종이(Event)에 써서 주방 앞 돌림판(Broker)에 꽂아놓고 1초 만에 홀로 돌아가 다음 손님을 받습니다(Fire-and-Forget). 주방장들은 돌림판에 꽂힌 종이를 자기들 요리 속도에 맞춰 쓱쓱 빼가서 볶습니다. 요리사가 배탈이 나서 쓰러져도 웨이터는 전혀 타격을 안 받고 손님을 1,000명이나 더 받을 수 있는 완벽한 완충(Buffer) 지대입니다.
-
등장 배경 및 발전 과정:
- 요청-응답 (Request-Reply)의 낭만 시대: 모놀리식 구조에선 함수 호출 1번이면 끝났으므로 비동기나 이벤트 큐 따위는 필요 없었다.
- EAI와 ESB (2000년대): 대기업에서 낡은 서버 10대를 묶으려고 엔터프라이즈 서비스 버스(ESB)라는 뚱뚱하고 멍청한 중앙 통신관을 뒀다. 속도가 개판이었다.
- MSA와 멍청한 파이프, 똑똑한 엔드포인트 (Smart Endpoints, Dumb Pipes): 서버가 50개로 찢어지자, 중앙에 똑똑한 통역사를 두지 말고, 1초에 100만 건을 쌩으로 실어 나르는 **"무식하게 빠르고 거대한 우체국(Kafka Broker)"**과, 각자 알아서 해석해 먹는 **"똑똑한 컨슈머(Microservice)"**로 역할을 뒤집어버리면서 EDA가 천하를 통일했다.
-
📢 섹션 요약 비유: 동기 통신이 **'전화(Phone Call)'**라면, EDA는 **'유튜브 구독(Subscription)'**입니다. 내가 전화를 걸면 상대가 무조건 받아야 하고, 못 받으면 대화가 터집니다(동기). 하지만 유튜버(생산자)는 영상을 채널(브로커)에 띡 올려놓고 잡니다. 구독자 100만 명(소비자)은 다음 날 아침에 보든, 1년 뒤에 보든 각자 알아서 영상을 꺼내 봅니다. 유튜버는 구독자가 1명인지 1억 명인지 전혀 알 필요 없이 쾌적하게 영상을 찍어 올리기만 하면 되는 미친 확장성입니다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
1. EDA의 위대한 3대 액터 (생산자, 브로커, 소비자)
이 세 놈은 서로를 절대 믿지 않고(Zero Trust), 자기 일만 하고 퇴근한다.
- 이벤트 생산자 (Event Producer)
- 역할: 사건(Fact)을 만드는 놈.
OrderService가 결제를 끝내면,{"orderId": 123, "status": "PAID"}라는 텍스트(JSON)를 뭉쳐서 허공으로 집어 던진다. - 철학: "나 편지 던졌으니까 내 할 일 끝! 누가 이 편지를 주워가든, 우체국이 폭파되든 난 0.001초 만에 200 OK 띄우고 퇴근한다!" (Decoupling)
- 역할: 사건(Fact)을 만드는 놈.
- 이벤트 브로커 (Event Broker) 💥 핵심 심장
- 역할: 생산자가 던진 편지를 찰나의 순간에 낚아채서, 절대 잃어버리지 않게 하드디스크나 메모리에 콱 박아두는 거대한 **완충 댐(Buffer)**이자 우체국. (예: Apache Kafka, RabbitMQ)
- 철학: 소비자 서버가 오늘 하루 종일 죽어 있어도, 편지를 쓰레기통에 버리지 않고 1주일 동안 고이 모셔둔 채 소비자가 살아나길 기다려준다(내구성, Durability).
- 이벤트 소비자 (Event Consumer)
- 역할: 브로커에서 편지를 꺼내 가는 놈.
EmailService나StockService. - 철학: "주문 서버가 언제 편지를 썼는지는 관심 없어. 난 내 CPU가 남을 때마다 브로커에 찾아가서 편지 10개씩 뭉텅이로 꺼내와서 처리할 거야(Pull Model)."
- 역할: 브로커에서 편지를 꺼내 가는 놈.
2. 명령(Command) vs 이벤트(Event)의 철학적 차이
이걸 헷갈리면 이름만 EDA고 실제론 동기식 스파게티를 짜게 된다. 면접 단골 타겟.
| 척도 | 명령 (Command) - SendEmail | 이벤트 (Event) - UserRegistered |
|---|---|---|
| 시제 | 미래형 (행동 지시) | 과거형 (이미 벌어진 명백한 팩트) |
| 송신자의 의도 | "야, 이메일 서버! 당장 가입 축하 메일 쏴!" | "난 방금 가입 처리를 완료했어. 끝." |
| 의존성 (Coupling) | 송신자가 수신자(이메일 서버)의 존재를 반드시 알아야 함 (강결합). | 송신자는 이 세상에 이메일 서버가 있는지 없는지조차 모름 (느슨한 결합). |
| 확장성 | 나중에 '포인트 적립' 서버가 생기면, 송신자 코드를 뜯어고쳐서 1줄 더 쏴줘야 함. | '포인트 적립' 서버가 알아서 카프카에 빨대만 꽂고 주워 먹음. 송신자 코드는 영원히 안 고침. |
- 📢 섹션 요약 비유: **명령(Command)**은 엄마가 방에 들어와서 **"철수야 방 청소해!"**라고 찍어서 지시하는 겁니다. 철수가 없으면 엄마는 헛소리한 게 됩니다. **이벤트(Event)**는 엄마가 거실 화이트보드에 **"저녁밥 다 됐다!"**라고 과거 완료형 팩트를 딱 적어두는 겁니다. 철수가 방에서 게임 하느라 1시간 뒤에 나와서 보든(비동기 지연), 누나가 와서 보든(1:N 확장), 엄마는 밥만 차려두고 신경 끄고 TV를 보는 우아한 무관심(Autonomy)의 미학입니다.
Ⅲ. 융합 비교 및 다각도 분석
1. 두 가지 브로커 토폴로지: 큐(Queue) vs 펍섭(Pub/Sub)
우체국이 편지를 배달하는 2가지 완전히 다른 룰.
| 척도 | Message Queue (Point-to-Point) | Pub/Sub (Publish/Subscribe) 👑 |
|---|---|---|
| 경쟁 모델 | 편지 1통을 오직 소비자 1명만 가져갈 수 있음. (선착순 먹기) | 편지 1통을 복사기처럼 복사해서 구독한 N명 모두에게 똑같이 뿌려줌. |
| 목적 | 10만 개의 이미지 크롭 작업을, 알바생(워커) 100명이 중복 없이 일감 나누기 (Load Balancing) | 결제 완료라는 위대한 1개의 사건을, 배송팀, 쿠폰팀, 메일팀 3곳이 동시에 다 알아차리기 (Broadcasting) |
| 편지의 운명 | 알바생이 읽고 "나 일 끝냈음(Ack)!" 하면 큐에서 영구 삭제됨. | 소비자가 읽든 말든 카프카 통나무(Log)에 7일간 영구 보존됨. |
| 대표 솔루션 | Amazon SQS, RabbitMQ (초창기) | Apache Kafka, Amazon SNS (현대 MSA의 지배자) |
과목 융합 관점
-
클라우드 / 서버리스 (AWS Lambda 트리거): 이벤트 기반 아키텍처는 서버리스(Serverless)와 만날 때 신이 된다. 평소엔 서버를 0대로 다 꺼둔다(비용 0원). S3 버킷에 사용자가 사진 1장을 업로드했다! 이 행위 자체가
[ObjectCreated 이벤트]가 되어 허공으로 발사된다. 이 이벤트가 0.1초 만에 자고 있던 람다(AWS Lambda) 함수를 후려 깨운다. 람다가 0.5초 만에 사진 썸네일을 찍어내고 다시 관짝으로 들어가 죽는다. **"이벤트가 없다면 1원의 서버 비용도 내지 않고, 이벤트가 폭발하면 1만 대의 람다가 허공에서 튀어나와 100% 동기화 방어"**를 해내는 궁극의 구름(Cloud) 공학 융합이다. -
데이터베이스 (이벤트 소싱, Event Sourcing): 534장(DDD)에서 살짝 엿본 기술. RDBMS는
[현재 잔고 5만원]이라고 상태(State)를 덮어씌워 버린다(과거 삭제). EDA의 찐덕후 아키텍트들은 "덮어쓰지 마! DB를 아예 없애고, 카프카(Kafka) 브로커 자체를 진리의 원장(Source of Truth) DB로 써버리자!"고 융합한다.[입금 10만]+[출금 2만]+[출금 3만]이라는 이벤트(Event) 3줄이 카프카에 영원히 지워지지 않고 적혀있다. 누가 "내 잔고 얼마야?" 물어보면, 이 3줄을 1초 만에 쭉 더하고 빼서(Replay)5만이라고 계산해 내는 흑마법. 데이터 유실이 100% 불가능한 금융 코어 뱅킹의 미래다. -
📢 섹션 요약 비유: 서버리스 연동은 **'쥐덫(Event Trigger)'**과 같습니다. 평소엔 쥐덫(Lambda 서버)은 전기도 안 먹고 죽은 듯 가만히 있습니다(비용 0). 쥐(이벤트 데이터)가 쥐덫을 건드리는 찰나의 0.1초 순간, 엄청난 힘(오토스케일링)으로 팍! 튀어올라 쥐를 잡아버리고 다시 조용해집니다. 이벤트를 기다리는 자(서버)의 체력 낭비를 0으로 압착하는 기술입니다.
Ⅳ. 실무 적용 및 기술사적 판단
실무 시나리오
-
시나리오 — 사가 패턴(Saga) 없는 비동기 분산 트랜잭션의 대재앙: MSA로 찢고 50개 서버 사이에 Kafka를 달았다. 고객이 결제를 했다(결제 DB +100원). 결제 서버는 Kafka에
[결제완료]를 던졌다. 배송 서버가 그걸 주워 먹고 배송 처리를 하려는데 뻗어버렸다. 결제는 됐는데 택배는 영원히 안 온다. 고객센터가 마비됐다. 옛날(모놀리식)이었으면 1개 트랜잭션이라서 배송 터지면 결제도 같이Rollback됐을 텐데, Kafka를 쓰니까 롤백이 안 된다!- 아키텍트의 해결책: 이벤트 기반 분산 트랜잭션 수습(Compensation)의 부재다. 비동기 큐를 쓰면 절대 기존의
BEGIN ~ COMMIT을 쓸 수 없다. 아키텍트는 **'사가 패턴(Saga Pattern)'**을 융합해 파이프라인을 엮어야 한다. 배송 서버가 에러가 났다면 혼자 조용히 죽으면 안 된다. 배송 서버는 다시 Kafka에[배송실패_결제환불요망]이라는 비극적 이벤트를 역으로 쏴올려야 한다! 결제 서버가 이 이벤트를 주워 먹고, 스스로 "환불(-100원)" 함수를 실행시켜서 기어이 고객의 돈을 돌려놓는 피 튀기는 릴레이 후처리(Eventual Consistency)가 있어야만 MSA가 돌아간다.
- 아키텍트의 해결책: 이벤트 기반 분산 트랜잭션 수습(Compensation)의 부재다. 비동기 큐를 쓰면 절대 기존의
-
시나리오 — '최소 한 번 보장(At-least-once)'이 부른 돈 무한 복사 버그: 536장에서도 언급된 무서운 버그. 카프카(우체국)가 편지를 배송 서버에 던져줬다. 배송 서버가 로직 처리를 다 했는데, "나 편지 다 읽었어(Ack)" 도장을 카프카에 찍어주려던 순간 네트워크가 끊겼다. 카프카는 도장을 못 받았으니 "얘가 편지를 못 읽었나 보네!" 라며 똑같은 편지를 한 번 더 쐈다(중복 배달). 배송 서버는 똑같은 송장 번호로 택배를 두 번 쌌다(회사 돈 2배 증발).
- 아키텍트의 해결책: 비동기 통신의 멱등성(Idempotency) 방패 누락이다. 카프카는 절대 편지를 딱 1번만 준다고 보장하지 않는다(Exactly-once는 세팅이 미친 듯이 어렵고 느리다). 아키텍트는 큐를 탓하지 말고 무조건 **소비자(Consumer) 서버 앞단에 '거름망'**을 설계해야 한다. "내가 이
Event_ID=777편지를 예전에 처리한 적이 있나?"를 DB의 유니크 키(Unique Key)나 Redis 셋에 먼저 1번 찔러보고, 이미 처리한 편지면 0.1초 만에 쿨하게 버리는(Drop) 방어 로직이 모든 비동기 소비자의 1번 룰이어야 한다.
- 아키텍트의 해결책: 비동기 통신의 멱등성(Idempotency) 방패 누락이다. 카프카는 절대 편지를 딱 1번만 준다고 보장하지 않는다(Exactly-once는 세팅이 미친 듯이 어렵고 느리다). 아키텍트는 큐를 탓하지 말고 무조건 **소비자(Consumer) 서버 앞단에 '거름망'**을 설계해야 한다. "내가 이
도입 체크리스트
- 조직적: "이벤트 스키마 레지스트리(Schema Registry)"를 운영하고 있는가? 결제팀(생산자)이
{"user_id": 1, "amt": 500}이라고 JSON 이벤트를 쐈다. 배송팀(소비자)은 이걸 보고 잘 먹고 살았다. 1년 뒤 결제팀이 말도 없이 JSON 껍데기를{"userId": 1, "amount": 500}으로 스펠링을 쓱 바꿔서 배포했다. 배송팀 서버는 파싱 에러를 뿜으며 전멸했다. 아키텍트는 엑셀로 연락하는 짓을 멈추고, 중앙에 Confluent Schema Registry 같은 기계적 약속 센터를 세워, 양 팀이 서로 합의한 프로토부프(Protobuf)나 Avro 껍데기(Schema)가 1글자라도 틀리면 큐에 편지 자체를 아예 못 던지게 입구를 막아버리는 강타입(Strong-type) 통제망을 쳐야 한다. - 기술적: 순서(Ordering)가 생명인 데이터는 파티션 키(Partition Key)를 걸었는가? 회원이
[비번 변경] ➡ [탈퇴]를 연속으로 눌렀다. 카프카는 고속도로 10차선(Partition)이라 편지가 1차선, 2차선 동시에 쌩쌩 달린다. 도착 순서가 꼬여서 소비자 서버가[탈퇴]를 먼저 처리하고, 나중에[비번 변경]을 처리하려다 Null 에러를 토하며 기절한다. 비동기의 최약점이다. 아키텍트는 카프카에 던질 때 무조건 "이건 회원 A의 이벤트니까, 10차선 중 무조건 3차선 하나로만 몰아넣어!" 라며Key=UserA딱지를 붙여서 순서(Sequence)를 100% 우주 끝까지 보장받는 큐 라우팅 기교를 부려야 한다.
안티패턴
-
"메시지 큐를 데이터베이스처럼 쓰기 (Message Bloating)": 아키텍처를 개똥으로 배운 주니어의 만행. "카프카가 데이터를 7일간 저장해 준대!"라며, 회원 가입 이벤트를 던질 때 유저의 이름, 주소, 비번, 쿠폰 내역, 장바구니 100MB짜리 JSON을 통째로 큐에 우겨 넣는 안티패턴. 카프카는 트럭이 아니다! 데이터가 뚱뚱해지면 카프카 네트워크가 터지고 전체 서버가 마비된다. "큐(Broker)에는 오직
[유저 100번 가입함]이라는 가벼운 10바이트짜리 신호탄(Signal/Claim Check)만 쏴라. 이 신호탄을 받은 상대방 서버가 궁금하면 자기가 알아서 API로 찔러서 DB 원본을 긁어가게 하는 역할 분리가 생명이다." -
📢 섹션 요약 비유: 큐에 뚱뚱한 데이터를 우겨 넣는 것은, 호텔에서 짐꾼(Kafka)에게 **'100kg짜리 냉장고(거대 JSON)를 등에 지워주며 10층까지 배달하라고 시키는 짓'**과 같습니다. 짐꾼의 허리가 부러져 호텔 전체 배달이 스톱됩니다. 진정한 아키텍처(Claim Check 패턴)는 짐꾼에게 **'냉장고 보관증 번호표 1번(가벼운 Event)'**이라는 종이 쪼가리 1장만 들려서 올려보내는 것입니다. 종이를 받은 10층 손님(Consumer)이 나중에 시간 날 때 보관소(DB)에 가서 자기 힘으로 직접 냉장고를 찾아가는 완벽한 역할 분담입니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 모든 서버가 동기(HTTP REST)로 릴레이 호출함 (AS-IS) | EDA 기반 Kafka 비동기 통신망으로 백본 개조 (TO-BE) | 개선 효과 |
|---|---|---|---|
| 정량 | 트래픽 피크 시 50개 서버 중 1개만 죽어도 100% 동반 셧다운 | 큐(Queue)가 트래픽을 먹금(Buffering)하여 터지지 않음 | 폭주(Burst) 트래픽 상황 시 가용성(Availability) 99.999% 무결점 방어 |
| 정량 | 새 기능 추가 시 기존 발송 서버 코드 1,000줄 뜯어고쳐야 함 | 기존 코드 수정 0줄. 새 서버가 그냥 카프카 구독(Subscribe) | 신규 비즈니스 추가 시 타 부서 통신 연동 소요 시간 99% 단축 |
| 정성 | "앞 서버가 3초 동안 대답 안 해서 쓰레드가 꽉 차서 죽었어" | "난 던지고 잊었다. 네가 언제 하든 내 알 바 아님(Autonomy)" | 철저한 헐거운 결합(Decoupling)을 통한 마이크로서비스 조직의 정치적/심리적 완벽한 자율성 획득 |
미래 전망
- Event Mesh (이벤트 메시)의 전 지구적 통일: 50개 서버 묶을 때 카프카 쓰는 건 이제 기본이다. 미래의 아키텍트들은 "AWS 카프카, Azure 서비스버스, 사내망 RabbitMQ 이 3개가 흩어져서 파편화됐네?"라는 거대한 벽에 막혔다. 이를 타파하기 위해 **CloudEvents (CNCF 표준)**라는 규격이 전 우주를 통일하고 있다. "너희가 쓰는 우체국 껍데기가 뭐든, 편지 봉투 규격을 글로벌 클라우드 표준 1개로 통일하자!" 이 규격을 쓰면 AWS에서 쏜 이벤트가 0.1초 만에 구글 클라우드 서버의 람다(Lambda)를 깨우는 전 지구적 초연결 통신망(Event Mesh)이 무지성으로 완성된다.
- 실시간 스트림 프로세싱(Stream Processing)의 DB 흡수: 지금은 카프카 큐(파이프)와 찌꺼기 보관용 DB(창고)가 나뉘어 있다. 미래는 카프카 자체가 미쳐 날뛴다.
ksqlDB나Flink같은 놈들이 등장해, 파이프 안을 날아가는 초당 100만 건의 데이터(Event Stream)를 허공에서 낚아채 실시간으로 조인(JOIN)하고 더하고 빼서(Filtering/Aggregation) 1초 만에 해커를 잡아내고 AI 추천 엔진을 돌린다. **"데이터를 디스크(DB)에 고이게 눕혀놓고 엑셀로 돌려보던 시대(Batch)는 죽었다. 피 튀기며 날아가는 핏줄(Stream) 안에서 모든 비즈니스 인텔리전스가 실시간(Real-time) 판결되는 시대"**가 아키텍처의 최종 종착역이다.
참고 표준
- Reactive Manifesto (리액티브 선언문): 전 세계 천재 아키텍트들이 2013년에 쾅쾅 박아버린 4대 절대 헌장. "니들 시스템이 우아하게 돌려면, 무조건 응답성(Responsive)이 있어야 하고, 탄력적(Resilient)이어야 하며, 100만 명 몰려도 늘어나야(Elastic) 하는데, 이 3가지를 달성하는 유일한 물리적 심장 엔진은 **메시지 구동(Message-Driven, 비동기 EDA)**뿐이다!"라고 못을 박은 사상적 성경.
- Apache Kafka: 링크드인이 하루에 1,000억 건 쏟아지는 로그를 감당 못 해 "우체국(RabbitMQ) 다 때려 부수고, 가장 무식하게 하드디스크에 일렬로 팍팍 찍어 바르는 통나무(Log) 괴물 엔진을 만들자!"라며 창조해 내어, 10년째 전 세계 빅데이터와 MSA의 혈관을 독점하고 있는 왕좌의 오픈소스.
이벤트 기반 아키텍처(EDA)는 소프트웨어 공학이 도달한 **'간섭(Interference)의 종말이자, 무관심(Indifference)을 통한 완벽한 자유의 설계'**다. 동기(Synchronous) 통신의 세상에서는 모두가 서로의 목줄을 쥐고 있었다. 앞사람이 뛰지 않으면 나도 뛸 수 없고, 앞사람이 넘어지면 나도 코가 깨졌다(강결합). 우리는 비즈니스라는 이름 아래 너무 끈끈하게 엮여 서로를 질식시켰다. 기술사는 무자비한 칼을 들어야 한다. "너희들은 더 이상 서로에게 전화를 걸지(API Call) 마라. 허공(Kafka)에 대고 네가 한 짓(Event)을 툭 던지고 돌아서라. 네가 던진 공을 뒤에서 누가 받든, 어떻게 처리하든 네 알 바가 아니다." 이 극단적인 책임의 분리, 지독할 정도의 헐거운 결합(Decoupling)만이 블랙프라이데이의 쓰나미 트래픽 속에서 서버 10대가 죽어 나자빠지는 지옥도 한가운데서도, 살아남은 단 1대의 주문 서버가 0.1초의 지연도 없이 웃으며 고객의 카드를 긁을 수 있게 만드는, 아키텍트가 빚어낸 궁극의 불로장생(Resilience) 마술이다.
- 📢 섹션 요약 비유: 동기 통신은 **'릴레이 계주 경기'**입니다. 바통(데이터)을 다음 주자에게 넘겨줄 때까지 내 심장은 터질 것 같고, 다음 주자가 손을 헛디디면 우리 팀 전체가 실격(장애) 당합니다. EDA(비동기)는 **'우체통에 편지 1만 장 넣기'**입니다. 나는 밤 12시에 우체통(Kafka)에 1만 장을 와르르 쑤셔 넣고 코 골며 잡니다(내 역할 끝, 1초 컷). 다음 날 아침 우체부(Consumer) 100명이 출근해서 편지를 각자 100장씩 꺼내 들고 동네방네 천천히 나눠주든, 오토바이가 고장 나서 하루 쉬든(장애), 편지를 쓴 나의 평화와 수면(시스템 응답 속도)에는 단 1%의 영향도 미치지 않는, 남의 고통을 100% 절단해 버리는 완벽한 완충 지대입니다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 서비스 간 동기 통신 (REST/gRPC) | 538장의 완벽한 대척점이자 앙숙. 비동기가 너무 자유분방해서 "내 100원 송금 언제 끝나?"라고 고객이 멱살을 잡을 때는, 어쩔 수 없이 대기 타야 하는 REST/gRPC의 차가운 즉시성(동기 통신)을 핀셋으로 섞어 써야 한다. (이전 장 535번 연계) |
| 마이크로서비스 분해 패턴 (MSA) | 1통짜리 괴물을 50개로 찢어놓는 도끼질. 이 도끼질(532장)이 성공하려면, 찢어진 50개의 살점들이 다시 전선(REST API)으로 칭칭 감기지 않도록 Kafka라는 무선 블루투스(비동기)로 묶어줘야 진짜 MSA가 완성된다. (이전 장 532번 연계) |
| 사이버 레질리언스 (Resilience) | 비동기 아키텍처(EDA)가 추구하는 궁극의 영혼. A서버가 터졌는데 B서버는 1도 타격 안 받고 돌아간다는 그 맷집 자체가 사이버 레질리언스의 교과서적 방패막이다. (이전 장 519번 연계) |
| API Rate Limiting (비율 제한) | 밖에서 미친 듯이 쏟아져 들어오는 트래픽 1차 폭격을 API Gateway가 몽둥이로 쳐내고(511장), 살아남아 뚫고 들어온 합법적인 대량 트래픽은 2차로 Kafka 큐가 스펀지처럼 쫙 흡수하여 서버를 지킨다. (이전 장 511번 연계) |
| 사가 패턴 (Saga Pattern) | EDA의 가장 화려한 응용 스킬. 분산된 DB 환경에서 결제가 터졌을 때, 카프카 큐를 향해 "아까 뺀 돈 다시 돌려주라!"는 보상 이벤트를 비동기로 연달아 던져서 엉킨 실타래를 푸는 흑마법. |
👶 어린이를 위한 3줄 비유 설명
- 엄마한테 "나 피자 먹고 싶어!"라고 전화를 걸었는데(동기 통신), 엄마가 피자 주문을 다 끝낼 때까지 10분 동안 전화통을 붙잡고 기다려야 해서 너무 답답했어요.
- 그래서 이번엔 거실 냉장고 앞의 '소원 수리 우체통(메시지 큐)'에 "피자 사줘!" 쪽지를 딱 1초 만에 휙 던져놓고 바로 밖으로 놀러 나갔어요(비동기 통신).
- 내가 신나게 놀고 있으면, 엄마가 나중에 퇴근해서 그 쪽지를 읽고 자기가 편할 때 피자를 시켜주죠! 이렇게 서로 기다리느라 목 빠질 필요 없이, 편지통에 글만 던져두고 각자 자기 할 일을 자유롭게 하는 짱 편한 소통법을 **'이벤트 기반 아키텍처(EDA)'**라고 부른답니다!