투케이2K

88. (Aws/Amazon) [Aws SQS Message Queue] SQS 에서 Queue 큐에 메시지 전송 및 Lambda 트리거 함수 등록 Receive 응답 처리 정리 본문

Aws (Amazon)

88. (Aws/Amazon) [Aws SQS Message Queue] SQS 에서 Queue 큐에 메시지 전송 및 Lambda 트리거 함수 등록 Receive 응답 처리 정리

투케이2K 2025. 7. 15. 20:37
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

 

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / SQS / Message / Queue


- 사전) SQS 간단 설명 정리 : 

  >> Aws SQS 란 서버들끼리 주고 받을 수 있는 메세지 큐를 제공하는 AWS 서비스 입니다

  >> Aws SQS 는 특정 플랫폼 서비스 확장 시 각 기능들을 여러 서버에서 처리하게 되면서, 서버들끼리 주고 받는 메세지를 잃어버리지 않고 정확하게 처리하는 데 도움을 주는 서비스입니다

  >> Aws SQS 기본 개념 및 속성 용어 설명 :

    - 메세지 : SQS 의 기본 데이터 단위 / XML, JSON과 같은 텍스트 형태이며 최대 64KB 까지 보낼 수 있음 / 메세지마다 고유한 ID가 부여 됨

    - 큐 (Queue) : 메세지를 담는 공간 / 리전 별로 생성 필요 / 자료형의 큐와 이름이 같지만, 선입선출(FIFO)을 보장 하지 않음

    - 배치 API : 한 번에 메세지를 최대 10개 혹은 최대 256 KB 까지 동시 처리 가능

    - 보기 제한 시간 (Visibility Timeout) : 메세지를 받은 뒤 특정 시간 동안 다른 곳에서 동일한 메세지를 다시 꺼내볼 수 없음 / 큐 하나에 여러 서버가 메세지를 받을 때 동일한 메세지를 동시에 처리하는 것을 방지 함

    - 지연 전송 (Delay Delivery) : 특정 시간 동안 메세지를 받지 못하게 한다

    - 처리 실패 큐 (Dead Letter Queues) : 메세지를 받고 작업이 처리되면 메세지를 삭제 하지만, 설정한 횟수를 초과하여 메세지를 받았는데 삭제되지 않고 남아있다면 처리 실패 큐로 보내진다

    - 짧은 폴링 (Short Polling) : 메세지 받기 요청을 하면 결과를 즉시 받을 수 있음

    - 긴 폴링 (Long Polling) : 메세지가 있으면 바로 가져오고, 메세지가 없으면 메세지가 올 때까지 기다림 / 기본 제한시간은 20초이며, 1초부터 최대 20초까지 설정할 수 있음

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. SQS 큐 생성

  >> 직접 생성 : 콘솔, CLI, SDK 등으로 생성

    - AWS CLI : aws sqs create-queue --queue-name my-queue

  >> Lambda 에서 생성 : AWS Lambda 함수에서 SQS 큐 생성 수행

    import boto3
    import json

    def lambda_handler(event, context):
      sqs = boto3.client('sqs')

      # 1. 큐 이름 정의
      queue_name = 'my-queue'

      # 2. 큐 생성 (이미 존재하면 기존 큐 URL 반환)
      response = sqs.create_queue(
          QueueName=queue_name,
          Attributes={
              'VisibilityTimeout': '30'  # 메시지 처리 중 다른 소비자에게 숨김
          }
      )
      queue_url = response['QueueUrl']
      print(f"Queue URL: {queue_url}")

      return {
          'statusCode': 200
      }


2. SQS 메시지 전송 Send 처리 Lambda 함수에서 메시지 전송 수행 (SQS 큐가 생성 되어 있고 URL 을 알고 있는 상황)

  >> QUEUE_URL 예시 : https://sqs.ap-northeast-2.amazonaws.com/123456789012/my-queue

    - 123456789012 정보는 계정 ID (어카운트 아이디)

  >> SQS 큐 동적 생성 및 이벤트 처리가 필요한 경우 EventBridge 에서 큐 생성 이벤트 감지 → Send Lambda 를 호출 하는 방법도 있음

    - 이 경우 EventBridge 에서 이벤트 감지를 위해 CloudTrail 에서 create sqs 필터링 설정이 추가 필요

  >> Lambda 함수에서 SQS 메시지 전송 소스 코드 : 

    import boto3
    import os
    import json

    # SQS 클라이언트 생성
    sqs = boto3.client('sqs')

    # 환경 변수에서 큐 URL 가져오기
    QUEUE_URL = os.environ.get('SQS_QUEUE_URL')

    def lambda_handler(event, context):

      # 전송할 메시지 내용
      message_body = json.dumps({
          'task': 'process_data',
          'timestamp': context.aws_request_id if context else 'manual-run'
      })

      # 메시지 전송
      response = sqs.send_message(
          QueueUrl=QUEUE_URL,
          MessageBody=message_body
      )

      print(f"메시지 전송 완료! ID: {response['MessageId']}")

      return {
          'statusCode': 200,
          'body': json.dumps('SQS 메시지 전송 성공')
      }


3. AWS SQS 에서는 Send 이벤트가 발생 시 Receive 처리를 수행하는 자동 Lambda 함수 트리거 매핑 수행

  >> SQS 에 메시지가 들어오면 → Receive Lambda 자동 호출

  >> 만일, SQS 에 자동 트리거 처리 람다 함수가 없는 경우는 별도 백엔드에서 주기적으로 폴링 동작을 수행하며 sqs.receive 이벤트 감지 처리를 해야함

    - 폴링 방식 시 소스 코드 예시 : 

    response = sqs.receive_message(
        QueueUrl=queue_url,
        MaxNumberOfMessages=1,
        WaitTimeSeconds=10  # Long polling
    )


4. Receive 처리를 수행하는 자동 Lambda 함수에서는 필요한 데이터 확인 후 > Dynamo DB 에 데이터 저장 작업 수행

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[SQS (Simple Queue Service) 심플 큐 서비스 개념 및 설명 정리]

https://blog.naver.com/kkh0977/223733090215?trackingCode=blog_bloghome_searchlist


[Aws docs 사이트]

https://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html


[Aws SQS 소개 사이트]

https://aws.amazon.com/ko/sqs/

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments