프로세스 간의 통신
서비스와 서비스가 서로 통신하기 위해서는 인터페이스가 존재해야 하고, 인터페이스가 요구하는 방식대로 커뮤니케이션해야한다.
동기/비동기
HTTP 프로토콜은 기본적으로 TCP(또는 UDP) 연결을 만들고, 이 위에서 요청에 따라 즉시 응답이 오는 형태로 구현이 되어 있습니다. 즉 동기적인 응답을 제공한다.
하지만 세상에는 요청에 따른 응답이 즉시 도착하는 커뮤니케이션만 있지는 않다.
예를 들어, 문자 메시지를 생각해보면 발신자는 수신자가 즉시 메시지를 보고 답장하리라고 기대하지 않는다.
또, 뉴스레터와 같은 구독 서비스를 생각해보아도, 사용자가 구독을 해놓으면 콘텐츠 생산자가 메시지를 정해진 때에 보내주고 사용자는 푸시 알림 등으로 인지하고 소비할 수 있다.
이러한 패턴은 비동기적인 커뮤니케이션이라고 한다.
서비스 | 작업 |
동기 | 요청/응답 |
비동기 | 비동기 요청/응답 단방향 알림 (ex: 푸시 알림) |
일대일 및 일대다 통신
커뮤니케이션을 시간의 관점이 아닌 다른 관점에서 보았을 때, 1:1로 작동하지 않는 커뮤니케이션 방식도 세상에 많이 존재한다.
앞서 말한 뉴스레터 구독 서비스는 1:1로 커뮤니케이션하지 않고 구독자 모두에게 동일한 메시지를 제공하는 형태로 일대다 커뮤니케이션 방식을 취한다.
HTTP는 일대일일까 일대다일까?
요청/응답으로 이뤄진 한 번의 트랜잭션(transaction)에서 서버는 여러 클라이언트에게 동시에 응답을 전달하지 않는다. 서버가 여러 클라이언트를 상대할 수는 있지만, 그것은 여러 번의 1:1 커뮤니케이션이지, 동시에 여러 클라이언트를 상대하는 1대다 커뮤니케이션이 아니다.
따라서 HTTP는 일대일 통신이라고 볼 수 있다.
프로세스 간의 직접/간접 연결
클라이언트-서버 아키텍처에서 두 프로세스 간의 직접 연결을 구현할 수도 있지만, 중간에 메시지 브로커가 두 프로세스 사이에 위치해서 오고 가는 메시지 자체를 관리하는 형태의 연결 방식이 있다.
이 경우 비동기적인 처리는 물론이고, 설사 둘 중 하나의 프로세스가 실행 중이 아니더라도 서로 메시지를 주고받을 수 있다.
'MicroService' 카테고리의 다른 글
CQRS (0) | 2023.05.08 |
---|---|
메시지 브로커를 이용한 비동기식 통신 (0) | 2023.05.08 |
DDD(Domain Driven Design) (0) | 2023.05.08 |
Microservices Architecture (0) | 2023.05.03 |
What is MSA (0) | 2023.05.03 |