마이크로서비스 아키텍처, gRPC

·2020년 8월 29일
1

Architecture

목록 보기
1/1

마이크로서비스 아키텍처와 gRPC, 최근 주변에서 자주 언급되던 키워드이다. 궁금해서 몇 번 검색도 해보고 블로그들도 읽어보았지만 잘 와닿지 않아 대-충 마이크로서비스 아키텍처는 서비스를 여러개로 잘게 쪼갠 서비스 구조, gRPC 는 구글에서 나온 REST 랑 다른 무언가 😅 라는 정도의 얕디 얕은 이해만 하고 넘겼는데, 어느 날 내가 참여하는 프로젝트의 스택이 Nest JS 로 바뀌었으며, 덤으로 이 Nest 서버는 클라이언트에 REST API 를 제공하면서 동시에 gRPC 를 이용하여 다른 서비스들과도 상호작용을 해야한다는 뭔가 엄청난 것 같으면서도 하나도 모르겠는 소식을 듣게 되었다. 더 이상 미룰 수 없다, 공부.

마이크로서비스 아키텍쳐

먼저, HTTP 요청도 받고 다른 마이크로서비스 인스턴스들도 사용하는 것을 하이브리드 애플리케이션이라고 한다.

A hybrid application is one that both listens for HTTP requests, as well as makes use of connected microservices.

지금은 바로 고개가 끄덕여지는 문장이지만, 마이크로서비스를 모르는 상태에서는 저 말을 소화하는 것조차 쉽지 않았다. 물론 지금도 잘 아는 것은 아니지만, 쉽게 표현을 하자면 하나의 이커머스 서비스를 구성하기 위해 결제를 담당하는 서버, 회원 정보를 담당하는 서버, 각 상품 정보를 담당하는 서버 등이 다 별개의 서버로 구성되어 있는 것이 마이크로서비스 아키텍처, 그리고 각 서버들이 마이크로서비스이다.

이런 구조에서는 크게 두 종류의 통신을 하게 될 것이라고 생각했다. 첫 번째는 클라이언트와의 통신(A), 두 번째는 마이크로서비스간의 통신(B). 예를 들어 사용자가 웹 페이지에서 물건을 구매했을 때, 클라이언트가 서버로 요청을 보내고(A), 해당 요청을 받은 서버가 다른 마이크로서비스들을 통해 회원 정보 확인, 결제 등등을 처리(B)하여 다시 클라이언트에 응답(A)을 보내주는 형태가 되지 않을까?

나의 경우 클라이언트와의 통신을 REST API 로, 마이크로서비스간의 통신은 gRPC 로 하다보니 위에서 이야기한 하이브리드 애플리케이션 형태로 구현을 하게 되었다.

gRPC

문맥상 REST API 의 대체재처럼 등장하다보니 마치 통신 기술 중 하나인 것만 같은데, 사실 gRPC 는 프레임워크이다. 더 정확하게는 RPC 라는 통신 기술을 사용하는 프레임워크!

A high performance, open-source universal RPC framework

RPC 를 아주 단편적으로 표현하면, 통신을 해야하는 C 와 D 가 있을 때 C 가 D 안의 함수를 직접 호출해서 쓰는 방법이다. C 는 D 안의 그 함수 내부가 어떻게 생겼는지는 모르지만 대신 함수를 쓰기 위해 인자로 무엇을 넘겨야 하는지, 함수의 리턴 값으로 어떤 것들을 받게 되는지는 알고 있다. 어떻게 아냐면, C 와 D 모두 동일한 proto 라는 것을 공유하는데 이 proto 에 각 함수 이름, 그리고 input 과 return 에 대한 정보가 담겨있기 때문이다.

0개의 댓글