539. 이벤트 버스 (Event Bus) 및 스트림 프로세싱
핵심 인사이트 (3줄 요약)
- 본질: 이벤트 버스(Event Bus)가 시스템 내 수백 개의 컴포넌트가 주고받는 '이벤트(사건)'들을 싣고 나르는 1차원적 고속도로(우체국)라면, **스트림 프로세싱(Stream Processing)은 그 고속도로 위를 시속 300km로 쏟아져 날아가는 수천만 개의 이벤트 파편들을 허공에서 낚아채 실시간으로 조인(JOIN)하고 분석하여 0.1초 만에 비즈니스 인텔리전스를 뿜어내는 '하늘을 나는 AI 용광로'**다.
- 가치: 데이터를 하드디스크(DB)에 조용히 눕혀놓고 내일 아침 엑셀로 묶어 통계를 내던 낡은 '배치(Batch) 처리'의 무덤을 파버렸다. 해커의 IP가 3번 튀는 그 찰나의 순간, 신용카드가 유럽과 한국에서 동시 결제되는 수백 밀리초(ms)의 골든 타임 안에 즉각적인 차단 스위치(Fraud Detection)를 때려 박아 수백억의 손실을 방어하는 절대적 즉시성(Immediacy)을 기업에 헌납한다.
- 융합: 앞 장의 **이벤트 기반 아키텍처(EDA, 538번)**가 깔아놓은 카프카(Kafka) 뼈대 위로
Flink,Kafka Streams같은 초광속 연산 엔진이 융합되어, "움직이지 않는 고인 물(DB)"의 시대를 끝내고 "끝없이 콸콸 쏟아지는 핏줄(Stream) 자체를 뇌(Brain)로 써버리는" 진정한 실시간 클라우드 네이티브 생태계를 완성한다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념:
- 이벤트 버스 (Event Bus): 컴퓨터 안에서 부품(MSA)들이 대화할 때 쓰는 공용 중앙 파이프. A가 "나 이거 했다!" 이벤트를 파이프에 던지면, 관심 있는 B와 C가 파이프에서 뽑아간다. (예: AWS EventBridge, Guava EventBus)
- 스트림 프로세싱 (Stream Processing): 버스나 큐(Kafka)를 타고 1초에 10만 개씩 미친 듯이 쏟아져 들어오는 물줄기(Stream) 같은 데이터를, 컵(DB)에 담아서 기다리지 않고! 허공에서 휙휙 낚아채서 실시간으로 덧셈, 뺄셈, 그룹화(Aggregation)를 때려버리는 초능력.
-
필요성: 쿠팡에 1,000만 명이 접속해서 장바구니 버튼을 1초에 10만 번씩 누른다. 옛날에는 이 클릭 로그를 몽땅 하드디스크(DB)에 예쁘게 쌓아놨다가, 밤 12시 정각에 배치(Batch) 프로그램을 윙 돌렸다. "오늘 제일 많이 팔린 물건은 사과입니다!"라고 다음 날 아침에 사장님께 보고했다. 그런데 넷플릭스와 유튜브의 시대가 왔다. 고객이 지금 1초 전에 액션 영화를 클릭했다면, 0.1초 뒤 화면 하단에는 무조건 악당 영화 추천이 떠야 돈(매출)을 번다. 내일 아침 통계는 썩은 데이터다. 쌓아두고 돌려보는 무거운 DB의 족쇄를 찢어버리고, 날아다니는 데이터(Data in Motion)를 공중에서 씹어 먹는 스트리밍 엔진이 필수 생존 요건이 되었다.
-
💡 비유:
- 배치(Batch) 처리: 강물을 **'물탱크(DB)'**에 밤새도록 10만 리터를 꽉꽉 모아둔 다음, 다음 날 아침 정수기 필터를 한 번에 쾅! 씌워서 깨끗한 물을 뽑아내는 방식입니다. 물을 마시려면 하루를 꼬박 기다려야 합니다.
- 스트림 프로세싱(Stream Processing): 콸콸콸 쏟아지는 강물 파이프 중간에 **'초고속 회전하는 터빈 믹서기'**를 그대로 냅다 꽂아버리는 겁니다. 물이 물탱크에 고일 틈도 없이, 파이프를 스쳐 지나가는 0.001초의 찰나에 믹서기가 실시간으로 이물질을 갈아버리고 소독 약(비즈니스 로직)을 타서 파이프 반대편으로 100% 무균수(실시간 통계)를 뿜어냅니다. 1초도 안 기다리고 즉각 마실 수 있습니다.
-
등장 배경 및 발전 과정:
- 배치(Batch)와 하둡(Hadoop)의 시대 (2000s): 거대한 데이터를 싸게 보관하려고 HDFS에 쌓아두고, 맵리듀스(MapReduce)로 밤새워 계산했다. 며칠 전 데이터 분석엔 좋았지만 1초 뒤 주식 시세를 맞출 순 없었다.
- Lambda 아키텍처 (스피드와 배치의 짬뽕): 빠른 건 스트림(Storm, Spark Streaming)으로 찌끔 처리하고, 완벽한 통계는 배치(Hadoop)로 밤에 처리해서 둘을 합쳐봤다. 개발자가 코드를 두 번씩 짜느라 미쳐 죽으려 했다.
- 카파(Kappa) 아키텍처와 Flink의 천하통일 (현재): "야! 무거운 배치 다 갖다 버려! 카프카(Kafka)에 데이터 7일 치 다 모아두고, 걍 스트림 프로세싱 엔진 1개(Flink)로 옛날 데이터부터 1초 뒤 데이터까지 한방에 다 씹어 먹어!" 가장 단순하고 극단적인 실시간 100% 아키텍처가 전 세계 인프라를 평정했다.
-
📢 섹션 요약 비유: 일반 DB 처리가 **'도둑이 어제 우리 집에 들어온 CCTV 화면을 다음 날 경찰서에서 팝콘 먹으며 돌려보는 것(이미 털린 사후 약방문)'**이라면, 스트림 프로세싱은 **'CCTV 렌즈 자체에 안면 인식 AI 센서를 달아서, 도둑이 담장을 넘는 0.1초의 찰나에 레이저 포탑(차단 룰)을 발사해버리는 초현실적 실시간 자가 면역 방어 체계'**입니다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
1. 윈도우잉 (Windowing): 스트림의 허공을 자르는 엑스칼리버
무한대로 끝없이 쏟아지는 강물(Stream)의 평균을 어떻게 구할까? 강물 전체를 더할 순 없으니 '시간'으로 무 토막을 쳐야 한다. 이것이 스트림의 심장 기술이다.
- 텀블링 윈도우 (Tumbling Window)
- 원리: 1분 단위로 두부 썰듯 칼같이 딱딱 썬다. (예:
12:00~12:01,12:01~12:02) - 사용: "1분 동안 발생한 500 에러 총 몇 개야?" 겹치는 시간이 없어서 가장 가볍고 깔끔한 정산.
- 원리: 1분 단위로 두부 썰듯 칼같이 딱딱 썬다. (예:
- 호핑 윈도우 (Hopping / Sliding Window)
- 원리: 1분 크기의 상자를 두는데, 30초마다 스윽쓱 상자를 옆으로 민다. (예:
12:00~12:01,12:00:30~12:01:30) 데이터가 앞뒤 윈도우에 양다리(겹침)를 걸친다. - 사용: "최근 1분간 트래픽이 평소 대비 50% 튀었나?" 디도스나 이상 탐지(Fraud Detection)할 때 끊김 없는 촘촘한 감시망을 짤 때 최고다.
- 원리: 1분 크기의 상자를 두는데, 30초마다 스윽쓱 상자를 옆으로 민다. (예:
- 세션 윈도우 (Session Window)
- 원리: 시간이 아니라 '인간의 행동'으로 썬다. 김철수가 막 광클하다가 5분 동안 마우스가 멈추면? "아, 이 새끼 여기서부터 여기까지가 한 타임(Session)이구나!" 하고 비정형적으로 상자를 자른다.
- 사용: 쇼핑몰 사용자의 행동 패턴(장바구니 담고 고민하는 시간) 분석.
2. 스트림-테이블 이원성 (Stream-Table Duality)의 흑마법
데이터베이스(Table)와 허공의 냇물(Stream)은 본질적으로 100% 똑같다는 철학. 카프카 KSQL의 코어 사상이다.
-
Stream ➡ Table: 은행 통장에 "100원 입금", "50원 출금" 이라는 미친 듯이 쏟아지는 이벤트 냇물(Stream)을 차곡차곡 누적해서 더하면? 최종 잔고 "50원" 이라는 1줄짜리 정적인 표(Table)로 둔갑한다.
-
Table ➡ Stream: 엑셀 표(Table)가 하나 있다. 내가 여기서 "100원 지우고 200원 쓰기"를 했다. 엑셀의 변경 내역(Change Log)을 뽑아내면, 그 자체가
[100원 삭제됨 이벤트],[200원 추가됨 이벤트]라는 살아 숨 쉬는 강물(Stream)로 튀어나온다. (이것이 CDC, Change Data Capture의 원리다) -
📢 섹션 요약 비유: **스트림(Stream)**은 비디오 카메라가 찍고 있는 1시간짜리 **'움직이는 동영상'**입니다. 미친 듯이 흐르고 있죠. **테이블(Table)**은 그 동영상에서 가장 마지막 1초 장면을 찰칵 찍어 멈춰놓은 **'사진 한 장'**입니다. 동영상을 끝까지 겹쳐서 보면 결국 마지막 사진 1장이 나오고(Stream->Table), 사진이 100장 바뀌는 과정을 필름으로 주르륵 연결해 틀어버리면 다시 1시간짜리 동영상(Table->Stream)이 됩니다. 둘은 물리적으로 완전히 똑같은 물아일체의 신의 경지입니다.
Ⅲ. 융합 비교 및 다각도 분석
1. 배치(Batch) 처리 vs 마이크로배치(Micro-batch) vs 순수 스트림(Native Stream)
데이터를 얼마나 빨리 씹어 먹느냐의 진화 트리. 면접에서 절대 안 빠지는 3대장.
| 척도 | 1. 전통 배치 (Hadoop MapReduce) | 2. 마이크로배치 (Spark Streaming) | 3. 순수 스트림 처리 (Apache Flink) 👑 |
|---|---|---|---|
| 처리 단위 | 하드디스크에 쌓인 100GB짜리 거대한 파일 통째로 1개 | 물줄기를 0.5초 단위로 잘게 썰어서 만든 아주 얇은 파일 덩어리 | 파일이 아님. 허공을 날아가는 데이터 1알맹이(Event) 그 자체 |
| 지연 시간(Latency) | 1시간 ~ 1일 (어제 데이터 오늘 봄) | 0.5초 ~ 1초 (꽤 빠르지만 완벽한 실시간은 아님) | 0.001초 (밀리초, 들어오자마자 뇌 꽂힘) 극강의 리얼타임 |
| 장점 | 수백 테라바이트 씹어 먹는 무식한 힘의 상징 | 스트림인 척하면서 기존 배치 코드도 재활용 가능 (Spark 생태계) | 0.1초의 딜레이도 용서치 않는 금융/보안 사기 탐지의 1티어 갓 |
| 단점 (한계) | 지금 이 순간의 해킹이나 사기(Fraud) 절대 못 잡음 | 0.5초마다 억지로 잘게 자르느라 스레드 오버헤드가 큼 | 아키텍처가 존나 복잡하고 룰(Windowing) 짜기 머리 터짐 |
과목 융합 관점
-
소프트웨어 공학 (이벤트 소싱, Event Sourcing): 앞 534장에서 본 이벤트 소싱의 뼈대가 왜 스트림 프로세싱인가? 전통 RDBMS는
잔액=100이라고 과거를 덮어써서 파괴해 버린다. 스트림 프로세싱은 카프카(Kafka) 파이프 안에입금 100,출금 50등 과거의 모든 이벤트를 10년 치 영원히 버리지 않고 스트림(Stream) 상태로 빙글빙글 돌게 냅둔다. 누군가 내 잔고를 물어보면 10년 치 파이프라인의 물을 1초 만에 덧셈 뺄셈(Replay)으로 쭉 빨아들여잔고 50이란 표(Table)로 뱉어낸다. 이것이 과거 데이터의 100% 무결성을 런타임에 융합 증명해 내는 마이크로서비스의 종착역이다. -
보안 및 인프라 (SIEM과 Fraud Detection): 보안팀은 1년 내내 가만히 있는 로그 텍스트를 보고 싶지 않다. 해커가 내 방화벽 포트를 초당 1만 번씩 찌르는 바로 그 순간! 스트림 프로세싱 엔진(Flink)은 파이프에 꽂힌 채로 **"어? 1번 윈도우(최근 1초) 안에 중국 IP가 비밀번호를 10번 틀렸네? 이건 100% 크리덴셜 스터핑(해킹)이다!"**라고 0.001초 만에 인지하고 앞단 WAF(웹 방화벽) API를 찔러 해당 IP를 영구 차단(Blacklist) 시켜버린다. 사람이 자고 있는 새벽 3시에도 0.1초 만에 봇이 봇의 모가지를 치는 자가 면역 데브옵스 방어망의 극치다.
-
📢 섹션 요약 비유: 배치(Hadoop) 처리는 우체국에서 편지 1만 통이 다 모일 때까지 기다렸다가 트럭에 한 번에 싣고 가는 멍청한 배달부입니다. 느리지만 한 번에 엄청 많이 옮기죠. **마이크로배치(Spark)**는 편지가 10통만 모이면 오토바이로 쌩 배달하고 옵니다(훨씬 빠름). **순수 스트림(Flink)**은 편지가 모이는 걸 안 기다립니다. 아예 우체통과 남의 집 사이에 **'초광속 진공 튜브 파이프'**를 연결해서, 편지가 들어오는 그 찰나의 0.001초 순간에 튜브를 타고 목적지로 직행해 꽂혀버리는 우주적 개념의 통신망입니다.
Ⅳ. 실무 적용 및 기술사적 판단
실무 시나리오
-
시나리오 — 데이터 늦게 옴(Late Data) 지옥과 이벤트 시간(Event Time)의 배신: 1분간의 트래픽을 합쳐서 1분마다 디도스 경보를 울리는 스트림 윈도우를 짰다. 그런데 유저의 핸드폰 시계가 고장 났거나, 터널에 들어가서 3분 동안 인터넷이 끊겼다가 3분 뒤에 패킷 1,000개가 몰아서 서버로 날아왔다(Late Data). 서버의 멍청한 스트림 엔진은 "아! 지금 서버에 도착한 시간(Processing Time) 기준으로 합치면 되겠지?" 라며 1분 전의 낡은 1,000개 데이터를 지금 윈도우에 엎어쳐서 더해버렸다. 통계가 개박살 나고 엉뚱한 디도스 알람이 울렸다.
- 아키텍트의 해결책: 이벤트 타임(Event Time) 헌법과 워터마크(Watermark)의 도입이다. 아키텍트는 스트림 프로세서(Flink)에게 강제해야 한다. "서버에 편지가 언제 도착했는지(도착 시간)는 1도 중요하지 않아! 편지봉투에 찍힌 발송 날짜(Event Time)를 기준으로 윈도우(상자)를 잘라!" 그리고 지각생이 있을 수 있으니 **워터마크(Watermark: 최대 허용 지각 시간)**를 '3분'으로 설정한다. "1분짜리 윈도우 계산 끝났어? 바로 닫지 마! 터널에서 3분 늦게 날아오는 지각생 편지(Late Data)들을 기다렸다가, 걔네 봉투 날짜가 옛날 거면 옛날 1분 윈도우 상자를 잠깐 열어서 걔네까지 완벽하게 합산한 뒤에 진짜 최종 마감 버튼을 눌러라!"는 뼈저린 시간 공학적 튜닝이 필수다.
-
시나리오 — "한 번만 딱 한 번만!" Exactly-Once (정확히 한 번) 보장의 환상과 딜레마: 카프카 스트림으로 은행 송금 로직을 짰다. 카프카에서 A의 10만 원을 빼고 B에게 10만 원을 더하는 이벤트를 읽어서 DB에 박았다. 근데 갑자기 네트워크가 1초 툭 끊겼다. 스트림 엔진이 "어? 10만 원 더했다는 답변(Ack)을 못 받았네? 한 번 더 보내!" 라며 (At-least-once) 또 10만 원을 더해버려 B가 20만 원을 받는 돈 복사 버그가 터졌다.
- 아키텍트의 해결책: 비동기 스트림 환경에서의 원자성(Atomicity) 붕괴다. 일반적인 분산 큐는 중복 배달을 숨 쉬듯 한다. 아키텍트는 2가지 처방전을 쓴다. 1) Flink나 Kafka의 옵션을 딸깍 켜서 기계적으로
Exactly-Once (정확히 한 번)시맨틱을 강제(내부 트랜잭션 락)시킨다. (대신 서버 성능이 30% 토막 난다). 2) 이게 싫다면? 스트림 엔진은 맘대로 여러 번 쏘게 두라. 대신 돈을 받는 쪽(Consumer DB) 코드 앞단에 **"내가 이 편지 일련번호(ID) 아까 처리했었나? 멱등성(Idempotency) 검사 필터"**를 씌워서, 스트림 엔진이 미쳐서 10만 원을 10번 연속 쏴대도 앞단 필터에서 9번은 0.1초 만에 튕겨내버리는 구조적 타협점(Trade-off)을 선택해야 아키텍트다. (536장 연계)
- 아키텍트의 해결책: 비동기 스트림 환경에서의 원자성(Atomicity) 붕괴다. 일반적인 분산 큐는 중복 배달을 숨 쉬듯 한다. 아키텍트는 2가지 처방전을 쓴다. 1) Flink나 Kafka의 옵션을 딸깍 켜서 기계적으로
도입 체크리스트
- 비즈니스적: "우리 비즈니스가 1초 늦게 알면 수억 원이 날아가는 도메인인가?" 스트림 프로세싱은 구축비와 인건비(고급 데이터 엔지니어)가 미친 듯이 비싸다. 만약 우리 회사가 "어제 회원가입 몇 명 했어?" 정도만 보는 쇼핑몰이라면, 그냥 밤에 한 번 도는 싸구려 **배치(Batch/Airflow)**를 써라. 하지만 "지금 결제 시도하는 이 놈 카드 번호 패턴이 중국 해커가 3초 전에 쓴 패턴이랑 99% 똑같다! 당장 카드 결제 블록(Block) 쳐라!" 라는 **FDS (이상 거래 탐지 시스템, Fraud Detection System)**나 자율 주행, 주식 초단타 매매(HFT) 도메인이라면 수십억을 부어서라도 Flink 스트리밍 엔진을 파이프라인 정중앙에 때려 박아야 회사가 살아남는다.
- 기술적: CDC (Change Data Capture, 변경 데이터 캡처) 파이프라인이 뚫려 있는가? 운영 DB(MySQL)에 쌓인 데이터를 스트림으로 바꾸려면, 개발자가 "데이터 저장할 때마다 카프카에도 같이 쏴줘!" 라고 자바 코드를 짜면 트랜잭션이 꼬이고(Dual Write 문제) 서버가 뻗는다. 아키텍트는 운영 서버 코드를 1바이트도 건드리지 않는다. 무조건
Debezium같은 CDC 툴을 융합한다. 이 툴은 MySQL의 제일 밑바닥 심장(Binlog)을 몰래 도청하다가, 데이터가 변경되는 그 0.1초의 순간에 그 텍스트(로그)를 낚아채서 카프카 스트림으로 변환해 강물처럼 흘려보낸다. 앱 서버는 자기가 스트림으로 감시당하는지도 모른 채 평화롭게 굴러가는 극한의 데브옵스 격리술이다.
안티패턴
-
"분산 큐를 떡칠한 '데이터 늪(Data Swamp)'의 악취": 트렌드랍시고 50개 마이크로서비스 사이사이에 전부 이벤트 버스와 카프카를 발라놨다. 서비스 A가 이벤트를 던졌는데, B가 주워 먹고 가공해서 다시 C로 던지고, C가 가공해서 다시 A로 던지는 무한의 **'이벤트 핑퐁 루프(Event Ping-Pong Loop)'**가 발생했다. 나중에 에러가 터졌을 때 디버깅을 하려 해도 이벤트들이 허공의 파이프 속을 빙글빙글 돌고 있어서 도대체 어느 서비스에서 독극물이 시작됐는지 아무도 찾지 못해 전체 시스템을 포맷하는 멸망의 안티패턴.
-
"이벤트 드리븐의 저주: Choreography 맹신": 각자 알아서 주워 먹는(Choreography) 방식만 쓰면, 전체 50개 서버가 그리는 '큰 그림(Workflow)'을 통제하는 사령탑이 없어진다. 복잡한 트랜잭션(결제->재고->쿠폰->포인트)은 반드시 중앙에서 순서를 제어하고 하나 터지면 롤백 명령을 쏘는 '오케스트레이터(Orchestrator, 예: Camunda, Temporal)' 패턴을 핀셋으로 섞어주어야 파이프라인이 통제권을 잃지 않는다.
-
📢 섹션 요약 비유: 이 안티패턴은 사거리 교차로에 **'신호등(통제기)을 다 뽑아버리고 차들보고 알아서 눈치껏 지나가라고 방치한 것'**과 같습니다. 이벤트 기반(알아서 지나가기)이 빠르긴 하지만, 차 100대가 한 번에 몰리면 교차로 중앙에서 서로 꼬여서 영원히 빠져나가지 못하는 늪(데드락)이 됩니다. 아무리 자유로운 큐(Queue) 통신망이라도, 절대 꼬이면 안 되는 100억짜리 핵심 도로(결제망)에는 무조건 중앙 사령탑(오케스트레이터)을 세워 빨간불과 파란불을 물리적으로 강제 통제해 주어야 우주가 평온합니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 무거운 야간 배치(Batch) 기반 데이터 처리 (AS-IS) | Kafka/Flink 기반 실시간 스트림 프로세싱 융합 (TO-BE) | 개선 효과 |
|---|---|---|---|
| 정량 | 해킹 및 사기 결제(FDS) 적발 시점 = 사건 발생 후 평균 12시간 | 0.05초 만에 패턴 분석 및 결제 스위치 강제 컷오프(Block) | 비정상 카드 결제 및 계정 탈취 재무적 손실 방어율 99% 달성 |
| 정량 | 사용자의 장바구니 행동 통계 추천 이메일 발송에 1일 소요 | 이탈 후 1분 내 장바구니 리타겟팅 카톡 자동 팝업 전송 | 리얼타임 초개인화 타겟팅으로 고객 구매 전환율(CVR) 300% 폭증 |
| 정성 | "어제 데이터 좀 뽑아주세요" 데이터 분석팀의 엑셀 노가다 늪 | "살아 숨 쉬는 1초 전 데이터가 대시보드에서 춤을 춘다" | 정체된 DB 문화를 타파하고 전사적 데이터옵스(DataOps) 생태계 점화 |
미래 전망
- 스트리밍 DB의 출현 (Materialize, ksqlDB): 지금까지는 1) 카프카(파이프)와 2) 플링크(연산 믹서기)와 3) MySQL(결과 저장소) 3개를 억지로 묶어 써야 해서 아키텍트들이 피똥을 쌌다. 3년 뒤 미래는 이거 3개를 하나로 합친 **'스트리밍 데이터베이스'**가 천하를 통일한다. 그냥 DB에다 대고 쌩
SELECT쿼리를 하나 날려놓고 퇴근한다. 이 쿼리는 죽지 않고 24시간 살아서 빙글빙글 돈다(Materialized View). 밖에서 이벤트 데이터가 1초에 1만 번씩 폭포수처럼 쏟아져 들어올 때마다, 이 살아있는 쿼리가 공중에서 데이터를 씹어 먹으며 **100만 유저의 랭킹 보드를 0.001초마다 끊임없이 실시간 갱신(Push)**해 주는 궁극의 무(無)지연 상태 머신 아키텍처가 온다. - AI 추론(Inference)의 인-스트림(In-Stream) 융합: 이제 스트림 파이프 중간에서 덧셈 뺄셈만 하지 않는다. 1초에 10만 건 쏟아지는 로그 파이프의 한가운데, 수십억 개의 파라미터를 가진 **딥러닝 AI 모델 뇌를 통째로 이식(Embedding)**한다. 날아가는 10만 건의 트래픽을 AI가 허공에서 실시간으로 스캔하며 "저 놈의 마우스 클릭 속도를 보니 1초 뒤에 결제 사기를 칠 해커 봇(Bot)이다!" 라고 인지하고 패킷이 우리 DB에 닿기도 전에 허공에서 태워버리는 초인지적(Cognitive) 방화벽(WAF) 시대로 진입하고 있다.
참고 표준
- Apache Kafka / Flink / Spark Streaming: 스트림 프로세싱 우주를 세 갈래로 찢어서 지배하고 있는 3대 신(God)들. Flink는 "단 1ms의 딜레이도 빡친다"는 극단적 리얼타임, Spark는 "기존 빅데이터 배치(Hadoop) 툴이랑 섞어 쓰자"는 범용성, Kafka Streams는 "가볍게 카프카 생태계 안에서 끝내자"는 경량성을 무기로 싸우고 있다.
- Reactive Streams: "수만 개의 물줄기가 쏟아지는데, 받는 놈(소비자)이 소화를 못 해서 뻗으면 어떡해?!" 이 끔찍한 병목 현상을 막기 위해, 소비자가 "야! 나 배부르니까 물줄기(Stream) 쏘는 속도 좀 줄여!(Backpressure, 배압)"라고 멱살을 잡고 역으로 통제할 수 있게 만든 전 우주 비동기 스트리밍의 절대 안전 헌장.
이벤트 버스(Event Bus) 및 스트림 프로세싱(Stream Processing)은 소프트웨어 공학이 **"죽은 데이터(Data at Rest)를 부검하며 통계를 내던 법의학자의 삶을 버리고, 펄펄 끓으며 튀어 오르는 살아있는 데이터(Data in Motion)의 핏줄에 튜브를 꽂아 그 생명력 자체를 비즈니스의 에너지로 즉시 태워버리는 뱀파이어의 삶"**으로 진화한 거대한 아키텍처의 혁명이다. 과거의 데이터는 창고(DB)에 쌓이는 짐 덩어리였다면, 스트림 프로세싱 시대의 데이터는 그 자체가 움직이며 회로를 돌리고 방아쇠를 당기는 살아 숨 쉬는 전원(Power)이다. 기술사는 100만 유저의 마우스 클릭 하나하나를 하찮은 로그로 취급해 하드디스크에 파묻어선 안 된다. 그 클릭 1번을 나비의 날갯짓(Event)으로 승격시켜 무한한 허공(Event Bus)으로 쏘아 올리고, 그 수천만 개의 날갯짓이 허공에서 부딪히고 융합하여 '결제 사기범 차단'이나 '초개인화 상품 추천'이라는 거대한 비즈니스 태풍(Intelligence)으로 변모해 0.1초 만에 경쟁사의 목줄을 끊어내는 마에스트로(Maestro). 그것이 스트림 시대를 지배하는 아키텍트의 극강의 쾌감이다.
- 📢 섹션 요약 비유: 일반 DB 배치(Batch) 처리는 어획한 물고기를 **'냉동 창고에 1년 치 차곡차곡 얼려두었다가, 명절에 한 번에 꺼내서 통조림으로 가공하는 통조림 공장'**입니다. 안전하고 대량 처리가 되지만 물고기(데이터)의 신선함(가치)은 죽어버립니다. 스트림 프로세싱은 바다 한가운데 떠 있는 **'참치 해체쇼 유람선'**입니다. 바다(사용자)에서 팔딱거리는 참치(이벤트)가 배 위로 튀어 올라오는 그 1초의 찰나! 공중에 뜬 참치를 칼집(로직)으로 10등분 하여 뱃살(결제 데이터)은 회로, 꼬리(로그)는 매운탕으로 0.1초 만에 분리해 내어 기다리는 손님(비즈니스 부서)의 입에 즉시 처넣어주는 가장 신선하고도 파괴적인 극한의 퍼포먼스 공학입니다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 이벤트 기반 아키텍처 (EDA) | 스트림 프로세싱이 돌아가기 위해 무조건 깔려있어야 하는 거대한 십자가 뼈대. 50개 마이크로서비스가 지들끼리 쏘아 올리는 수만 개의 전단지(이벤트) 뭉치 자체가 이 믹서기(스트림)의 유일한 식재료다. (이전 장 538번) |
| 비동기 통신 (메시지 큐 / 카프카) | A서버가 B서버에 동기(REST API)로 기다리지 않고 허공에 툭 던져버리는 쿨한 통신망. 이 허공(카프카)이 바로 1초에 100만 건의 트래픽을 완충(Buffering)해주어 스트림 엔진이 뻗지 않게 돕는 댐이다. (이전 장 536번) |
| 마이크로서비스 분해 (MSA) | 1통짜리 뚱뚱한 괴물을 50개로 찢어놓았기에 서로 쉴 새 없이 카톡(Event)을 주고받게 된 재앙. 이 50명 카톡방의 대화 내용을 허공에서 낚아채 빅데이터 통계를 내주는 놈이 스트림 프로세싱이다. (이전 장 532번) |
| 사이버 레질리언스 (회복 탄력성) | 스트림 프로세싱 노드(서버)가 벼락을 맞아 죽었다! 다시 살아났을 때 아까 처리하다 만 데이터 3개를 다시 줏어먹을 수 있는가? Flink의 체크포인트(Checkpoint) 흑마법이 이 불멸성을 보장한다. (이전 장 519번 연계) |
| 보안 로깅 및 모니터링 (SIEM) | 1초에 1억 건 떨어지는 해킹 로그 텍스트를 스트림 프로세싱 믹서기에 넣고 갈아버린다. "어? 3번 IP가 1분 내에 비밀번호 100번 틀렸네(Windowing)?" 기계가 패턴을 묶어서 즉시 알람을 울려주는 감시탑의 뇌. (이전 장 526번) |
👶 어린이를 위한 3줄 비유 설명
- 옛날엔 농장 아저씨(서버)가 바구니에 사과 1만 개(데이터)가 꽉 찰 때까지 하루 종일 기다렸다가, 밤이 되어서야 썩은 사과를 한 번에 골라내서 버렸어요(배치 처리, 너무 늦음!).
- 그런데 새로 발명한 **'초능력 공중제비 컨베이어 벨트(이벤트 버스)'**는 사과가 나무에서 떨어져서 공중을 날아가는 그 0.1초의 짧은 시간에!
- 공중에 달린 기계 칼날(스트림 프로세싱)이 빛의 속도로 썩은 사과만 골라서 허공에서 바로 갈아 없애버리고, 싱싱한 사과만 땅에 예쁘게 착지하게 해주는 엄청나게 빠르고 똑똑한 실시간 마술 장치랍니다!