메시징 및 대기열

2021. 8. 16. 23:59카공리스트/AWS Cloud Practitioner Essentials

본 글의 내용은 AWS Cloud Practitioner Essentials (Korean)에서 발췌함  

 

애플리케이션은 메시지를 보내 다른 애플리케이션과 통신한다.

이 때 애플리케이션끼리 직접 통신을 한다면, 이를 밀결합된 상태, 밀결합된 아키텍처라고 한다.

 

밀결합된 아키텍처의 대표적인 특징은 구성 요소 하나가 고장 나거나 변경되면 다른 구성 요소나 심지어 전체 시스템에 문제가 발생한다는 점이다.

 

예를 들어 애플리케이션 A가 애플리케이션 B에 메시지를 직접 보낼 때 애플리케이션 B에 장애가 발생하여 메시지를 받을 수 없게 되면 애플리케이션 A에도 오류가 발생한다.

 

이 문제를 해결 하기 위해, 메시지를 완충 기억 장치에 배치한다는 개념인 메시징 or 대기열이라고 하는 것을 도입한다. 

 

애플리케이션 A가 메시지를 대기열로 전달한 후 애플리케이션 B가 처리한다.

애플리케이션 B에 장애가 발생해도 애플리케이션 A에는 중단이 발생하지 않는다.

전송 중인 메시지는 여전히 대기열로 전송될 수 있으며 처리될 때까지 대기열에 남는다. 

 

이렇게 안정적인 아키텍처를 소결합된 아키텍처라고 한다.

특정 구성 요소에 장애가 발생하면 구성 요소가 격리되기 때문에 전체 시스템 장애로 확장되지 않는다.

 

모놀리식 애플리케이션 및 마이크로서비스

 

애플리케이션은 여러 구성 요소로 구성된다.

구성 요소는 서로 통신하여 데이터를 전송하고, 요청을 이행하며 애플리케이션을 계속 실행한다.

 

 

구성 요소가 밀결합된 애플리케이션이 있다고 가정하다.

데이터베이스, 서버, 사용자 인터페이스, 비스니스 로직 등이 구성 요소라고 하자.

이러한 유형의 아키텍처를 모놀리식 애플리케이션이라고 한다.

 

애플리케이션 아키텍처에 대한 이 접근 방식에는 한 구성 요소에서 장애가 발생하면 다른 구성 요소에서 장애가 발생하고, 심지어 전체 애플리케이션에서 장애가 발생할 수 있다.

 

 

단일 구성 요소에 장애가 발생했을 때 애플리케이션 가용성을 유지할 수 있도록 마이크로서비스 접근 방식을 통해 애플리케이션을 설계할 수 있다.

 

마이크로서비스 접근 방식에는 애플리케이션 구성 요소가 소결합된다. 

이 경우 단일 구성 요소에 장애가 발생해도 다른 구성 요소들은 서로 통신하기 때문에 계속 작동한다.

소결합 덕분에 전체 애플리케이션에서 장애가 발생하는 것이 방지된다.

 

AWS에서 애플리케이션을 설계할 때, 다양한 기능을 수행하는 서비스 및 구성 요소를 사용하여, 마이크로서비스 접근 방식을 취할 수 있다.

애플리케이션 통합을 촉진하는 서비스로는 다음이 있다.

 

 * Amazon Simple Notification Service(Amazon SNS)

 * Amazon Simple Queue Service(Amazon SQS).

 

 

Amazon Simple Notification Service (Amazon SNS)

 

Amazon SNS는 게시/구독 서비스다.

게시자는 Amazon SNS 주제를 사용하여 구독자에게 메시지를 게시한다.

이는 커피숍에서 캐셔가 음료를 만드는 바리스타에게 주문 사항을 전달하는 것과 비슷하다.

 

Amazon SNS에서 구독자는 웹 서버, 이메일 주소, AWS Lambda 함수 또는 그 밖의 여러 옵션이 될 수 있다.

 

 

단일 주제에서 업데이트 게시

 

커피숍에서 모든 비즈니스 영역의 업데이트를 포함하는 단일 뉴스레터가 있다고 가정하자.

여기에는 쿠폰, 커피 상식, 신제품과 같은 주제가 포함된다.

 

단일 뉴스레터이기에 모든 주제가 그룹화된다.뉴스레터를 구독하는 모든 고객은 쿠폰, 커피 상식, 신제품에 대한 업데이트를 받는다.

 

일부 고객이 관심있는 특정 주제에 대해서만 별도의 뉴스레터를 받고 싶다고 하여 기존의 접근 방식을 다음과 같이 바꾼다.

 

 

여러 주제에서 업데이트 게시

 

이제 커피숍은 모든 주제를 다루는 단일 뉴스레터 대신 이를 3개의 뉴스레터로 나눴다.

각 뉴스레터는 쿠폰, 커피 상식, 신제품과 같은 특정 주제만 다룬다.

 

이제 구독자는 구독한 특정 주제에 대해서만 즉시 업데이트를 받는다.

또한 구독자는 주제를 하나 또는 여러 개 구독할 수 있다.

 

 

Amazon Simple Queue Service (Amazon SQS)

 

Amazon SQS는 메시지 대기열 서비스다.

Amazon SQS를 사용하면 메시지 손실이나 다른 서비스 사용 없이 소프트웨어 구성 요소 간에 메시지를 전송, 저장, 수신할 수 있다.

Amazon SQS에서는 애플리케이션이 메시지를 대기열로 전송한다.

사용자 또는 서비스는 대기열에서 메시지를 검색하여 처리한 후 대기열에서 삭제한다.

 

 

주문 이행

 

캐셔가 주문을 받고 바리스타가 음료를 만드는 주문 프로세스가 커피숍에 있다고 가정하자.

캐셔와 바리스타가 애플리케이션의 두 가지 개별 구성 요소이다.

 

캐셔가 주문을 받아 주문지를 작성하고 바리스타에게 전달한다.

주문서를 받은 바리스타는 음료를 제조하여 고객에게 제공한다.

다음 주문을 받으면서 프로세스가 반복된다.

 

캐셔와 바리스타가 주문지를 바로바로 전달받으면 문제가 없지만, 바리스타가 주문지를 바로 받지 못하는 상황이라면, 캐셔는 바리스타가 주문지를 받을 때까지 기다려야 한다.

그러면 주문 프로세스는 지연되고 고객은 오래 기다려야 한다.

 

이는 시간이 많이 걸리고 비효율적이므로 커피숍 점주는 대기열을 사용하는 다른 접근 방식을 시도한다.

 

대기열에 있는 주문

 

캐셔와 바리스타가 애플리케이션의 두 가지 개별 구성 요소이다.

Amazon SQS와 같은 메시지 대기열 서비스를 사용하면, 분리된 애플리케이션 구성 요소 간에 메시지를 사용할 수 있다.

 

이전 주문 프로세스와 다른 점은, 캐셔와 바리스타 사이에 버퍼 역할을 하는 주문판이 있다는 점이다.

 

바리스타가 쉬는 시간이거나 다른 주문으로 바쁘더라도 캐셔는 계속해서 새 주문을 대기열에 넣을 수 있다.

바리스타는 대기열을 확인하고 주문을 검색하며, 음료를 제조하여 고객에게 음료를 제공한다.

이후 바리스타는 완료된 주문을 대기열에서 제거한다.

바리스타가 음료를 제조하는 동안, 캐셔는 계속 새로운 주문을 받아 대기열에 추가할 수 있다.