Data-Flow Architecture

Data-Flow Architecture 는 소프트웨어 시스템을 데이터 변환의 연속으로 모델링하는 아키텍처 패턴이다. Batch Sequential, Pipe-and-Filter, Process Control 의 세 가지 주요 유형으로 분류되며, 각각 다른 실행 방식과 적용 영역을 갖는다. 이 아키텍처는 높은 모듈성, 재사용성, 병렬처리 가능성을 제공하지만 동적 상호작용과 상태 공유에 제약이 있다. 현대의 빅데이터 처리, 실시간 스트림 분석, 마이크로서비스 아키텍처에서 핵심적인 역할을 담당한다.

배경

목적 및 필요성

핵심 개념

Data-Flow Architecture는 시스템을 데이터의 흐름 중심으로 구성하며, 각 연산 단위를 모듈화하여 독립적으로 실행하고 연결하는 구조이다.
주요 구현 방식에는 Batch Sequential, Pipe-and-Filter, Process Control 이 있으며, 데이터 파이프라인, 스트리밍 처리, IoT, ETL 시스템 등 실무 전반에 널리 활용된다.

기본 개념

항목설명
데이터 중심 구동연산 순서가 고정되지 않고, 데이터의 도착에 따라 실행 흐름이 결정됨
Pipe-and-Filter 패턴데이터 처리 필터들이 파이프를 통해 연결되어 흐름을 구성
Batch Sequential순차적인 배치 처리 기반 구성: 이전 모듈이 끝나야 다음 단계 실행
Process Control제어 로직 분리 및 제어 루프 구성 (제어 유닛 ↔ 처리 유닛 분리)
모듈 병렬성각 필터 (모듈) 는 독립적이고 병렬적으로 실행 가능

이론적 관점

항목설명
데이터 중심 설계시스템 주요 설계 단위가 기능보다 데이터 흐름에 집중됨
컴포넌트 독립성각 필터는 입력 → 처리 → 출력의 독립적 실행 단위를 형성
비동기 처리 지원각 컴포넌트는 이벤트/데이터 도착 즉시 처리, 전체 시스템은 비동기적으로 작동

실무적 관점

항목설명
확장성필터 단위로 구성되어, 새로운 처리 로직 추가/교체가 쉬움
재사용성각 필터는 독립적으로 개발 및 테스트 가능
분산 처리필터 단위로 멀티노드에 분산 배치 가능
스트리밍 적합성실시간 분석 및 데이터 스트리밍 환경에 최적화

아키텍처 유형별 상세 특징

Batch Sequential

요소설명
배치 처리데이터를 일정 단위로 묶어 순차적으로 처리
순차 실행완료 → 다음 단계 방식의 단방향 흐름

Pipe-and-Filter

요소설명
파이프데이터 이동 경로 역할 (필터 간 연결)
필터입력 → 처리 → 출력 수행하는 모듈
스트림 처리데이터 스트림이 필터 체인을 통해 실시간 처리됨

Process Control

요소설명
제어 변수시스템 상태를 제어하는 파라미터
피드백 루프출력이 다시 입력에 영향을 미치는 순환 구조 (제어 시스템에서 자주 사용됨)

실무 구현 연관성 및 적용 기술

영역설명
ETL/ELT 파이프라인Pipe-and-Filter 패턴 기반으로 모듈화된 데이터 전처리 구성
Kafka / Flink / Spark StreamingStream Processing 기반의 실시간 파이프라인 처리 구조
IoT 제어 시스템Process Control 패턴 활용하여 센서 제어/모니터링 구성
데이터 파이프라인 일반데이터 중심 흐름을 설계하여 확장성과 유지보수 용이성 확보

성능 및 운영 관점의 주요 개념

항목설명
병렬 처리여러 필터가 동시에 작동하여 처리량 (throughput) 향상
파이프라이닝각 필터가 동시다발적으로 다른 데이터 세트를 처리
백프레셔 (Backpressure)데이터 처리 속도 차이로 인한 압력 조정 메커니즘
오류 격리각 필터에서 발생한 오류는 독립적으로 처리 가능
데이터 형식 표준화필터 간 데이터 교환을 위한 공통 포맷 유지 필요
상태 관리Stateless 설계 권장되며, 필요 시 상태 공유 전략 설계 필요

주요 기능 및 역할

graph LR
    A[입력 데이터] --> B[변환 모듈 1]
    B --> C[변환 모듈 2]
    C --> D[변환 모듈 3]
    D --> E[출력 데이터]
    
    F[제어 정보] --> B
    F --> C
    F --> D

주요 기능:

특징

특징설명
데이터 중심성데이터의 흐름이 시스템 구조를 결정
독립성각 처리 단계가 독립적으로 동작
변환 지향데이터의 점진적 변환에 중점
재사용성필터의 다양한 조합으로 재사용 가능
확장성필터 추가/제거를 통한 유연한 확장

핵심 원칙

  1. 단일 책임 원칙: 각 필터는 하나의 명확한 기능만 수행
  2. 데이터 무결성: 각 단계에서 데이터의 정확성과 일관성 유지
  3. 느슨한 결합: 필터 간 최소한의 의존성 유지
  4. 표준화된 인터페이스: 모든 필터가 동일한 입출력 형식 사용
  5. 오류 격리: 한 필터의 오류가 다른 필터에 전파되지 않도록 격리

주요 원리

flowchart TD
    subgraph "Batch Sequential"
        A1[배치 1] --> B1[처리 모듈 1]
        B1 --> C1[완료]
        C1 --> A2[배치 2]
        A2 --> B2[처리 모듈 2]
        B2 --> C2[완료]
    end
    
    subgraph "Pipe and Filter"
        D1[데이터 스트림] --> E1[필터 1]
        E1 --> F1[파이프 1]
        F1 --> E2[필터 2]
        E2 --> F2[파이프 2]
        F2 --> E3[필터 3]
        E3 --> G1[출력 스트림]
    end
    
    subgraph "Process Control"
        H1[제어 변수] --> I1[컨트롤러]
        I1 --> J1[처리 유닛]
        J1 --> K1[피드백]
        K1 --> I1
    end

Batch Sequential 방식:

  1. 전체 데이터를 배치 단위로 분할
  2. 각 배치를 순차적으로 처리 모듈에 전달
  3. 이전 배치 처리 완료 후 다음 배치 시작
  4. 모든 배치 처리 완료 후 결과 통합

