통신 방식은 먼저 호출하는 쪽과 호출당하는 쪽의 수로 구분해볼 수 있습니다.
하나의 요청이 하나의 서비스를 실행하면 일대일(One-to-One)
하나의 요청이 여러 서비스를 실행하면 일대다(One-to-Many)
그리고 동기(Synchronous)와 비동기(Asynchronous)로도 구분할 수 있습니다.
동기 방식은 요청을 보내고 응답이 올 때까지 기다리는 방식으로 이후 동작은 멈춘 상태가 됩니다. 그리고 응답을 받은 후에 처리합니다.
반대로 비동기 방식은 요청을 보내고 응답이 올 때까지 기다리지 않고 다음을 실행합니다.
1) 요청 / 응답: 요청을 보내고 응답이 올 때까지 기다립니다.
2) 알림: 요청을 보내기만 합니다. 모바일의 푸시 알림을 생각하시면 됩니다.
3) 요청 / 비동기 응답: 요청을 보내면 비동기로 응답이 옵니다.
4) 퍼블리시 / 구독: 등록된 서비스들에 요청을 보냅니다. 요청을 받은 서비스들은 각자 로직을 처리합니다.
5) 퍼블리시 / 비동기 응답: 위와 같지만 비동기 형태로 응답을 보냅니다.
애플리케이션에 따라서 하나의 방식만으로도 충분하기도 하고, 여러 방식을 함께 사용하기도 합니다. 다음 택시 호출 서비스를 예로 들어보겠습니다.
택시 호출 애플리케이션을 예로 들어보겠습니다.
승객이 택시를 부를 때 REST API를 호출하게 됩니다. 이때, POST 방식으로 /trips
를 호출하게 됩니다.
여행 관리 서비스에서 승객에 대한 정보를 조회하기 위해, 승객 관리 서비스가 제공하는 REST API를 사용해서 GET 방식으로 /passengers/{passengerId}
로 요청을 보냅니다.
그럼 승객 ID로 승객 정보를 조회해서 해당 정보를 가지고 여행 정보를 최종적으로 생성하게 됩니다.
REST는 동기 방식이므로 요청한 마이크로서비스는 응답을 받은 마이크로서비스가 요청을 처리할 때까지 기다리게 됩니다.
그리고 항상 일대일 통신 방식을 사용하게 됩니다.