created at 2022-12-01
메세지 큐(MQ)
MQ 란?
클라이언트의 요청을 큐에 저장하고 Consumer이 필요할 때 꺼내쓰는 아키텍처.
장점
- 비동기(Asynchronous)
- 메시지 큐는 생산된 메시지의 저장, 전송에 대해 동기화 처리를 진행하지 않고, 큐에 넣어 두기 때문에 나중에 처리할 수 있다.
- 낮은 결합도(Decoupling)
- 생산자 서비스와 소비자 서비스가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아진다. 이는 확장성과 직결된다.
예시
만약
A
,B1
가 직접적으로 통신한다고 가정해보자. 그리고 이 때,B1
를 확장해서 같은 기능을 수행하는B2
을 만든다고 가정해보자. 이렇게 되면A
는B2
와 통신하는 로직을 새롭게 설정해야만 한다.반면
A
와B1
사이에 메세지 큐가 있다면,B2
를B1
이 속한 소비자 그룹에 추가하기만 하면 된다. 즉,A
,B1
를 수정하지 않아도 서비스를 확장할 수 있다!
- 생산자 서비스와 소비자 서비스가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아진다. 이는 확장성과 직결된다.
- 확장성(Scalable)
- 생산자 서비스 혹은 소비자 서비스를 원하는 대로 확장할 수 있기 때문에 확장성이 좋다.
- 탄력성(Resilience)
- 소비자 서비스가 다운되더라도 어플리케이션이 중단되는 것은 아니다. 메시지는 메시지 큐에 남아 있다. 소비자 서비스가 다시 시작될 때마다 추가 설정이나 작업을 수행하지 않고도 메시지 처리를 시작할 수 있다.
예시
카프카의 경우, 각각의 파티션은 소비자 별 최근 읽은 위치를 기록한다. 따라서 소비자 서비스가 다운 되더라도 마지막 읽은 위치부터 순서대로 진행할 수 있다.
- 소비자 서비스가 다운되더라도 어플리케이션이 중단되는 것은 아니다. 메시지는 메시지 큐에 남아 있다. 소비자 서비스가 다시 시작될 때마다 추가 설정이나 작업을 수행하지 않고도 메시지 처리를 시작할 수 있다.
- 보장성(Guarantees)
- 메시지 큐는 큐에 보관되는 모든 메시지가 결국 소비자 서비스에게 전달된다는 일반적인 보장을 제공한다.
단점
- 언제 메세지가 소비되는지 모르기때문에 즉각적인 서비스가 불가능하다.