Pipe-and-Filter 방식:

  1. 데이터 스트림이 첫 번째 필터로 전달
  2. 각 필터가 데이터를 변환하여 파이프로 출력
  3. 파이프가 데이터를 다음 필터로 전송
  4. 모든 필터 처리 완료 후 최종 결과 생성

Process Control 방식:

  1. 제어 변수가 시스템 상태를 모니터링
  2. 컨트롤러가 현재 상태와 목표 상태 비교
  3. 처리 유닛이 필요한 조정 작업 수행
  4. 피드백을 통해 결과를 컨트롤러로 전달

작동 원리 및 주요 원리

flowchart LR
    A["데이터 소스 (Pump)"]
    subgraph Pipeline
      F1[Filter 1] --> F2[Filter 2] --> F3[Filter 3]
    end
    A --> Pipeline --> B(데이터 싱크)

구조 및 아키텍처

Data-Flow Architecture 의 전체 구조:

graph TB
    subgraph "Data Flow Architecture"
        subgraph "입력 계층"
            A[데이터 소스 1]
            B[데이터 소스 2]
            C[데이터 소스 N]
        end
        
        subgraph "처리 계층"
            D[추출 필터]
            E[변환 필터]
            F[정제 필터]
            G[집계 필터]
        end
        
        subgraph "전송 계층"
            H[파이프 1]
            I[파이프 2]
            J[파이프 3]
        end
        
        subgraph "출력 계층"
            K[데이터 웨어하우스]
            L[데이터 레이크]
            M[실시간 대시보드]
        end
        
        A --> D
        B --> D
        C --> D
        
        D --> H
        H --> E
        E --> I
        I --> F
        F --> J
        J --> G
        
        G --> K
        G --> L
        G --> M
    end

구성 요소

구분구성요소기능역할특징
필수데이터 소스 (Data Source)데이터 생성 및 제공시스템의 입력점 역할다양한 형태의 데이터 지원
필터 (Filter)데이터 처리 및 변환핵심 비즈니스 로직 수행독립적이고 재사용 가능
파이프 (Pipe)데이터 전송필터 간 데이터 연결버퍼링 및 동기화 제공
데이터 싱크 (Data Sink)최종 결과 저장시스템의 출력점 역할다양한 저장 형식 지원
선택모니터링 시스템성능 및 상태 감시시스템 안정성 보장실시간 알림 및 로깅
오류 처리기예외 상황 처리시스템 복원력 향상자동 복구 및 재시도
캐시 시스템임시 데이터 저장성능 최적화빠른 데이터 접근
스케줄러배치 작업 관리자동화된 실행 제어시간 기반 트리거

구현 기법

 카테고리  구현 기법  핵심 개념 / 정의  주요 도구·기술  주요 목적  대표 실전 사례  장·단점 요약 
처리 모델 (Processing Models)Batch Processing일정 주기마다 대량 데이터를 일괄 처리Apache Spark, Hadoop, Airflow대용량 ETL·집계자정 전날 트랜잭션 ETL✔ 대량·복잡 계산 최적
✘ 지연 (latency) 큼
Stream Processing데이터 도착 즉시 실시간 처리Kafka/Flink, Kinesis, Spark Structured Streaming실시간 분석·경보IoT 센서 실시간 집계✔ 저지연·즉각 대응
✘ 처리 순서·정확도 관리 필요
Micro‑Batch (Spark Streaming 등)수초 단위 미니 배치로 실시간성↑·모델 단순화Spark, Storm Tridentnear‑real‑time ETL실시간 IoT 로그 정제✔ 모델·코드 재사용 ↑
✘ 완전 실시간 대비 약간 지연
하이브리드 아키텍처Lambda ArchitectureBatch + Speed Layer 이중 파이프라인Hadoop (Spark) + Flink/Kafka정확성 + 즉시성추천 엔진 재계산✔ 정밀·실시간 균형
✘ 이중 코드, 운용 복잡
Kappa Architecture스트림 단일 레이어로 재처리까지 해결Kafka + Flink단순성·재처리 용이실시간 로그 플랫폼✔ 단일 코드 기반
✘ 과거 데이터 재처리 비용 ↑
오케스트레이션 & 워크플로Workflow OrchestrationDAG 기반 작업 순서·의존성·재시도 관리Airflow, Dagster, NiFi, AWS Step Functions파이프라인 자동화·운영종속성 많은 ETL DAG✔ 리트라이·모니터링 내장
✘ 운용 메타스토어 필요
실행 모델 (Execution Models)Token‑Based / Data‑Driven토큰 (데이터) 도착이 연산 트리거 → 자연 병렬TStreams, StreamC, Google Dataflow SDK코어 병렬 알고리즘·DSPFPGA/DSP 데이터플로 컴파일✔ 최대 병렬도
✘ 디버깅 난이도
Process Control제어 루프·피드백 기반 데이터‑제어 분리PLC, SCADA, ROS2IoT·산업 제어공정 자동화, 로봇 제어✔ 실시간 안전제어
✘ 하드 RT 보장 필요
인프라 & 통신Event‑Driven Microservices각 단계 독립 서비스 + 메시지 브로커gRPC/REST + Kafka, NATS독립 배포·스케일주문/결제 이벤트 파이프라인✔ 팀 단위 자율성 ↑
✘ 관측성·계약 관리 필수
운영 보조 기술Backpressure & Flow‑Control필터 간 속도 차를 제어해 버퍼 폭주 방지Reactive Streams, Flink Watermarks시스템 안정성대용량 로그 스트림✔ 메모리 보호
✘ 조정 파라미터 복잡
State Management무상태 권장, 필요 시 외부 상태 저장소RocksDB, Redis, Flink State정확한 계산/재시작세션 윈도 집계✔ 정확도 ↑
✘ 상태 크기·복제 비용

Batch Processing (Apache Spark 활용)

예시: PySpark 를 활용한 일괄 ETL 처리

1
2
3
4
5
6
7
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("daily_etl").getOrCreate()
df = spark.read.csv("s3://bucket/raw/transactions.csv", header=True, inferSchema=True)
df_clean = df.filter(df['amount'] > 0).select("id","amount","timestamp")
df_clean.write.mode("overwrite").parquet("s3://bucket/processed/transactions/")
spark.stop()

예시: Java + Flink 기반 실시간 스트림 처리

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Properties props = new Properties();
props.setProperty("bootstrap.servers", "localhost:9092");
props.setProperty("group.id", "flink-group");
DataStream<String> stream = env.addSource(new FlinkKafkaConsumer<>("input-topic", new SimpleStringSchema(), props));
DataStream<String> processed = stream
    .filter(s -> s.contains("error"))
    .map(s -> s.toUpperCase());
