파이프 필터 아키텍처
파이프 필터 아키텍처(Pipe and Filter Architecture)는 데이터를 여러 처리 단계(Filter)로 나누어 순차적으로 가공하는 소프트웨어 아키텍처 패턴이다. 각 처리 단계는 독립적으로 동작하며, 이전 단계의 출력을 다음 단계의 입력으로 전달한다.
파이프 필터 아키텍처는 복잡한 데이터 처리 과정을 여러 개의 독립적인 처리 단계로 분리하는 구조이다.
각 단계는 특정 기능만 수행하며, 처리 결과를 다음 단계로 전달한다. 이때 데이터 전달 경로를 파이프(Pipe), 데이터를 처리하는 모듈을 필터(Filter)라고 한다.
UNIX 운영체제의 파이프(pipe) 개념이 대표적인 예시이다.
예:
cat file.txt | grep hello | sort
위 예시에서:
- cat
- 데이터 읽기
- grep
- 문자열 필터링
- sort
- 정렬 수행
각 명령은 독립적으로 동작하면서 데이터를 순차적으로 처리한다.
필터는 데이터를 입력받아 특정 작업을 수행한 뒤 결과를 출력하는 처리 모듈이다.
특징:
- 독립적으로 동작
- 입력과 출력 존재
- 내부 상태 의존성이 낮음
- 특정 기능만 수행
예:
- 데이터 변환
- 압축
- 정렬
- 암호화
- 로그 분석
파이프는 필터 간 데이터를 전달하는 통로이다.
특징:
- 필터 간 결합도 감소
- 데이터 흐름 연결
- 스트림 형태 전달 가능
파이프 필터 구조는 일반적으로 다음 순서로 동작한다.
- 입력 데이터 생성
- 첫 번째 필터에서 처리
- 파이프를 통해 다음 필터로 전달
- 다음 필터에서 추가 처리
- 최종 결과 출력
각 필터는 이전 필터의 내부 동작을 알 필요 없이 입력과 출력만 처리한다.
- 데이터 흐름 중심 구조
- 기능 단위 분리 가능
- 모듈 독립성 높음
- 재사용성 우수
- 순차 처리 구조
- 스트림 처리에 적합
필터를 독립적인 모듈로 재사용할 수 있다.
특정 필터만 수정하거나 교체할 수 있다.
필터 간 직접 의존성이 낮다.
새로운 필터를 추가하여 기능 확장이 가능하다.
일부 구조에서는 필터를 병렬적으로 실행할 수 있다.
각 필터 간 데이터 전달 과정에서 오버헤드가 발생할 수 있다.
필터가 많아질수록 지연이 증가할 수 있다.
상태 공유가 필요한 시스템에는 부적합할 수 있다.
중간 필터 장애 시 전체 흐름에 영향을 줄 수 있다.
가장 대표적인 파이프 필터 구조 사례이다.
예:
ps -ef | grep nginx | sort
컴파일러는 다음과 같은 단계로 구성될 수 있다.
- 어휘 분석
- 구문 분석
- 의미 분석
- 코드 생성
각 단계가 필터 역할을 수행한다.
로그 분석, ETL, 데이터 변환 등에 사용된다.
영상 및 오디오 처리 파이프라인에 활용된다.
실시간 데이터 스트림 처리 시스템에서 사용된다.
| 구분 | 파이프 필터 아키텍처 | MVC |
|---|---|---|
| 중심 개념 | 데이터 흐름 | 역할 분리 |
| 처리 방식 | 순차 처리 | 사용자 인터페이스 중심 |
| 주요 목적 | 데이터 가공 | UI와 로직 분리 |
| 대표 분야 | 데이터 처리, 컴파일러 | 웹 애플리케이션 |
| 구분 | 파이프 필터 | 이벤트 기반 아키텍처 |
|---|---|---|
| 흐름 구조 | 순차 데이터 흐름 | 이벤트 중심 |
| 처리 방식 | 단계별 처리 | 비동기 이벤트 처리 |
| 연결 방식 | 파이프 연결 | 이벤트 전달 |
| 주요 활용 | 데이터 처리 | GUI, 메시징 시스템 |
- UNIX Shell Pipeline
- 컴파일러 구조
- ETL 시스템
- 로그 처리 시스템
- 영상 처리 파이프라인
- 스트림 분석 시스템
- 파이프 필터 아키텍처는 데이터를 단계별로 처리하는 구조이다.
- 필터는 데이터를 처리하는 독립 모듈이다.
- 파이프는 필터 간 데이터를 전달한다.
- UNIX 파이프 명령은 대표적인 예시이다.
- 필터 간 결합도가 낮다.
- 데이터 흐름 중심 구조이다.
- 컴파일러 구조에서 자주 사용된다.
