핵심 인사이트 (3줄 요약)

  • 본질: 이벤트 시간(Event Time)은 이벤트가 실제로 발생한 시각(데이터 내 타임스탬프)이고, 처리 시간(Processing Time)은 스트리밍 시스템이 해당 이벤트를 처리한 시각(시스템 시계)으로, 네트워크 지연·장애·배치 재처리 등에 의해 둘 사이에 수 분~수 시간의 차이(지연)가 생긴다.
  • 가치: 사기 탐지·세금 계산·SLA 측정 등 비즈니스 로직이 "언제 일어난 일인가"에 의존할 때는 이벤트 시간이 필수이며, 처리 시간은 구현이 단순하지만 지연된 이벤트로 인해 집계 결과가 틀릴 수 있다.
  • 판단 포인트: 이벤트 시간 처리는 Watermark (워터마크)를 통해 "얼마나 늦은 이벤트까지 기다릴 것인가"를 결정해야 하며, 이는 정확성(Accuracy)과 지연(Latency)의 트레이드오프로 워터마크가 클수록 정확하지만 늦게 결과가 나온다.

Ⅰ. 개요 및 필요성

1. 시간 개념의 중요성

스트리밍 처리에서 "시간"은 단순한 타임스탬프가 아니라 집계 결과의 정확성을 결정하는 핵심 기준이다.

실제 발생 타임라인:
10:00:00 - 이벤트 A 발생 (디바이스 타임스탬프)
10:00:05 - 이벤트 B 발생
10:00:10 - 이벤트 C 발생

시스템 수신 타임라인 (네트워크 지연으로):
10:00:12 - 이벤트 A 도착 (12초 지연)
10:00:13 - 이벤트 C 도착 (3초 지연)
10:00:25 - 이벤트 B 도착 (20초 지연 - IoT 신호 불안정)

처리 시간 기준으로 집계하면: 이벤트 A와 C가 같은 윈도우, B는 다른 윈도우 이벤트 시간 기준으로 집계하면: A, B, C가 모두 같은 10초 윈도우 (실제 발생 시간 기준)

시간 개념정의특징
Event Time이벤트 데이터 내 타임스탬프정확한 비즈니스 시간, 지연 이벤트 처리 필요
Processing Time시스템이 이벤트를 처리한 시각간단, 빠름, 재처리 시 결과 다를 수 있음
Ingestion Time이벤트가 소스 연산자에 들어온 시각Event Time과 Processing Time의 중간

📢 섹션 요약 비유

이벤트 시간은 "편지에 적힌 작성 날짜", 처리 시간은 "우체국 스탬프 날짜"이다. 편지가 늦게 도착해도 작성 날짜(이벤트 시간)로 정렬하면 올바른 순서가 된다.


Ⅱ. 아키텍처 및 핵심 원리

1. 이벤트 시간 vs 처리 시간 집계 차이

이벤트 스트림 (도착 순서):
──────────────────────────────────────────────────────────
시간축(시스템):  10:00   10:05   10:10   10:15   10:20
                  │       │       │       │       │
이벤트(처리시간): [A]     [C]     [B]              [D]
이벤트 시간:      A=10:00 C=10:08 B=10:03         D=10:18
                  ↑       ↑       ↑
                  도착                 20초 지연 후 도착

[처리 시간 기준 10분 윈도우]
  윈도우 1 (10:00~10:10): A, C, B
  윈도우 2 (10:10~10:20): D

[이벤트 시간 기준 10분 윈도우]
  윈도우 1 (10:00~10:10): A, B, C (B는 10:03에 발생)
  윈도우 2 (10:10~10:20): D
  → 더 정확! (B가 올바른 윈도우에 포함됨)
// 처리 시간 윈도우 (간단, 빠름)
stream
    .keyBy(e -> e.getUserId())
    .window(TumblingProcessingTimeWindows.of(Time.minutes(5)))
    .sum("amount");
// 이벤트 시간 + Watermark 설정
WatermarkStrategy<Event> strategy = WatermarkStrategy
    .<Event>forBoundedOutOfOrderness(Duration.ofSeconds(5))  // 최대 5초 지연 허용
    .withTimestampAssigner((event, ts) -> event.getTimestamp());  // 이벤트 타임스탬프 추출

DataStream<Event> withTimestamps = stream
    .assignTimestampsAndWatermarks(strategy);

// 이벤트 시간 기준 집계
withTimestamps
    .keyBy(e -> e.getUserId())
    .window(TumblingEventTimeWindows.of(Time.minutes(5)))
    .sum("amount");

4. 비교 테이블

항목이벤트 시간처리 시간
정확성높음 (실제 발생 시간 기준)낮음 (도착 지연 영향)
구현 복잡도높음 (Watermark 설정 필요)낮음
재처리 결정론성동일한 결과 보장실행 시점마다 다를 수 있음
지연 허용Watermark로 조절없음 (도착 즉시 처리)
적합한 사용 사례사기 탐지, 청구, SLA 측정모니터링 대시보드, 실시간 알림

📢 섹션 요약 비유

처리 시간은 "택배 배송 완료 시간으로 정렬하는 것", 이벤트 시간은 "주문서에 적힌 주문 날짜로 정렬하는 것"이다. 배송이 늦었어도 주문 날짜 기준으로 순서를 매겨야 고객에게 올바른 영수증이 나온다.


Ⅲ. 비교 및 연결

1. 지연 이벤트(Late Data) 처리 전략