processed.addSink(new FlinkKafkaProducer<>("output-topic", new SimpleStringSchema(), props));
env.execute("Kafka-Flink Stream");

Hybrid (Lambda / Kappa Architectures)

Workflow Orchestration (Airflow DAG 예시)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from airflow import DAG
from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator
from airflow.utils.dates import days_ago

dag = DAG('etl_dag', start_date=days_ago(1), schedule_interval="@daily")

spark_task = SparkSubmitOperator(
    task_id="spark_etl",
    application="/scripts/daily_etl.py",
    conn_id="spark_default",
    dag=dag
)

Token-Based / Data‑Driven Execution

Process Control (산업 & IoT 시스템)

Event‑Driven Microservices (Kafka + Microservices)

Backpressure & State Management

장점

카테고리항목설명기여 요인
설계적 가치낮은 결합도필터 간 인터페이스 최소화로 각 컴포넌트가 독립적으로 동작흐름 중심 설계, 명확한 데이터 인터페이스
모듈화각 필터는 독립적으로 개발·테스트·배포 가능컴포넌트 독립성
유연한 확장성새로운 필터의 삽입/삭제/교체가 용이하며 시스템 기능 확장에 유리느슨한 결합 구조, 단방향 흐름 기반
운영적 효율성병렬 처리 가능독립적인 필터를 멀티스레드 또는 분산 환경에서 병렬 처리 가능병렬성 설계, 비동기 실행 기반
고처리량 처리모듈 단위로 최적화 및 부하 분산 가능, 대규모 데이터 처리에 적합비동기/스트리밍 처리 구조
유연한 실행 모델배치 처리와 스트리밍 처리 방식 모두 지원 가능파이프라인 흐름에 기반한 유연한 제어
개발 생산성재사용성동일 필터 로직을 여러 워크플로우 또는 시스템 간에 공유 가능컴포넌트화된 필터 구조
유지보수 용이성문제 발생 시 해당 필터만 수정/대체 가능, 영향 범위 최소화모듈화된 구조, 필터 단위 테스트 용이성
디버깅 및 검증 용이성각 단계에서 데이터 로깅, 검증 포인트 설정 가능 → 오류 추적 및 분석에 유리파이프라인 구성의 투명성, 필터별 데이터 관찰 가능
테스트 용이성유닛 단위 테스트가 가능하여 CI/CD 파이프라인과 통합에 유리단일 책임 원칙, 독립 컴포넌트 구성

단점과 문제점 그리고 해결방안

단점

카테고리항목설명대표 해결 방안
구조적 복잡성흐름 제어의 복잡성조건 분기, 병합, 이벤트 기반 흐름이 복잡하게 설계됨조건 라우팅 필터, Flow Controller 도입
상호작용 제한동적 상호작용 제약필터 간 동기식 호출, 상태 공유가 어려움메시지 브로커 (예: Kafka), 상태 저장소 (Redis 등) 활용
유지보수 비용파이프라인 확장 시 관리 비용 증가대형 파이프라인은 필터 수 증가로 복잡해지고 디버깅 난이도 상승모듈화된 관리 도구 (Airflow, NiFi), 분리된 필터 디버깅 도입
상태 관리 한계상태 보존이 어려움무상태 구조로 인해 이벤트 순서 보장, 세션 상태 관리가 복잡체크포인트, 이벤트 소싱, 상태 저장 스토어 (State Store) 사용
성능 문제직렬화/파싱 오버헤드파이프 간 메시지 전달에서 직렬화 비용이 누적되어 전체 처리 성능 저하 가능Protobuf, Apache Arrow 등 경량 포맷 적용
데이터 형식 문제필터 간 호환성 문제포맷/스키마 불일치 시 예외 발생 및 처리 실패 가능표준화된 데이터 포맷 사용 (Avro, JSON Schema), 어댑터 패턴 적용

문제점

카테고리문제 항목원인영향탐지 및 진단예방 방법해결 방법 및 기법
신뢰성 문제데이터 유실파이프 오류, ACK 미수신, 예외 누락분석 오류, 불완전한 결과 생성로그 모니터링, ACK 확인Retry/ACK 시스템 연동DLQ(Dead Letter Queue), 재처리 로직 구현
정확도 문제데이터 중복배치 - 스트림 중복 적재, 필터 재시도 미처리결과 왜곡, 비용 증가중복 Key 확인, 해시/타임스탬프 추적Idempotent 설계, 중복 감지 파이프라인 설정SCD2 전략, Dedup 필터 적용
성능 문제필터 병목특정 필터만 느린 처리 속도로 전체 흐름 지연파이프라인 처리 속도 저하큐 길이, 처리 시간 모니터링동시성 확장, 병렬 분산 설계Auto-scaling, 필터 리팩토링
안정성 문제장애 전파하나의 필터 오류가 전체 흐름을 차단전체 시스템 중단헬스 체크, SLA 모니터링회로 차단기 (Circuit Breaker), 필터 격리롤백, 대체 경로 우회 (Retry Path)
자원 문제메모리 누수장시간 실행 시 GC 실패, 큐 누적, 캐시 미해제시스템 다운, GC Overhead 상승Heap/GC 추적, 리소스 누수 탐지정기적 풀링 사용, 메모리 스냅샷 검증가비지 컬렉션 튜닝, 필터 내 메모리 해제 패턴 적용
일관성 문제데이터 일관성 저하필터 간 비동기 처리, 버전 불일치, 분산 동시성 이슈비일관성 결과, 데이터 정합성 상실체크섬 검증, 이벤트 순서 추적버전 태깅, 트랜잭션 경계 도입이벤트 소싱, 분산 락, 옵저버블 패턴 적용
흐름 제어 문제Backpressure 현상소비자 속도가 생산자를 따라가지 못해 큐/버퍼 초과지연 증가, OOM 발생 위험큐 길이, 처리률 모니터링적응형 처리율 조절, 임계값 설정백프레셔 제어 알고리즘 (Exponential Wait 등) 적용

도전 과제

