서버리스 아키텍처 패턴

서버리스 아키텍처 패턴

이 글은 AWS 기반 서버리스 아키텍처 책 중에 서버리스 아키텍처 패턴 부분을 간단하게 정리한 글이다.

앞으로 소개되는 패턴들은 서버리스 아키텍처에 적용 가능 한 것이라고 배타적으로 표현하지 않아도 된다. 이 패턴은 서버리스 이전에 분산 시스템에서 사용되던 패턴이다. 또한 여기서 정리한 패턴 말고도, 인증과 관련된 패턴, 데이터 관리(CQRS, 이벤트 소싱, 구체화된 뷰, 샤딩) 및 오류 처리와 관련된 패턴(재시도 패턴)을 잘 알고 있는 것이 좋다.

명령 패턴

소프트웨어 엔지니어링에서 명령 패턴(command pattern)은 요청되는 작업 또는 요청 수신자에 대해 알지 못해도 객체에 요청할 필요가 있기 때문에 요청을 객체로 캡슐화 해서 여러 다른 요청을 가진 클라이언트를 매개 변수화하고, 요청을 큐에 넣거나 로그로 남기고, 실행 취소 가능한 작업을 지원할 수 있다. 명령 패턴에 대한 자세한 설명은 여기 링크에서 확인할 수 있다.

command pattern

이 패턴은 발신자와 수신자를 분리하려는 경우에 유용하다 (요청 발신자와 수신자 사이에 명령을 받고 전달해주는 중간자를 추가하는 것이기 때문에). 단일 함수에서 여러 함수와 서비스를 호출하고 제어하는 데 사용한다. 인수를 객체로 전달하고 클라이언트가 여러 다른 요청으로 매개 변수화 될 수 있게 해 구성 요소 간의 결합을 줄이고 시스템을 더욱 확장 가능하게 만들 수 있다. API Gateway로 응답을 돌려줘야 하는 경우라면 이 접근 방법을 사용한다.

메시징 패턴

메시징 패턴은 개발자가 함수 및 서비스 사이에 직접적인 의존성을 분리하고 큐에 이벤트 / 레코드 요청을 저장할 수 있게 해 확장 가능하고 견고한 시스템을 구축할 수 있게 했으므로 분산 시스템에서 널리 사용된다. 큐에 있는 메시지를 처리하는 서비스가 오프라인 상태가 되면 메시지는 큐에 보관되어 나중에 처리될 수 있기 때문에 신뢰성이 제공된다.

messaging pattern

이 패턴에는 큐에 게시할 수 있는 발신자와 큐에서 메시지를 읽을 수 있는 수신자가 있는 메시지 큐가 있다. AWS에서는 Simple Queue Service로 이 패턴을 구현할 수 있다. 여기 링크에서는 SQS가 Lambda의 트리거 역할을 하도록 하는 예시가 있다.

시스템 설계 방법에 따라서, 메시지 큐는 [단일 발신자 / 수신자] 또는 [다중 발신자 / 수신자]를 가질 수 있다. 위 링크에 SQS에서는 아래와 같은 참고 사항을 적어뒀다.

  • 대기열과 Lambda 함수는 같은 AWS 리전에 있어야 합니다.
  • FIFO 대기열은 Lambda 함수 트리거를 지원하지 않습니다.
  • 하나 이상의 Lambda 함수에 하나의 대기열만 연결할 수 있습니다.
  • Amazon SQS용 AWS 관리형 고객 마스터 키를 사용하는 암호화 대기열을 다른 AWS 계정의 Lambda 함수와 연결할 수 없습니다.

위 내용을 보면 SQS는 하나 이상의 수신자를 붙일 수 있는 것 같다.

이 패턴은 워크로드 및 데이터 처리를 다루는 데 사용되기 좋다. 큐가 버퍼 역할을 하므로 메시지를 처리하는 서비스가 중단되더라도 데이터가 손실되지 않는다. 메시지는 서비스가 다시 시작되고 처리되기 전까지 큐에 남아 있다.

팬아웃 패턴

일반적으로 팬아웃 패턴은 특정 큐 또는 메시지 파이프 라인의 모든 클라이언트에게 메시지를 전달하는 데 사용된다. AWS에서 이 패턴은 보통 SNS 주제를 사용해 새 메시지가 토픽에 추가될 때 여러 가입자를 호출할 수 있게 구현된다.

fan-out pattern

SNS 토픽은 여러 게시자 및 가입자를 가질 수 있는 통신/메시지 채널이다. 새로운 메시지가 토픽에 추가되면 모든 가입자가 병렬로 호출되기 때문에 이벤트가 모든 가입자에게 전달된다.

이 패턴은 여러 Lambda 함수를 동시 호출해야 하는 경우에 유용하다. SNS 토픽은 메시지를 전달하지 못하거나 함수가 실행되지 않는 경우 Lambda 함수를 호출하고 재시도한다.

파이프 및 필터 패턴

복잡한 처리 작업을 파이프라인으로 구성된 일련의 관리 가능한 개별 서비스로 분해하는 것을 목적으로 하는 패턴이다. 데이터를 변환하도록 설계된 구성 요소를 필터라고 하고, 한 구성 요소에서 다음 구성 요소로 데이터를 전달하는 연결자를 파이프라고한다.

pipe-or-filter pattern

이 패턴은 결과를 얻기 위해 여러 단계가 필요한 어떤 작업에서든 유용하게 사용할 수 있다.

Reference

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×