이벤트 시간 처리에서 Watermark 이후에 도착한 이벤트는 "지연 이벤트(Late Event)"다. 처리 옵션:

  1. 무시(Drop): 기본 동작 — 이미 닫힌 윈도우의 지연 이벤트는 버림
  2. Side Output: 지연 이벤트를 별도 스트림으로 분기하여 이후 처리
  3. 허용 지연 시간 확장: allowedLateness(Time.minutes(5)) — 윈도우를 조금 더 열어둠
// 지연 이벤트 Side Output 처리
OutputTag<Event> lateTag = new OutputTag<Event>("late-data"){};

SingleOutputStreamOperator<Result> main = stream
    .keyBy(e -> e.getUserId())
    .window(TumblingEventTimeWindows.of(Time.minutes(5)))
    .allowedLateness(Time.minutes(1))    // 윈도우 닫힌 후 1분 더 허용
    .sideOutputLateData(lateTag)         // 그 이후는 side output으로
    .sum("amount");

DataStream<Event> lateEvents = main.getSideOutput(lateTag);  // 늦은 이벤트 별도 처리

2. 연결 개념

  • Watermark: 이벤트 시간 처리의 핵심 — 지연 이벤트 허용 임계값
  • Window Operations: 이벤트 시간 기반 윈도우의 정확성을 위한 기반
  • Exactly-Once: 이벤트 시간 재처리 시 결정론적 결과 보장

📢 섹션 요약 비유

지연 이벤트 처리는 "늦게 도착한 참가자를 어디까지 허용하는 경기"와 같다. 5분까지 늦게 온 사람은 참가 허용(allowedLateness), 그 이상 늦은 사람은 대기실(side output)에서 따로 처리한다.


Ⅳ. 실무 적용 및 기술사 판단

1. 시간 모드 선택 가이드

비즈니스 요구사항시간 모드 선택 이유
월말 청구서 집계이벤트 시간 — 발생 일자 기준 집계
실시간 사기 탐지이벤트 시간 — 짧은 시간 내 패턴 감지
운영 대시보드 (현재 상태)처리 시간 — 지금 이 순간의 상태
IoT 센서 이상 탐지이벤트 시간 — 센서 발생 시간 기준
로그 집계 리포트이벤트 시간 — 로그 발생 시각 기준 통계

2. 체크리스트

  • 이벤트 데이터에 타임스탬프 필드 포함 여부 확인
  • 타임존 처리: UTC 기준 저장 권장
  • Watermark 크기: 네트워크 지연 측정 후 P99 지연보다 약간 크게 설정
  • 장애 후 재처리 시 이벤트 시간 사용으로 결정론적 결과 보장
  • Side Output으로 지연 이벤트 모니터링 (지연 비율 SLA 관리)

📢 섹션 요약 비유

이벤트 시간/처리 시간 선택은 "역사책 vs 일기"의 차이다. 역사책은 사건이 일어난 날짜(이벤트 시간)로 기록하고, 일기는 오늘 내가 경험한 것(처리 시간)을 적는다. 나중에 다시 읽을 때 "그 사건은 언제 일어났나"를 알려면 역사책이 더 정확하다.


Ⅴ. 기대효과 및 결론

1. 기대효과

이벤트 시간 사용 시설명
비즈니스 정확도 향상발생 시간 기준 집계로 올바른 리포트
재처리 안전성동일한 데이터 재처리 시 동일한 결과
지연 허용 유연성Watermark로 정확도-지연 균형 조절

2. 결론

이벤트 시간 vs 처리 시간의 선택은 **"얼마나 정확한 비즈니스 시간 기반 분석이 필요한가"**에 달려 있다. 기술사 답안에서는 두 개념의 정의, 지연(Skew)이 발생하는 원인, Watermark를 통한 이벤트 시간 처리 메커니즘, 그리고 지연 이벤트 처리 전략(Side Output, allowedLateness)을 함께 서술해야 한다.

📢 섹션 요약 비유

이벤트 시간은 "과거를 정확히 재구성하는 역사가의 도구"이고, 처리 시간은 "지금 이 순간을 빠르게 기록하는 저널리스트의 도구"다. 정확한 역사서(이벤트 시간 집계)를 쓰려면 느려도 출처를 확인해야 하고, 속보(처리 시간 모니터링)는 빠르게 발행해야 한다.


📌 관련 개념 맵

개념관계설명
Watermark이벤트 시간의 핵심 도구지연 허용 임계값 정의
Window Operations적용 대상이벤트 시간 기반 윈도우 집계
Side Output지연 이벤트 처리늦게 도착한 데이터의 대안 처리 경로
Exactly-Once재처리 보장이벤트 시간 사용 시 결정론적 결과
Flink Savepoint연동 개념이벤트 시간 기반 재처리를 위한 상태 보존

📈 관련 키워드 및 발전 흐름도

[스트림 데이터 수집]
    │
    ▼
[처리 시간(Processing Time)]
    │
    ▼
[이벤트 시간(Event Time)]
    │
    ▼
[워터마크(Watermark)]
    │
    ▼
[지연 데이터 처리]

스트림 처리는 처리 시간에서 이벤트 시간과 워터마크 중심으로 발전했다.

👶 어린이를 위한 3줄 비유 설명

이벤트 시간은 "편지에 쓰여 있는 날짜"이고, 처리 시간은 "편지가 우체통에 도착한 날짜"예요. 편지가 눈보라로 늦게 왔더라도 편지에 적힌 날짜(이벤트 시간)로 정렬해야 "어떤 순서로 일어난 일인지" 알 수 있어요. 처리 시간으로 정렬하면 눈보라 때문에 늦게 온 편지가 나중에 쓴 것처럼 보여서 틀린 답이 나올 수 있답니다!