카테고리도전 과제원인영향해결 방안 및 전략
1. 성능 및 실시간성대규모 실시간 처리 성능 저하데이터량 증가, 병렬성 부족, 지연 발생처리 병목, 실시간 분석 지연스트림 처리 프레임워크 도입 (Flink, Spark Streaming), 인메모리 처리, GPU/FPGA 활용
정확도 vs 지연 트레이드오프Lambda 아키텍처의 중복 처리 및 지연 구조정확도 희생 또는 응답 시간 지연Kappa 아키텍처 전환, 정교한 watermark 기반 처리
2. 일관성 및 상태 관리스트림 상태 불안정 및 체크포인팅 문제상태 저장소 장애, 비결정적 처리 순서데이터 손실, 재처리 실패, 재시작 불가정확한 상태 백업 관리, RocksDB 또는 External State Store 활용
분산 환경 내 데이터 일관성 보장다양한 노드/파티션에서 동시에 처리결과 불일치, 중복 또는 유실 발생Exactly-once 보장, Kafka + Flink 상태 일관성 설정
3. 데이터 품질 및 스키마 관리다양한 소스와 스키마 진화 문제형식이 상이한 이벤트, 비정형 데이터 증가분석 정확도 하락, ML 모델 학습 실패스키마 레지스트리 적용, JSON Schema/Avro 기반 유효성 검증
데이터 품질 저하이상치, 누락, 중복 데이터 유입잘못된 분석 결과, 비즈니스 오류품질 필터 삽입, Great Expectations, 데이터 리니지 추적
4. 흐름 제어 및 복잡성복잡한 분기/병합 흐름 제어다양한 조건 분기, 다중 토픽 조인, 유동적인 라우팅 구조파이프라인 오류 발생, 관리 어려움DAG 기반 정의, 라우팅 룰 표준화, Flink SQL 등 고수준 DSL 활용
마이크로서비스 결합으로 인한 복잡성서비스 간 데이터 교환 많고 흐름이 분산됨디버깅/테스트/추적 어려움서비스 메시 (Istio), Dapr, 메시지 지향 처리로 추상화
5. 모니터링 및 디버깅통합 모니터링 구성의 어려움배치, 스트림, 서빙 간 이기종 시스템 존재병목 탐지/장애 대응 지연Prometheus + Grafana, OpenTelemetry 기반 분산 추적 도입
디버깅/재현성 부족상태 기반 처리에서 재현 어려움장애 원인 분석 난이도 상승리플레이 가능한 로그 저장, 이벤트 소싱 기반 재처리 구조 도입
6. 거버넌스 및 규정 준수데이터 리니지 추적 어려움복잡한 파이프라인과 연계된 트랜스포머/모델 없음데이터 흐름 불투명 → 감사 및 규제 대응 불가OpenLineage, Marquez 등 lineage 시스템 구축
7. 비용 및 자원 관리리소스 중복 및 과소/과다 프로비저닝멀티 파이프라인/컨슈머 중복 실행클라우드 비용 폭증, CPU/MEM 낭비AutoScaler 설정, 워크로드 프로파일링, 버퍼 기반 트리거 조정

분류 기준에 따른 종류 및 유형

📌 분류 기준유형설명주요 적용 분야
1. 구조 구성 방식직렬 구조 (Serial Flow)필터/모듈이 선형적으로 연결되어 데이터를 단계별로 처리단순 파이프라인, ETL, 로그 수집
병렬 구조 (Parallel Flow)여러 필터가 병렬로 데이터 처리 → 성능 향상과 처리량 증가스트리밍 분석, 복잡한 분기 처리
혼합 구조 (Hybrid Flow)직렬과 병렬 흐름이 혼합된 복합 처리 구조대규모 데이터플로우 플랫폼, AI/ML 파이프라인
2. 실행 및 처리 방식배치 순차 처리 (Batch Sequential)일괄 수집 후 순차적으로 처리 (시간 지연 허용)DWH, 정기 리포트, 데이터 마이그레이션
파이프 - 필터 처리 (Pipe-and-Filter)필터 간 데이터 흐름이 연속적으로 이어지는 구조실시간 로그 분석, 파이프라인 변환 처리
피드백 제어 처리 (Process Control)처리 결과를 기반으로 동작을 조절하는 제어 기반 구조임베디드 시스템, 제어 자동화 시스템
3. 데이터 처리 시점실시간 (Real-time)데이터가 도착하는 즉시 처리, 초단위 이하 지연 허용금융 거래, IoT 센서 데이터 처리
준실시간 (Near real-time)몇 초 ~ 몇 분 내 처리. 일정 지연 허용추천 시스템, 이벤트 트리거, 알림 시스템
배치 처리 (Batch)데이터를 일정 주기로 일괄 처리보고서 생성, 백오피스 처리
4. 처리 아키텍처Lambda Architecture배치 + 스트림을 병합한 이중 처리 경로 구조빅데이터 통합 플랫폼, 로그 분석 시스템
Kappa Architecture스트리밍 중심 구조. 일관된 경로로 모든 데이터 처리이벤트 중심 시스템, 실시간 분석 플랫폼
Event-driven Architecture이벤트 발생을 기반으로 처리 트리거됨. 비동기 흐름에 적합마이크로서비스, SOA, 알림 시스템
5. 배포 및 환경 구성단일 시스템단일 머신/프로세스 상에서 데이터 흐름 처리로컬 테스트, 임베디드 처리
분산 시스템여러 머신에 필터/처리 노드가 분산 배치됨클러스터 기반 실시간 스트리밍, MSA 환경
컨테이너 기반 처리각 필터/연산을 컨테이너화하여 분산 오케스트레이션 처리Kubernetes 기반 데이터 파이프라인 운영

실무 사용 예시

카테고리주요 사례사용 목적함께 사용하는 기술/도구기대 효과 및 특징
데이터 처리 (ETL/ELT)BI 파이프라인 구축일 단위 데이터 집계, 클렌징, 변환Apache Airflow, Spark, dbt, Snowflake대용량 배치 처리, 유연한 스케줄링, 데이터 품질 확보
로그 데이터 적재 및 분석실시간 로그 수집, 정규화, 지표 생성Kinesis, Kafka, Logstash, Elasticsearch, Athena실시간 분석 + 장기 저장 병행 처리
실시간 스트리밍IoT 센서 모니터링온도/습도/장비 이상 탐지 등 실시간 상태 감시Kafka, Apache Flink, InfluxDB지연 1 초 이하 경보 시스템, CEP 가능
사용자 행동 분석클릭, 스크롤, 검색 로그 실시간 처리 및 세션 기반 분석Kafka, Flink, Redis Streams실시간 세션 분석, 마케팅 자동화
멀티미디어 처리이미지 및 비디오 처리변환, 필터 적용, 포맷 변경 등 스트리밍 방식의 멀티미디어 파이프라인 구성GStreamer, FFmpeg, OpenCV저지연 변환, 병렬처리 기반 스트리밍 편집
컴파일러컴파일 단계 구성소스 코드 분석 → 중간 코드 생성 → 최적화 → 코드 생성Lexer, Parser, AST, Optimizer, LLVM각 단계 독립 구성, 최적화 재사용 용이
서버/네트워크웹 서버 요청 처리요청 → 필터 체인 → 응답 패턴의 흐름 기반 처리nginx, Apache, Express.js라우팅, 인증, 압축 등 모듈화된 HTTP 요청 흐름
추천 시스템실시간/배치 하이브리드 추천이벤트 기반 피드백 반영 + 주기적 전체 모델 재학습Kafka, Spark, Batch Job, Feature Store정밀도 향상, 최신성 유지 (Lambda Architecture 활용)
시스템 자동화/유틸리티UNIX 파이프라인 처리텍스트 변환, 로그 필터링, grep/sort/awk 등 쉘 기반 파이프 연산Bash, awk, sed, grep단순한 구성으로도 효율적인 흐름 처리

