함수체인 개념과 유형

데이터 소스를 엔드유저에게 전달하는 과정엔 많은 단계가 필요하다. 흔히 이런 단계의 집합을 파이프라인 이라고 부른다.

../_images/dp1.png

경직된 Monolothic 을 넘어 Micro-service 가 보편화되었지만 현장과 조직의 생산성 증대와 운영편의성이 개선되었는가는 의문이다.

  • 증가하는 레거시 관리 비용

  • 구축 비용과 시간

  • 높아지는 복잡도와 낮은 유연성

  • 스토리지와 데이터베이스 중심의 상태관리

Note

일반적인 배치 시스템이라면 DB/스토리지를 중심에 놓은 아래와 같은 구조이다.

../_images/dp2.jpg

기술적으로 SPOP(Single Point Of Pain) 문제도 있지만 그 양으로 인한 비지니스 민첩성(Business Agility)이 급격히 저하되는 것이 더 큰 문제이다. 함수체인의 목적은 민첩성은 높이고 종속성을 제거하기 위한 용도로 개발되었다.

함수체인 개념

M2의 함수체인 은 외부 의존성(특히 스토리지/데이터베이스) 없이 검증된 기능(함수)을 URL 규격으로 연결하여 처리하는 방식이다.

Note

웹 표준의 단순명료한 정의로 인해 웹 서비스를 정적/동적자원으로만 나누고 단순 요청/응답 서비스로 이해하기도 한다.

  • 클라이언트는 요청하고 서버는 응답한다.

  • HTTP 규격으로 통신하다.

하지만 누구나 서비스 의도를 URL 에 담을 수 있고 이 의도에 서버가 반응하도록 구성할 수 있다.

함수체인은 URL Suffix로 표현되며 앞에서부터 해석된다.

../_images/dp1.png

선언된 순서대로 함수가 수행된다.

M2의 함수체인은 백엔드 개입없이(=사전 준비없이) 기획자과 프론트엔드의 의도가 URL로 노출됨과 동시에 기능한다.

# 원본이미지
https://example.com/sample.jpg

# 800 x 600 리사이즈
https://example.com/sample.jpg/dims/resize/800x600

# 흑백이미지 + 품질 75%
https://example.com/sample.jpg/dims/grayscale/true/quality/75

노출되는 이미지를 S3에 백업하고 싶다면 함수를 추가한다.

# 800 x 600 리사이즈
https://example.com/sample.jpg/dims/resize/800x600/aws_s3/put/mystorage

함수체인 장에서 설명한 예제도 실용성을 잘 나타낸다.

https://example.com/archive.zip/unzip/files/title.jpg/dims/optimize/aws_s3/put/mybucket/dims/resize/1024x768/denc/denchunk

성공적인 DevOps 를 구현하고자 한다면 반드시 상태관리의 어려움, 비지니스 로직의 복잡함, 운영전략을 극복해야 한다. 함수체인은 어떠한 상태도 가지지 않으며 URL이 곧 비지니스 로직이며, M2 단일 솔루션으로 동작한다.

함수 유형

함수체인은 기반(Base) 함수, 후킹(Hooking) 함수, 체인(Chain) 함수 3가지로 구성되며 RT 컴포넌트는 이들이 상호동작하도록 구성하는 런타임이다.

../_images/dp6.png

기반 함수

기반함수는 2가지 역할을 수행한다.

  • 완전한 Reverse-Proxy 캐싱서버

  • 함수체인의 라이프사이클 관리

기반함수는 함수체인 범위안에 있지만 URL Suffix 인터페이스를 노출하지 않는다. 대표적인 기반함수는 캐싱엔진 functions.network.cache 와 Reverse-Proxy 엔진인 functions.network.http 이며, 기타 통계, 로그등이 여기에 속한다.

후킹 함수

후킹 Hooking 함수는 고객의 고유한 비지니스 요건을 구현하거나, 함수체인의 원활한 수행을 위한 어댑터 역할을 한다.

See also

Hooking 함수는 JavaScript 로 구현되며 독립적 단위함수로 수행된다.

../_images/dp4.png

함수체인 진행시 제일 먼저, 단 한번 수행된다.

Hooking의 대표적인 활용 사례는 다음과 같다.

  • 고객 백엔드 API 연계

  • POST 요청 Body분석을 통한 캐싱효율 최적화

  • 원타임 URL 처리

체인 함수

체인함수는 In/Out이 명확한 단위기능을 구현하는 함수이다.

functions.contents 하위의 모든 함수가 체인함수로 URL Suffix로 구동된다.

../_images/dp5.jpg

함수의 명령어로 유연함을 제공한다.

체인함수는 모든 캐싱엔진에 의해 구동되는데 다시 말하면 모든 체인함수의 결과물은 캐싱대상이 된다는 의미이기도 하다.