티스토리 뷰

반응형
 

소프트웨어 아키텍처 101 - YES24

막막했던 아키텍처가 쉬워지는 실무 지침서소프트웨어 아키텍트는 전 세계 연봉 10위 안에 드는 직업이지만, 지금까지 ‘개발자가 아키텍트’로 전향하는 데 실질적으로 도움이 될 만한 지침이

www.yes24.com

 

CC BY-SA (https://commons.wikimedia.org/wiki/File:AutoAI-ml-process.png)

파이프라인 아키텍처는 꽤 흔하게 볼 수 있다.

머신러닝의 워크플로(workflow)가 이와 같은 형태이며, 함수형 프로그래밍(FP), bash shell의 경우는 이 구조를 따른다.

 

파이프(pipe)와 필터(filter)

이 아키텍처에서는 가장 기본적으로 두 가지 요소로 구성된다.

 

파이프

한 소스(source)에서 입력을 받아 다른 소스로 출력을 내는 필터 간 통신 채널이다.

우리가 실생활에서 볼 수 있는 긴 파이프 라인을 구성하는 각각을 떠올려서 생각해보면 좋을 것 같다.

뿐만 아니라 컴퓨터 구조나 CUDA 라이브러리 같은 곳에서도 파이프라인 구조를 볼 수 있다.

그리고, 일반적으로 단방향, 점대점(point to point) 방식으로 구성한다.

 

필터

필터의 특성은 자기 완비형(self-contained)이며 다른 필터와 독립적이며, 일반적으로 stateless이다.

즉, 그 자체만으로도 자신의 기능을 다 할 수 있으며, 따라서 상태(state)와 무관하게 동작하는 것이 일반적이다. (물론, state를 기억하게 해서, 다르게 동작시킬 수도 있지만, 일반적이지 않다)

좀 더 직관적으로 말하면, 필터는 한 가지 태스크(일)만 수행하며 여러 가지 일을 하고 싶으면, 여러 필터를 순차적으로 이어 붙여 쓰면 된다.

[필터] --(파이프)--> [필터] --(파이프)--> [필터] --(파이프)--> [필터]

필터의 종류

이 책에서는 파이프라인 아키텍처에서의 필터 종류를 4가지로 표현하고 있다.

 

프로듀서(producer)

파이프라인의 시작점. 따라서 Input 없이 Output만 있는 필터이며, 소스(source)라고도 부른다

파이프가 '필터 간의 통신 채널'이기 때문에 Input/Output 대신에 Inbound/Outbound 소스(데이터)라고도 한다.

 

변환기(transformer)

Inbound 소스의 일부나 전체를 Outbound 소스로 변환하는 역할이다. (FP에서의 map 같은...)

예로 들면, h264 영상 프레임을 받아서 RGB 포맷으로 변환하는 경우이다.

 

테스터(tester)

Inbound 소스를 받아 하나 이상의 기준(criteria)에 대한 테스트 후, 그 결과에 따른 outbound로 출력하는 역할이다.

말 그대로 앞선 필터들을 통해 출력된 데이터가 기준을 충족하는지 테스트해주는 것이다.

FP에서는 이 기능을 reduce라고 부른다.

 

컨슈머(consumer)

파이프라인의 종착역이다.

즉, 이전까지 수많은 필터를 거쳐 출력된 데이터를 소비(consum)하는 것이다.

받은 데이터를 DB에 저장만 할 수도 있고, 사용자에게 알릴 수도(디스플레이 등) 있을 것이다.


아키텍처 특성

아키텍처 특성 별점
분할 유형 기술
퀀텀 수 1
배포성
탄력성
진화성
내고장성
모듈성
전체 비용 ★★★★★
성능 ★★
신뢰성 ★★★
확장성
단순성 ★★★★★
시험성 ★★

유의사항

파이프는 필터 간의 통신 채널이라고 했다. 그리고, 필터마다 Inbound/Outbound 소스의 형태가 다 다를 수 있다.

이 지점에서 우리가 주의해야 될 점이 있다. 사실 매우 당연한 이야기지만, 의외로 사람들이 실수하는 부분이기도 하다.

즉, 여러 개의 필터를 이어 붙일 때, 각 필터의 Inbound/Outbound 소스의 형태에 주의해야 한다는 것이다.

예를 들어, A와 B 필터를 붙이려고 할 때, A의 Output이 ★인데 ◆ Input을 받아 처리하는 B를 뒤에 붙이면, 잘못된 데이터를 넘기게 된다는 것이다.

물론 제대로 설계된 파이프/필터라면 잘못된 데이터 형식에 대한 검출을 해내겠지만, 불필요한 디버깅 포인트를 만들어낼 수 있으니, 유의해서 사용하는 것이 좋겠다.

반응형
댓글