활용 사례

사례 1: 실시간 로그 분석 시스템

시스템 구성:

Workflow:

graph LR
    A[로그 수집] --> B[전처리 필터]
    B --> C[분석 필터]
    C --> D[알림 필터]
    D --> E[출력]

역할:

차이점:

사례 2: Lambda 아키텍처

시스템 구성:

워크플로우:

  1. 센서·운영 로그 → Kafka
  2. Flink 로 실시간 처리
  3. Spark 배치로 전체 재계산
  4. 결과 서빙 → Elasticsearch/BW

역할:

접근 차이:

6.16 활용 사례

Netflix 의 실시간 추천 시스템

시스템 구성:
Netflix 는 사용자의 시청 행동을 실시간으로 분석하여 개인화된 추천을 제공하는 Data-Flow Architecture 를 구축했습니다.

시스템 구성 다이어그램:

graph TB
    subgraph "Netflix 추천 시스템"
        A[사용자 이벤트] --> B[이벤트 수집기]
        B --> C[Apache Kafka]
        C --> D[스트림 처리 필터]
        D --> E[특성 추출 필터]
        E --> F[ML 모델 필터]
        F --> G[추천 결과 필터]
        G --> H[캐시 레이어]
        H --> I[사용자 인터페이스]
        
        J[배치 처리] --> K[모델 훈련]
        K --> F
    end

Workflow:

  1. 사용자의 클릭, 시청, 평가 등의 이벤트 실시간 수집
  2. Kafka 를 통한 이벤트 스트림 분산 처리
  3. 스트림 처리 필터에서 이벤트 정규화 및 정제
  4. 특성 추출 필터에서 사용자 선호도 특성 계산
  5. ML 모델 필터에서 개인화 추천 생성
  6. 추천 결과 필터에서 비즈니스 규칙 적용
  7. 캐시를 통한 빠른 응답 제공

Data-Flow Architecture 의 역할:

Data-Flow Architecture 유무에 따른 차이점:

구분Data-Flow Architecture 적용전통적 아키텍처
응답 시간실시간 (< 100ms)배치 기반 (시간~일)
확장성개별 필터 독립 확장전체 시스템 확장 필요
유지보수모듈별 독립 수정전체 시스템 영향
복구 능력부분 장애 격리전체 시스템 중단
개발 속도병렬 개발 가능순차 개발 필요

6.17 구현 예시

Netflix 추천 시스템의 핵심 구성요소를 Python 으로 구현한 예시:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
import asyncio
import json
from abc import ABC, abstractmethod
from typing import Any, Dict, List, AsyncIterator
from dataclasses import dataclass
from datetime import datetime

# 기본 필터 인터페이스 정의
class Filter(ABC):
    """Data-Flow Architecture의 기본 필터 인터페이스"""
    
    @abstractmethod
    async def process(self, data: Any) -> Any:
        """데이터 처리 메서드"""
        pass

# 파이프 구현 - 필터 간 데이터 전송
class Pipe:
    """필터 간 데이터 전송을 담당하는 파이프"""
    
    def __init__(self, buffer_size: int = 1000):
        self.queue = asyncio.Queue(maxsize=buffer_size)
    
    async def send(self, data: Any):
        """데이터 전송"""
        await self.queue.put(data)
    
    async def receive(self) -> Any:
        """데이터 수신"""
        return await self.queue.get()

# 사용자 이벤트 데이터 구조
@dataclass
class UserEvent:
    user_id: str
    content_id: str
    event_type: str  # 'view', 'click', 'rate'
    timestamp: datetime
    duration: float = 0.0
    rating: float = 0.0

# 1. 이벤트 수집 필터
class EventCollectorFilter(Filter):
    """사용자 이벤트를 수집하고 정규화하는 필터"""
    
    async def process(self, raw_event: Dict[str, Any]) -> UserEvent:
        """원시 이벤트를 UserEvent 객체로 변환"""
        try:
            event = UserEvent(
                user_id=raw_event['user_id'],
                content_id=raw_event['content_id'],
                event_type=raw_event['event_type'],
                timestamp=datetime.fromisoformat(raw_event['timestamp']),
                duration=raw_event.get('duration', 0.0),
                rating=raw_event.get('rating', 0.0)
            )
            print(f"이벤트 수집: {event.user_id} - {event.event_type}")
            return event
        except Exception as e:
            print(f"이벤트 처리 오류: {e}")
            return None

# 2. 특성 추출 필터
class FeatureExtractionFilter(Filter):
    """사용자 행동에서 특성을 추출하는 필터"""
    
    def __init__(self):
        self.user_profiles = {}  # 실제로는 Redis 등 외부 저장소 사용
    
    async def process(self, event: UserEvent) -> Dict[str, Any]:
        """사용자 이벤트에서 특성 추출"""
        if not event:
            return None
        
        # 사용자 프로필 업데이트
        if event.user_id not in self.user_profiles:
            self.user_profiles[event.user_id] = {
                'view_count': 0,
                'total_duration': 0.0,
                'preferred_genres': {},
                'recent_content': []
            }
        
        profile = self.user_profiles[event.user_id]
        
        if event.event_type == 'view':
            profile['view_count'] += 1
            profile['total_duration'] += event.duration
            profile['recent_content'].append(event.content_id)
            
            # 최근 10개 콘텐츠만 유지
            if len(profile['recent_content']) > 10:
                profile['recent_content'] = profile['recent_content'][-10:]
        
        features = {
            'user_id': event.user_id,
            'avg_watch_duration': profile['total_duration'] / max(profile['view_count'], 1),
            'activity_level': 'high' if profile['view_count'] > 50 else 'medium' if profile['view_count'] > 10 else 'low',
            'recent_content': profile['recent_content']
        }
        
        print(f"특성 추출 완료: {event.user_id} - 활동 레벨: {features['activity_level']}")
        return features

