Skip to main content Link Menu Expand (external link) Document Search Copy Copied

created at 2022-12-01

메세지 큐(MQ)

MQ 란?

클라이언트의 요청을 큐에 저장하고 Consumer이 필요할 때 꺼내쓰는 아키텍처.

장점

  1. 비동기(Asynchronous)
    • 메시지 큐는 생산된 메시지의 저장, 전송에 대해 동기화 처리를 진행하지 않고, 큐에 넣어 두기 때문에 나중에 처리할 수 있다.
  2. 낮은 결합도(Decoupling)
    • 생산자 서비스와 소비자 서비스가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아진다. 이는 확장성과 직결된다.

      예시

      만약 A, B1가 직접적으로 통신한다고 가정해보자. 그리고 이 때, B1를 확장해서 같은 기능을 수행하는 B2을 만든다고 가정해보자. 이렇게 되면 AB2와 통신하는 로직을 새롭게 설정해야만 한다.

      반면 AB1 사이에 메세지 큐가 있다면, B2B1이 속한 소비자 그룹에 추가하기만 하면 된다. 즉, A, B1를 수정하지 않아도 서비스를 확장할 수 있다!

  3. 확장성(Scalable)
    • 생산자 서비스 혹은 소비자 서비스를 원하는 대로 확장할 수 있기 때문에 확장성이 좋다.
  4. 탄력성(Resilience)
    • 소비자 서비스가 다운되더라도 어플리케이션이 중단되는 것은 아니다. 메시지는 메시지 큐에 남아 있다. 소비자 서비스가 다시 시작될 때마다 추가 설정이나 작업을 수행하지 않고도 메시지 처리를 시작할 수 있다.

      예시

      카프카의 경우, 각각의 파티션은 소비자 별 최근 읽은 위치를 기록한다. 따라서 소비자 서비스가 다운 되더라도 마지막 읽은 위치부터 순서대로 진행할 수 있다.

  5. 보장성(Guarantees)
    • 메시지 큐는 큐에 보관되는 모든 메시지가 결국 소비자 서비스에게 전달된다는 일반적인 보장을 제공한다.

단점

  1. 언제 메세지가 소비되는지 모르기때문에 즉각적인 서비스가 불가능하다.