Amazon SQS FIFO (선입선출) 대기열
FO (선입선출)대기열은 작업 및 이벤트 순서가 중요하거나 중복 항목이 허용되지 않는 경우에 애플리케이션 간 메시징을 강화해 줍니다. FIFO 대기열을 사용할 수 있는 상황의 예는 다음과 같습니다.
- 사용자가 입력한 명령이 올바른 순서로 실행되도록 보장
- 가격 수정을 올바른 순서로 전송하여 올바른 제품 가격 표시.
- 학생이 계정 등록 전에 과정에 등록하지 못하도록 차단.
또한 FIFO 대기열은 정확히 1회 처리를 제공하지만 초당 트랜잭션 (TPS) 수가 제한적입니다.
1. SQS 생성하기

먼저 콘솔에 SQS를 검색한 이후 대기열 생성을 눌러준다.
그 다음 우리는 선입선출인 FIFO를 선택하고 이름을 작성한다.
FIFO의 경우 꼭 이름 뒤에 .fifo로 끝맺음을 지어야 한다.
그 후 다른 값들을 기본으로 구성한 후 콘텐츠 기반 중복 제거를 활성화 시킨다.
이 옵션을 키면 FIFO 대기열에서 발생하는 메시지 그룹 ID가 있으므로 메시지 그룹 ID는 동일한 메세지가 복제되지 않도록 한다.
나머지 값들은 기본 값으로 유지한 후 SQS를 생성 해 주었다.
2. 메세지 송, 수신
fifo SQS 생성을 마치면 이런 화면이 나오게 된다.
이번 실습은 단순히 SQS의 FIFO에 대한 것을 알아보기 위한 것이므로 간단하게 진행 할 것이다.
먼저 메세지 전송 및 수신을 클릭한다.
먼저 메시지의 본문을 작성한 후 메세지의 그룹의 이름을 작성했다.
그 후 메시지 전송을 누른다.
그럼 밑에 메시지 수신이 1로 변경되며 폴링기간이 30초인 것을 확인할 수 있고 최대 메시지 수가 10인 것을 확인할 수 있다.
그럼 현재는 위에서 메시지가 전송을 진행 한 것이고 밑에서는 메시지를 수신 할 준비가 된 것이다.
여기서 메시지 폴링을 클릭한다.
메시지 폴링이 완료되면 메시지 칸에 메시지 ID가 생성되며 눌러보면 내가 수신했던 메세지 본문을 확인할 수 있다.
그런데 만약 똑같은 내용및 메세지 그룹으로 메시지를 수신하면 어떻게 될까?
즉 중복 메시지가 들어가게 된다면 어떻게 되는 건지 확인 해 보았다.
똑같은 메시지에다가 똑같은 메시지 그룹을 다시 수신한 후 폴링해보니 새로운 ID가 생기지는 않고 수신수만 1회 늘어났다.
동일한 메세지에 본문과 동일한 그룹 ID를 사용했기 때문에 동일한 메세지로 처리하는 것이다.
2. 메세지 송, 수신
그 후 메세지 내용만 변경시키고 같은 그룹 ID를 사용 해 봤다.
그러자 이런 화면이 나왔다.
현재 사용 가능한 메시지는 총 두개이며 이 메세지에 대해 폴링을 수행 한 것이다.
그러므로 원래 첫번째 메세지는 수신수가 두번이었지만 수신함에 쌓인 메세지가 또한번 폴링되면서 수신 수가 늘어났으며 두번째 메세지는 처음 보내는 것이므로 새로운 ID와 함께 수신 수 1로 추가되었다.
3. standard와 비교해보기
이는 standard에서 SQS 메세지를 보낸 후 폴링 한 결과물들이다.
위와 똑같이 몇가지의 메시지를 작성한 후 중복되는 메시지를 작성해서 폴링 했다.
표준 대기열의 경우 최대한 메시지가 도착한 순서대로 처리할 수 있도록 정렬한다고 하지만 순서가 맞지 않는 경우를 볼 수 있었다.
또한 메세지가 중복으로 발생한 부분에 대해서 모두 따로 ID 처리를 진행해 수신수가 많이 늘어난 것을 확인했다.
FIFO는 메세지 그룹이 같다면 중복처리를 하기 때문에 ID가 늘어나지 않고 수신수가 늘어나며 중복 메세지를 처리 해 주었다.
이번 실습을 통해서 SQS Standard와 FIFO의 차이점을 어느정도 파악할 수 있었다.
하지만 단순한 실습이라 실제와는 동떨어져있다는 생각을 했다.
다음 실습에서는 lambda나 SNS와 연계해서 두 방식의 차이점을 확인해야 할 것 같다.
출처
https://www.youtube.com/watch?v=Q51lECXNmt4&ab_channel=Pythoholic
'[AWS] > AWS 기타' 카테고리의 다른 글
[MariaDB / MySQL] 테이블 이름 대소문자 변경 (0) | 2022.09.28 |
---|---|
[MariaDB / MySQL] uft8 & utf8mb4 비교 (0) | 2022.09.28 |
[AWS] AWS SMTP 포트 제한 제거 방법 (0) | 2022.09.27 |
[AWS] SNS를 이용해서 SQS 및 EMAIL로 메세지 보내기 (0) | 2022.09.26 |
[AWS] CloudTrail란 무엇인가? (0) | 2022.09.22 |
[AWS] RDS 유형 변경시 확인해야 할 점 (0) | 2022.09.21 |
[AWS] Amazon Inspector 란 무엇인가? (2) | 2022.09.20 |
[AWS] Savings Plan 사용법 (0) | 2022.09.19 |
댓글