# 3. 추천 생성 필터
class RecommendationFilter(Filter):
    """ML 모델을 사용하여 추천을 생성하는 필터"""
    
    def __init__(self):
        # 실제로는 TensorFlow, PyTorch 등의 모델 로드
        self.content_catalog = {
            'movie_1': {'genre': 'action', 'rating': 4.5},
            'movie_2': {'genre': 'comedy', 'rating': 4.2},
            'movie_3': {'genre': 'drama', 'rating': 4.7},
            'movie_4': {'genre': 'action', 'rating': 4.3},
            'movie_5': {'genre': 'comedy', 'rating': 4.0}
        }
    
    async def process(self, features: Dict[str, Any]) -> Dict[str, Any]:
        """사용자 특성을 기반으로 추천 생성"""
        if not features:
            return None
        
        user_id = features['user_id']
        activity_level = features['activity_level']
        recent_content = features['recent_content']
        
        # 간단한 추천 로직 (실제로는 복잡한 ML 모델 사용)
        recommendations = []
        
        # 활동 레벨에 따른 추천 수 조정
        rec_count = {'high': 10, 'medium': 5, 'low': 3}[activity_level]
        
        # 최근 시청하지 않은 콘텐츠 추천
        for content_id, content_info in self.content_catalog.items():
            if content_id not in recent_content:
                recommendations.append({
                    'content_id': content_id,
                    'score': content_info['rating'],
                    'genre': content_info['genre']
                })
        
        # 점수 기준 정렬 및 상위 N개 선택
        recommendations.sort(key=lambda x: x['score'], reverse=True)
        recommendations = recommendations[:rec_count]
        
        result = {
            'user_id': user_id,
            'recommendations': recommendations,
            'generated_at': datetime.now().isoformat()
        }
        
        print(f"추천 생성 완료: {user_id} - {len(recommendations)}개 추천")
        return result

# 4. 캐시 필터
class CacheFilter(Filter):
    """추천 결과를 캐시에 저장하는 필터"""
    
    def __init__(self):
        self.cache = {}  # 실제로는 Redis 등 사용
    
    async def process(self, recommendation: Dict[str, Any]) -> Dict[str, Any]:
        """추천 결과를 캐시에 저장"""
        if not recommendation:
            return None
        
        user_id = recommendation['user_id']
        self.cache[user_id] = recommendation
        
        print(f"캐시 저장 완료: {user_id}")
        return recommendation

# Data-Flow 파이프라인 구성
class RecommendationPipeline:
    """Netflix 스타일 추천 시스템 파이프라인"""
    
    def __init__(self):
        # 필터 인스턴스 생성
        self.event_collector = EventCollectorFilter()
        self.feature_extractor = FeatureExtractionFilter()
        self.recommender = RecommendationFilter()
        self.cache = CacheFilter()
        
        # 파이프 생성
        self.pipe1 = Pipe()  # EventCollector -> FeatureExtractor
        self.pipe2 = Pipe()  # FeatureExtractor -> Recommender
        self.pipe3 = Pipe()  # Recommender -> Cache
    
    async def process_event(self, raw_event: Dict[str, Any]):
        """단일 이벤트 처리"""
        # 1단계: 이벤트 수집 및 정규화
        event = await self.event_collector.process(raw_event)
        if event:
            await self.pipe1.send(event)
    
    async def run_pipeline(self):
        """파이프라인 실행 - 각 필터를 독립적인 태스크로 실행"""
        
        # 특성 추출 태스크
        async def feature_extraction_task():
            while True:
                try:
                    event = await self.pipe1.receive()
                    features = await self.feature_extractor.process(event)
                    if features:
                        await self.pipe2.send(features)
                except Exception as e:
                    print(f"특성 추출 오류: {e}")
        
        # 추천 생성 태스크
        async def recommendation_task():
            while True:
                try:
                    features = await self.pipe2.receive()
                    recommendation = await self.recommender.process(features)
                    if recommendation:
                        await self.pipe3.send(recommendation)
                except Exception as e:
                    print(f"추천 생성 오류: {e}")
        
        # 캐시 저장 태스크
        async def cache_task():
            while True:
                try:
                    recommendation = await self.pipe3.receive()
                    await self.cache.process(recommendation)
                except Exception as e:
                    print(f"캐시 저장 오류: {e}")
        
        # 모든 태스크를 동시에 실행
        await asyncio.gather(
            feature_extraction_task(),
            recommendation_task(),
            cache_task()
        )

# 사용 예시
async def main():
    """메인 실행 함수"""
    pipeline = RecommendationPipeline()
    
    # 파이프라인 시작
    pipeline_task = asyncio.create_task(pipeline.run_pipeline())
    
    # 테스트 이벤트 생성
    test_events = [
        {
            'user_id': 'user_123',
            'content_id': 'movie_1',
            'event_type': 'view',
            'timestamp': datetime.now().isoformat(),
            'duration': 1200.0
        },
        {
            'user_id': 'user_123',
            'content_id': 'movie_2',
            'event_type': 'click',
            'timestamp': datetime.now().isoformat()
        },
        {
            'user_id': 'user_456',
            'content_id': 'movie_3',
            'event_type': 'view',
            'timestamp': datetime.now().isoformat(),
            'duration': 3600.0
        }
    ]
    
    # 이벤트 처리
    for event in test_events:
        await pipeline.process_event(event)
        await asyncio.sleep(0.1)  # 약간의 지연
    
    # 결과 확인을 위한 대기
    await asyncio.sleep(2)
    
    print("=== 캐시된 추천 결과 ===")
    for user_id, recommendation in pipeline.cache.cache.items():
        print(f"사용자 {user_id}:")
        for rec in recommendation['recommendations'][:3]:  # 상위 3개만 출력
            print(f"  - {rec['content_id']} (점수: {rec['score']}, 장르: {rec['genre']})")

# 실행
if __name__ == "__main__":
    asyncio.run(main())

