AI 요약
gRPC의 핵심은 API 문서를 사후에 작성하는 REST와 달리, .proto 파일을 통해 서비스 구조를 미리 정의하는 '계약 우선(contract-first)' 철학에 있습니다. 이 .proto 파일은 데이터 구조(Messages)와 서비스 기능(RPCs)을 모두 포함하는 '진실의 근원(Source of Truth)' 역할을 수행합니다. 개발자는 protoc 컴파일러를 사용하여 단일 정의 파일로부터 Go, Java, C#, Python 등 다양한 언어의 클라이언트 스터브와 서버 보일러플레이트 코드를 생성할 수 있습니다. gRPC는 단순한 요청-응답(Unary)뿐만 아니라 서버 스트리밍, 클라이언트 스트리밍, 그리고 실시간 통신에 최적화된 양방향 스트리밍까지 총 4가지의 통신 모델을 기본적으로 지원합니다. 또한, 인증이나 트레이싱 같은 횡단 관심사를 처리하기 위해 HTTP 헤더와 유사한 키-값 쌍 형태의 메타데이터 시스템을 갖추고 있어 고성능 마이크로서비스 아키텍처 구축에 필수적인 도구로 자리 잡고 있습니다.
핵심 인사이트
- 계약 우선 설계: .proto 파일을 통해 API의 구조를 선제적으로 정의하며, 이는 REST의 OpenAPI 방식보다 엄격한 구조를 강제함.
- 다국어 지원: protoc 컴파일러를 활용해 Go, Java, C#, Python 등 주요 프로그래밍 언어에 대한 클라이언트 및 서버 코드를 자동 생성함.
- 4가지 스트리밍 모델: Unary(단일 호출), Server streaming(구독), Client streaming(데이터 업로드), Bidirectional streaming(실시간 채팅/게임)을 모두 지원함.
주요 디테일
- 서비스 정의 예시:
fruit.v1패키지의FruitService를 통해GetFruit(Unary),ListFruits(Server streaming) 등의 메서드 구조를 구체화함. - 메타데이터 규칙: 키-값 쌍으로 구성되며, 키 이름은
grpc-로 시작할 수 없고 바이너리 값의 경우 키가 반드시-bin으로 끝나야 함. - 비즈니스 로직 분리: Bearer 토큰을 통한 인증이나 trace ID를 전달하는 트레이싱 기능을 메타데이터로 처리하여 비즈니스 페이로드와 분리함.
- HTTP/2 기반: 하부 계층에서 HTTP/2 프레이밍을 사용하여 효율적인 바이너리 데이터 전송 및 멀티플렉싱을 실현함.
향후 전망
- 마이크로서비스 표준화: 성능과 일관성 장점으로 인해 기업용 마이크로서비스 간 통신(Internal API)에서 REST를 대체하는 표준으로 더욱 확산될 것임.
- 실시간 서비스 확대: 양방향 스트리밍 기능을 활용한 IoT 텔레메트리 수집 및 실시간 멀티플레이어 게임 백엔드 구현이 증가할 것으로 예상됨.
