DevOps BootCamp/마이크로서비스

API 디자인과 프로세스 간 통신

cloudmaster 2023. 5. 8. 09:38
”마이크로서비스 간의 통신”이라고 이름 붙이지 않고, “프로세스 간 통신(Inter-process communication, IPC)”이라고 이름 붙인 것은, 결국 마이크로서비스는 하나의 프로세스 단위로 실행되기 때문

 

프로세스 간의 통신

 > 서비스와 서비스가 서로 통신하기 위해서는 인터페이스(interface)가 존재해야 하고, 인터페이스가 요구하는 방식대로 커뮤니케이션해야 함

 

동기/비동기

 > HTTP 프로토콜은 기본적으로 TCP(또는 UDP) 연결을 만들고, 이 위에서 요청에 따라 즉시 응답이 오는 형태로 구현, 즉 동기적인 응답을 제공

 

여기서 잠깐! HTTP는 비동기 아닌가요?
어쨌든 HTTP는 컴퓨터와 컴퓨터 사이의 네트워크 통신이고, 이는 네트워크 지연에 따라 즉시 응답이 오지 않을 수도 있기 때문에 이를 비동기로 인식할 수 있음
이는 프로그래밍 언어의 관점에서 틀린 말은 아님
but! 프로세스 간 통신의 관점에서 HTTP는 동기적인 메커니즘으로 분류

어쨌든 서로 통신하는 두 컴퓨터는 모두 켜져 있어야 하며, 클라이언트는 서버가 제 때 응답을 줄 것이라고 기대하기 때문

 

서비스작업

동기 요청/응답
비동기 비동기 요청/응답
단방향 알림 (예를 들어, 푸시 알림)

 

일대일 및 일대다 통신

 > 뉴스레터 구독 서비스는 1:1로 커뮤니케이션하지 않고 구독자 모두에게 동일한 메시지를 제공하는 형태, 즉 일대다 커뮤니케이션 방식

 

HTTP는 일대일? 아니면, 일대다?

 > 요청/응답으로 이뤄진 한 번의 트랜잭션(transaction)에서 서버는 여러 클라이언트에게 동시에 응답을 전달하지 않음

 > 서버가 여러 클라이언트를 상대할 수는 있지만, 그것은 여러 번의 1:1 커뮤니케이션이지, 동시에 여러 클라이언트를 상대하는 1대다 커뮤니케이션이 아닙니다. 따라서 일대일 통신이라고 볼 수 있음

 

프로세스 간의 직접/간접 연결

 > 메시지 브로커가 두 프로세스 사이에 위치해서 오고 가는 메시지 자체를 관리하는 형태의 연결 방식도 있음

 > 비동기적인 처리는 물론이고, 설사 둘 중 하나의 프로세스가 실행 중이 아니더라도 서로 메시지를 주고받을 수도 있음