배치 처리와 스트림 처리란?
데이터를 처리하는 방식은 크게 두 가지로 나뉩니다. 배치 처리(Batch Processing)는 일정량의 데이터를 모아두었다가 정해진 시점에 한꺼번에 처리하는 방식이고, 스트림 처리(Stream Processing)는 데이터가 발생하는 즉시 하나씩(또는 아주 작은 단위로) 실시간으로 처리하는 방식입니다.
비유하자면 배치 처리는 ‘세탁물을 모아뒀다가 세탁기 한 번 돌리기’와 같고, 스트림 처리는 ‘흐르는 물을 그때그때 걸러내는 정수 필터’와 같습니다. 전자는 효율적이지만 즉시성이 떨어지고, 후자는 즉각적이지만 시스템 부담이 지속적으로 발생합니다.
동작 방식과 대표 예시
배치 처리는 하루 매출 데이터를 새벽에 모아서 정산 리포트를 생성하거나, 대량의 로그 파일을 모아 통계를 내는 작업에 적합합니다. 대표적인 도구로는 Apache Hadoop, Apache Spark(배치 모드), 크론잡 기반 배치 스크립트 등이 있습니다.
반면 스트림 처리는 사용자의 클릭 이벤트를 실시간으로 분석하거나, 이상 거래를 즉시 탐지하는 부정거래 탐지(FDS) 시스템처럼 ‘지금 당장’ 반응이 필요한 경우에 사용됩니다. 대표 도구로는 Apache Kafka Streams, Apache Flink, Spark Streaming 등이 있습니다.
두 방식의 핵심 차이는 ‘지연 시간(latency)’입니다. 배치는 분 단위, 시간 단위, 하루 단위로 지연이 발생해도 괜찮은 작업에 쓰이고, 스트림은 밀리초~초 단위의 즉각적인 처리가 필요한 작업에 쓰입니다.
실무에서는 무엇을 선택해야 할까
선택 기준은 결국 ‘얼마나 빠른 반응이 필요한가’와 ‘데이터 처리 비용을 어떻게 최적화할 것인가’입니다.
- 월간 정산, 통계 리포트처럼 즉시성이 필요 없다면 배치 처리가 비용 효율적입니다.
- 이상 탐지, 실시간 대시보드, 알림 시스템처럼 즉각 반응이 중요하다면 스트림 처리가 필수적입니다.
- 두 방식을 함께 쓰는 ‘람다 아키텍처’나 ‘카파 아키텍처’를 채택해 실시간성과 정확한 대용량 처리를 동시에 잡는 경우도 많습니다.
결국 정답은 하나가 아니라 서비스의 요구사항에 달려 있습니다. 무조건 실시간 처리를 도입하기보다, 실제로 즉시성이 비즈니스 가치를 만드는지 먼저 따져보는 것이 중요합니다.