[Spring Boot & MSA] Communication between Microservices(1)

원알렉스·2020년 7월 31일
0

Spring Boot MSA

목록 보기
6/12
post-thumbnail

깃허브 소스코드
Udemy 강의

🚀 마이크로서비스 간의 통신

  • 모놀리식 애플리케이션에서는 단순하게 다른 메소드나 함수를 호출하면 됩니다.
  • 하지만 마이크로서비스에서는 서비스 단위로 나뉘어져 있는 분산 시스템이기 때문에 서비스 간의 통신이 필요합니다.
  • 이러한 통신을 프로세스 간 통신(Inter-Process Communication)이라고 합니다.

통신 방식

  • 통신 방식은 먼저 호출하는 쪽과 호출당하는 쪽의 수로 구분해볼 수 있습니다.

  • 하나의 요청이 하나의 서비스를 실행하면 일대일(One-to-One)

  • 하나의 요청이 여러 서비스를 실행하면 일대다(One-to-Many)

  • 그리고 동기(Synchronous)와 비동기(Asynchronous)로도 구분할 수 있습니다.

  • 동기 방식은 요청을 보내고 응답이 올 때까지 기다리는 방식으로 이후 동작은 멈춘 상태가 됩니다. 그리고 응답을 받은 후에 처리합니다.

  • 반대로 비동기 방식은 요청을 보내고 응답이 올 때까지 기다리지 않고 다음을 실행합니다.

  • 1) 요청 / 응답: 요청을 보내고 응답이 올 때까지 기다립니다.

  • 2) 알림: 요청을 보내기만 합니다. 모바일의 푸시 알림을 생각하시면 됩니다.

  • 3) 요청 / 비동기 응답: 요청을 보내면 비동기로 응답이 옵니다.

  • 4) 퍼블리시 / 구독: 등록된 서비스들에 요청을 보냅니다. 요청을 받은 서비스들은 각자 로직을 처리합니다.

  • 5) 퍼블리시 / 비동기 응답: 위와 같지만 비동기 형태로 응답을 보냅니다.

  • 애플리케이션에 따라서 하나의 방식만으로도 충분하기도 하고, 여러 방식을 함께 사용하기도 합니다. 다음 택시 호출 서비스를 예로 들어보겠습니다.

  • 1) 승객이 모바일로 픽업을 요청합니다. 이 요청은 여행 관리 서비스를 호출합니다 (알림)
  • 2) 여행 관리 서비스는 승객 관리 서비스에서 승객 정보를 확인합니다 (요청/응답)
  • 3) 여행 관리 서비스는 해당 여행을 디스패처와 가까운 택시기사에게 보냅니다 (퍼블리시/구독)

동기 방식 - REST

  • 택시 호출 애플리케이션을 예로 들어보겠습니다.

  • 승객이 택시를 부를 때 REST API를 호출하게 됩니다. 이때, POST 방식으로 /trips 를 호출하게 됩니다.

  • 여행 관리 서비스에서 승객에 대한 정보를 조회하기 위해, 승객 관리 서비스가 제공하는 REST API를 사용해서 GET 방식으로 /passengers/{passengerId} 로 요청을 보냅니다.

  • 그럼 승객 ID로 승객 정보를 조회해서 해당 정보를 가지고 여행 정보를 최종적으로 생성하게 됩니다.

  • REST는 동기 방식이므로 요청한 마이크로서비스는 응답을 받은 마이크로서비스가 요청을 처리할 때까지 기다리게 됩니다.

  • 그리고 항상 일대일 통신 방식을 사용하게 됩니다.

비동기 방식 - 메시징

  • 비동기 방식은 메시지를 보내놓고 응답을 기다리지 않습니다.
  • 이 메시지는 Header와 Body로 구성되어 있고 Channel을 통해 전송됩니다.
  • 메시지는 한 곳에서만 보낼 수 있고(일대일), 퍼블리시/구독 모델을 따라 여러 곳에 메시지를 보낼 수 있습니다(일대다).
  • 즉, 그 메시지를 받겠다고 구독해놓은 서비스에게 모두 메시지가 전송되는 것입니다.

  • 이러한 메시징 방식은 클라이언트와 서비스 사이의 의존도를 줄여줍니다.
  • 동기 방식은 클라이언트와 서비스가 서로를 알아야 하고 직접 통신하는 구조이지만,
  • 메시징 방식은 그 사이에 메시징 시스템이 들어가서 간접적으로 통신하기 때문입니다.
  • 일대일 통신 뿐만 아니라 일대다 통신을 지원하는 것도 장점입니다.
  • 메시지를 전송하는 표준 프로토콜은 AMQP입니다.
  • 그리고 오픈소스 메시징 시스템은 대표적으로 RabbitMQ와 Apache Kafka가 있습니다.
profile
Alex's Develog 🤔

0개의 댓글