아마존 웹서비스

Simple Queue Service (SQS)

Simple Queue Service

해야 할 일을 나중에 처리하거나, 다른 시스템이 처리 할 수 있도록 하기 위한 비동기 메시징 서비스다.

SQS는 처리해야 할 업무에 대한 TODO 리스트와 같은 역할을 한다. 시스템에서는 이를 메시지라고 부른다. SQS는 이러한 메시지의 저장소다. SQS는 AWS에서 관리하는 서비스이기 때문에 이 시스템이 처리 할 수 있는 메시지의 양에 대해서 걱정하지 않아도 된다. 또한 매우 저렴한 가격에 메시징 서비스를 제공한다.  

사례 1.

예를들어 Youtube를 AWS에서 구축한다고 해보자. Youtube는 대규모의 사용자가 전송하는 대용량의 데이터를 수신해서 처리해야 하는 서비스다. 이런 서비스는 여러개의 독립적인 시스템을 구축하고 각각의 시스템이 서로 협력하는 방식으로 구현하는 것이 보다 효율적이다. 예를들어 아래와 같은 시스템들이 있을 것이다.

  • 사용자가 업로드한 동영상을 수신하는 시스템 - 수신자
  • 업로드된 동영상을 전달 받아서 이를 인코딩하는 시스템 - 인코더
  • 인코딩이 끝났음을 업로더에게 이메일로 발송하는 시스템  - 메일러

이러한 시스템들이 서로 협력하기 위해서는 서로의 진행상황을 공유해야 할 필요가 있다. 우선 수신자가 SQS 서비스에 업로드된 동영상을 추가한다. 인코더는 정기적으로 SQS를 확인한다. SQS에 추가된 동영상 파일이 발견되면 인코딩을 시작한다. 인코딩이 끝나면 SQS에 인코딩이 끝난 동영상을 추가한다. 메일러는 SQS에 인코딩이 끝난 동영상이 존재하는지 확인한다. 동영상이 발견되면 해당 동영상의 업로더에게 이메일을 발송한다.

사례 2.

신규글을 작성하면 그 글을 구독하는 사람들에게 새로운 글이 작성되었음을 이메일로 알려야 하는 시스템이 있다. 그런데 신규글을 작성했을 때 모든 구독자에게 이메일을 발송한다면 구독자가 많은 글의 경우에는 매우 오랜시간 사용자를 대기하게 해야 할 것이다. 이런 경우 신규글이 작성되었을 때 신규글이 작성되었음을 SQS에 발행하고, 백그라운드에서 SQS를 처리하도록하면 사용자의 대기 시간을 줄일 수 있을 것이다.

참고

댓글

댓글 본문
  1. 질문있어요
    언제나 좋은 강의 감사합니다.

    질문이 하나 있는데, 인코더 1이 msg를 하나 받아서 처리하고 있는 중에
    time out 이 지나버리면 msg가 다시 보여지게되고, 인코더 2가 그 msg를 다시 받아서 처리할텐데
    이렇게 되면 인코더 1,2가 똑같은 작업을 하게 됩니다.
    이를 방지하기 위해 time out 을 처리시간보다 길게 잡아야 할 것 같은데,
    처리 시간을 어떻게 알고 처리시간보다 time out 을 길게 정할 수 있을까요?
    time out 시간을 일파만파 길게 잡을 순 없을 것이고... 위의 문제를 해결할 다른 방법이 혹시 있을까요?
  2. 옹칭킹
    AWS 강좌 많이 나왔으면 좋겠습니다 ㅠㅠ
    이고잉님 덕분에 밥먹고 살 수 있네요 !!
    항상 감사합니다.
  3. wisdomguy
    감사드립니다. 짧은 시간에 머리속에 각인이 된 강좌 ^^
  4. 꿈나무
  5. 백엔드개발자 백경준
    사용 할 예정이라 찾아보고 있었습니다! 좋은 자료 감사합니다. 외쳐!!갓고잉!! 빛고잉 !;
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기