이 구현 예시는 Data-Flow Architecture 의 핵심 개념들을 보여줍니다:

  1. 필터 독립성: 각 필터가 독립적으로 동작하며 다른 필터의 내부 구현을 알 필요 없음
  2. 파이프를 통한 연결: 비동기 큐를 사용하여 필터 간 데이터 전송
  3. 병렬 처리: 각 필터가 독립적인 태스크로 실행되어 병렬 처리 지원
  4. 확장성: 새로운 필터 추가나 기존 필터 수정이 용이
  5. 오류 격리: 한 필터의 오류가 다른 필터에 영향을 주지 않음

12. 구현 예시 (Python 코드 예시)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from kafka import KafkaConsumer, KafkaProducer
from pyspark.sql import SparkSession

# 실시간 스트림 처리 (Flink 유사 PySpark Structured Streaming 예시)
spark = SparkSession.builder.appName("stream_app").getOrCreate()
df = spark.readStream.format("kafka")\
   .option("subscribe", "sensor")\
   .load()
processed = df.selectExpr("CAST(value AS STRING) as raw")\
   .filter("raw like '%alarm%'")
processed.writeStream.format("console").start()

# 배치 처리 부분 (Pyspark 예시)
batch_spark = SparkSession.builder.appName("batch_app").getOrCreate()
batch_df = batch_spark.read.json("/data/sensor/*.json")
agg = batch_df.groupBy("device_id").count()
agg.write.mode("overwrite").parquet("/data/daily_counts")

6.16. 구현 예시

Python 예시 (간단한 파이프라인):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 필터1: 데이터 전처리
def filter1(data):
    return data.lower()

# 필터2: 데이터 분석
def filter2(data):
    return data.replace("error", "warning")

# 필터3: 데이터 출력
def filter3(data):
    print("결과:", data)

# 파이프라인 실행
data = "This is an ERROR message"
result = filter1(data)
result = filter2(result)
filter3(result)

설명:
각 필터는 독립적으로 데이터를 처리하며, 파이프라인 형태로 데이터가 흐릅니다.

7. 기타 사항

14. 적용 및 최적화 고려사항

카테고리주의할 점권장사항
실무 적용시스템 복잡 증가단계별 구축 + 모니터링 자동화
데이터 호환성스키마 명세, 계약 관리 (Confluent Schema Registry)
확장성 설계필터별 독립 서비스 배포
최적화중복 방지Idempotent 정의/적용
배치 간격 조정실시간성과 자원 비용 절충
리소스 할당Auto-scaling, Spot 인스턴스 활용

6.18 실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점

카테고리고려사항주의할 점권장사항
아키텍처 설계필터 간 의존성 최소화순환 의존성 발생 방지의존성 그래프 작성 및 검토
성능 최적화병목 지점 식별 및 해결모든 필터를 동일하게 확장하지 말 것성능 프로파일링 도구 활용
데이터 관리표준화된 데이터 스키마 정의스키마 변경 시 하위 호환성 고려버전 관리 및 스키마 진화 전략 수립
오류 처리각 필터별 오류 처리 로직 구현오류 정보 손실 방지구조화된 로깅 및 모니터링
모니터링실시간 성능 지표 수집과도한 모니터링으로 인한 성능 저하핵심 지표에 집중한 모니터링
테스트단위 테스트 및 통합 테스트프로덕션 환경과의 차이 간과테스트 환경의 프로덕션 환경 근사화

6.19 최적화하기 위한 고려사항 및 주의할 점

카테고리고려사항주의할 점권장사항
처리량 최적화배치 크기 조정너무 큰 배치로 인한 메모리 부족동적 배치 크기 조정 알고리즘
지연시간 최적화파이프 버퍼 크기 최적화과도한 버퍼링으로 인한 메모리 사용량 증가적응형 버퍼 관리
리소스 활용CPU 및 메모리 사용량 균형특정 리소스의 과도한 사용리소스 모니터링 및 자동 스케일링
네트워크 최적화데이터 압축 및 직렬화압축으로 인한 CPU 오버헤드압축 비율과 성능의 균형점 찾기
캐싱 전략중간 결과 캐싱캐시 무효화 및 일관성 문제TTL 기반 캐시 및 이벤트 기반 무효화
확장성수평 확장 설계상태를 가진 필터의 확장 어려움무상태 필터 설계 및 외부 상태 저장소 활용

8. 추가로 알아야 할 내용

9. 주제와 관련하여 주목할 내용

카테고리주제항목설명
소프트웨어 아키텍처데이터 플로우 아키텍처모듈화각 필터는 독립적으로 개발·테스트·배포 가능
소프트웨어 아키텍처데이터 플로우 아키텍처확장성새로운 필터 추가 및 기존 필터 변경이 쉬움
실시간 처리데이터 플로우 아키텍처스트리밍실시간 데이터 처리에 적합
분산 시스템데이터 플로우 아키텍처병렬 처리여러 필터를 분산 환경에 배치하여 병렬 처리

17. 주제와 관련하여 주목할 내용

카테고리주제항목설명
구조패턴Pipe-and-Filter모듈 간 결합도를 낮추고 독립성을 높이는 핵심 아키텍처 스타일
성능병렬성Token 기반 처리데이터 기반으로 실행되어 자연스럽게 병렬 처리 가능
확장성하이브리드 모델Lambda/Kappa정확성과 실시간성을 균형 있게 통합하는 구조
운영오케스트레이션Airflow, NiFi복잡한 파이프라인 스케줄링 및 모니터링 자동화
품질Idempotency재실행 안정성중복 실행에도 동일 결과 보장하는 안전한 처리 구조
보안데이터 흐름 보안Encryption, Access Control파이프 전 구간의 데이터 보호와 접근 제어

7. 주제와 관련하여 주목할 내용

카테고리주제항목설명
최신 기술클라우드 네이티브Kubernetes 기반 배포컨테이너화된 필터의 자동 확장 및 관리
최신 기술서버리스 아키텍처Function-as-a-Service이벤트 기반 필터 실행으로 비용 최적화
최신 기술엣지 컴퓨팅분산 데이터 처리네트워크 지연 감소 및 대역폭 절약
AI/ML 통합자동 최적화머신러닝 기반 튜닝실시간 성능 데이터 기반 자동 파라미터 조정
AI/ML 통합지능형 라우팅예측 기반 부하 분산과거 패턴 분석을 통한 효율적 데이터 라우팅
보안데이터 암호화파이프라인 내 암호화데이터 전송 및 저장 시 보안 강화
보안접근 제어필터별 권한 관리세밀한 권한 제어를 통한 보안 강화
성능백프레셔 제어적응형 흐름 제어처리 속도 차이에 따른 동적 조절
성능지연 최적화제로카피 데이터 전송메모리 복사 없는 데이터 전달로 성능 향상

