대용량 트래픽, 모놀리식 이라는 용어는 익숙하나 RPC라는 용어는 생소해서 궁금해서 해당 세션을 들어봤다.
생소한 내용이라 제대로 이해는 못했지만 나름 주워들은 키워드에 대한 내용만 간략하게 정리해두려고한다.
본 내용은 대략적으로 이해한 내용을 다루고 있습니다.
잘못된 지식이 있을 수도 있으니 해당 내용을 100% 신뢰하지 마시길 바랍니다 🙏
잘못된 정보에 대한 피드백은 항상 감사합니다 🙇♂️
Remote Procedure Call: 원격 프로시저 호출이라는 뜻으로 별도의 원격제어를 위한 코딩 없이 다른 컴퓨터에서 함수나 메소드를 실행할 수 있는 기술이다.
예를들어 클라이언트와 서버가 있다고 가정해보자.
클라이언트는 어떤 함수를 호출할 수 있는지 알아야하고 서버는 어떤 함수를 제공해야하는지 알아야한다.
RPC는 IDL이라는 인터페이스 언어를 이용하여 이러한 명세를 작성하도록 한다.
RPC는 하나의 개념일 뿐 gRPC와 같은 다양한 구현체가 존재한다.
배민 푸드서비스 개발팀은 다음과 같은 일을 하고있다.
배민1 서비스를 오픈하면서 관리 할 코드가 20만줄을 넘긴적이 있었다.
리팩터링을 통해 20만줄 아래로 내리긴 했는데 그럼에도 코드 수는 계속 증가하고 있는 추세다.
또한 다양한 일을 하다보니 멀티 모듈로 관리하고 있는 프로젝트의 코드를 유지보수하기 어려워지기 시작했다.
이에 시스템을 작은 단위로 분류하고자 RPC를 적용하기로 결심했다고 한다.
비즈니스 로직을 수행하는 서버 하나를 여러개의 서비스로 분리하는 작업을 진행했다.
공통 코드를 어떻게 관리하는가? 가 주요 수행 과제였다.
이에 다음과 같은 검토 과정을 거쳤다.
따라서 다음과 같은 요구사항이 나왔다.
그래서 우아한형제들에서는 RPC를 사용하기 용이한 WoowaBoot를 만들었다.
일반적인 Http Controller와 최대한 유사하게 만들었다. @WoowaBbootController
, SampleService
인터페이스를 추가하면 구동 가능하도록 구현했다.
시작하는 방법: SpringBootApplication
-> WoowaBootApplication
WoowaBootApplication
의 module 속성으로 gRPC, Thrift 구현체를 선택 가능하다
서비스 메시는 서비스가 애플리케이션 수명 주기 전반에 걸쳐 데이터와 일관성을 공유하며 서로 통신할 수 있도록 지원하는 사전 구성된 애플리케이션 서비스를 의미한다.
RPC에 대해 깊게 와닿지도 않았는데 갑자기 짜잔~ 하고 라이브러리를 구현하셔서 꽤 많이 놀랐다.
아직 미지의 영역이 너무 많은 것 같다...
주노 몸이 8개였으면 모든 트랙 다 참석시키는건데..