파이프 - 필터 아키텍쳐 패턴

jihunnit·2023년 7월 2일
0

정수기를 생각해보면
어딘가 수원지에서 시작한 물이
파이프를 통해 흘러오며 여러 필터를 거쳐 여과되고
결과적으로 정수된 깨끗한 물이 된다.

파이프 - 필터 패턴은 이것과 똑같다.
다만 물 대신 데이터가 흐른다.
필터는 여기서 고립된 소프트웨어 컴포넌트를 의미한다.
고립된 컴포넌트라는 의미는, 다른 필터와 무관하다는 뜻이다.
수원지는 데이터 소스, 정수된 물(데이터)의 최종 도착지는 데이터 싱크라고 한다.

데이터 소스는 백엔드 등 서비스일 수 있으며
데이터 싱크는 데이터베이스, 분산 파일 시스템 등 일 수 있다.

이 패턴에서 유의할 점은, 모든 데이터가 파이프를 통해서만 흘러야 하는 것은 아니다 라는 점이다.

파이프-필터 패턴은 매우 유명하고 다양한 곳에서 쓰이지만, 보통 특정 유형의 이벤트나 입력 요청을 트리거로 받는 간단한 어플리케이션에서 유용하다.
대표적으로는 영상 등의 데이터 스트림 처리를 할 때 자주 쓰인다고 한다.

이러한 파이프-필터 패턴의 장점은 다음과 같다.

  1. 각 작업 유형에 맞는 최적의 프로그래밍 언어 및 생태계를 사용 가능하다.
    -> 특정 작업에는 풍부한 생태계를 지닌 Spring을 쓸 수도 있고, 가벼운 처리에는 Node.js를 사용할 수도 있고..
  2. 다양한 유형의 하드웨어에 맞춰서 사용할 수 있다.
  3. 확장성과 유연성 -> 각 컴포넌트의 처리에 필요한 만큼 인스턴스 최적화 가능
  4. 병렬 실행을 통한 처리량 증가

물론 아키텍쳐에 은탄환은 없다. 사용 시 유의 사항들이 존재한다.

  1. 파이프와 필터를 통한 아키텍쳐는 추가적인 오버헤드 및 복잡성을 야기함
  2. 모든 필터의 무상태성을 유지해야 함
  3. 파이프라인 내 트랜잭션들이 단일 트랜잭션인지 확인해야 함 -> 모든 작업을 단일 트랜잭션으로 수행할 경우 이 패턴은 좋지 않음
profile
인간은 노력하는 한 방황한다

0개의 댓글