8. 반드시 학습해야 할 내용

카테고리주제항목설명
기초 이론아키텍처 패턴파이프라인 패턴데이터 변환 단계의 연결 방법
기초 이론동시성 프로그래밍비동기 처리독립적 필터 실행을 위한 동시성 기법
기초 이론데이터 구조큐와 스트림파이프 구현을 위한 기본 자료구조
구현 기술메시지 큐Apache Kafka, RabbitMQ분산 파이프라인 구현을 위한 메시징
구현 기술스트림 처리Apache Flink, Spark Streaming실시간 데이터 처리 프레임워크
구현 기술컨테이너화Docker, Kubernetes필터의 독립적 배포 및 확장
모니터링관찰가능성로깅, 메트릭, 추적분산 시스템의 상태 파악
모니터링성능 측정처리량, 지연시간 측정시스템 성능 평가 지표
설계 원칙SOLID 원칙단일 책임, 개방 - 폐쇄유지보수 가능한 필터 설계
설계 원칙분산 시스템CAP 정리, BASE분산 환경에서의 일관성 관리

18. 반드시 학습해야 할 내용

카테고리주제항목설명
기본 원리Data‑Driven Execution데이터 도착에 따라 처리 순서 결정전통적 제어 흐름과 구분되는 핵심 실행 모델
패턴 이해Batch Sequential / Stream Processing두 가지 주요 흐름 형태유형별로 사용 시나리오와 장단점 다름
응용 기술Kafka, Spark, FlinkData‑Flow 구현에 사용되는 실무 도구스트림과 배치를 함께 다룰 수 있음
성능 관리Checkpointing & Replay중단 대비 복구 메커니즘장애 발생 시 처리 재시작 기반
운영 도구Dagster / Airflow / NiFi워크플로우 구성 도구실제 구현과 유지관리 시 필수
보안 및 감사Lineage / Data Contracts데이터 흐름 추적 및 정의 계약데이터 신뢰성과 컴플라이언스 확보

10. 반드시 학습해야할 내용

카테고리주제항목설명
소프트웨어 아키텍처데이터 플로우 아키텍처파이프와 필터데이터 흐름 중심의 설계 원리
실시간 처리데이터 플로우 아키텍처스트리밍 시스템실시간 데이터 처리 방법
분산 시스템데이터 플로우 아키텍처분산 처리필터 분산 및 병렬 처리 기법
에러 처리데이터 플로우 아키텍처복구 메커니즘데이터 손실 및 에러 처리 방법

15. 추가로 학습해야 할 내용

카테고리주제항목설명
Data GovernanceData Lineage출처 추적Data‑Flow 에서 lineage 구현 및 디버깅 이해 (en.wikipedia.org, geeksforgeeks.org, cs.cmu.edu)
Fault ToleranceExactly-once 처리Idempotency & ACK스트림 중복·누락 제어 기법 이해
CI/CDPipeline 배포 자동화Terraform, Helm아키텍처 코드화 및 무중단 배포
Security데이터 보호 및 접근 제어Encryption, ACL파이프 전 구간 데이터 보안 설계

용어 정리

카테고리용어설명
소프트웨어 아키텍처필터 (Filter)데이터를 변환 또는 처리하는 모듈
소프트웨어 아키텍처파이프 (Pipe)필터 간 데이터를 전달하는 채널
분산 시스템분산 처리 (Distributed Processing)여러 시스템에 작업을 분산하여 처리
실시간 처리스트리밍 (Streaming)데이터를 실시간으로 처리 및 전송

용어 정리

카테고리용어설명
기본 개념Pipe‑and‑Filter데이터가 연속적으로 작은 필터 컴포넌트를 지나며 처리되는 아키텍처 구조
기본 개념Batch Sequential배치 단위로 순차 처리되는 데이터 플로우 방식
기본 개념Process Control처리 유닛과 제어 유닛이 분리된 실시간 제어 중심 구조
관련 패턴Dataflow architecture자료 흐름에 따라 시스템 실행이 결정되는 컴퓨터 아키텍처 (airbyte.com)
관련 패턴Stream Processing실시간 데이터 흐름 처리 모델, Pipe‑and‑Filter 기반
관련 패턴Lambda Architecture배치 + 스트림 결합 아키텍처 (airbyte.com)

16. 용어 정리

카테고리용어설명
아키텍처Batch Sequential배치 단위로 순차 처리하는 Data‑Flow 형태
아키텍처Pipe-and-Filter필터 컴포넌트를 파이프라인으로 연결해 데이터 처리
아키텍처Process Control제어 장치와 처리 유닛을 분리한 실시간 제어 구조
모델Lambda Architecture배치 + 스트림 병행 모델로 정확도와 실시간성 보장
모델Kappa Architecture스트림 중심 단일 모델, 스트림 및 리플레이 수행
개념Idempotency중복 실행되어도 결과 동일한 처리 특성
도구Orchestration파이프라인 작업 스케줄링 및 종속성 관리 도구

용어 정리

카테고리용어설명
핵심 개념필터 (Filter)입력 데이터를 변환하여 출력하는 독립적인 처리 단위
핵심 개념파이프 (Pipe)필터 간 데이터 전송을 담당하는 연결체 또는 채널
핵심 개념데이터 싱크 (Data Sink)파이프라인의 최종 출력을 받는 목적지
핵심 개념데이터 소스 (Data Source)파이프라인의 입력 데이터를 제공하는 원천
처리 방식백프레셔 (Backpressure)하위 구성요소의 처리 속도가 느려 상위로 압박이 전달되는 현상
처리 방식파이프라이닝 (Pipelining)여러 처리 단계가 동시에 서로 다른 데이터를 처리하는 기법
처리 방식스트림 처리 (Stream Processing)연속적으로 유입되는 데이터를 실시간으로 처리하는 방식
처리 방식배치 처리 (Batch Processing)일정량의 데이터를 모아서 한 번에 처리하는 방식
아키텍처람다 아키텍처 (Lambda Architecture)배치와 스트림 처리를 결합한 하이브리드 아키텍처
아키�ecture카파 아키텍처 (Kappa Architecture)스트림 처리만을 사용하는 단순화된 아키텍처
기술 구현ETL (Extract, Transform, Load)데이터 추출, 변환, 적재의 순서로 진행되는 데이터 처리
기술 구현ELT (Extract, Load, Transform)데이터 추출, 적재, 변환의 순서로 진행되는 데이터 처리

참고 및 출처

참고 및 출처

참고 및 출처

참고 및 출처