
프로덕션 환경에서 사용하는 golang과 gRPC
두줄요약
Go·gRPC 기반 마이크로서비스에서 protobuf를 API 단일 원천으로 관리한 방식을 소개합니다. grpc-gateway와 interceptor로 REST 호환성 및 운영 관측성을 확보했습니다.
문제 상황
- REST·JSON 기반 마이크로서비스 통신에서 API 문서와 실제 코드 간 명세 불일치
- 신규 Go·gRPC 서비스와 Python·Scala 등 기존 REST 서비스 간 호환성 필요
- 프로덕션 운영을 위한 호출 추적, 구조화 로그, 오류 맥락, 메트릭 확보 필요
구조와 흐름
- 모든 protobuf와 생성 코드를 단일 IDL 리포지터리에서 관리해 API source of truth 구성
- grpc-gateway HTTP 레이어로 gRPC 엔드포인트의 JSON API 제공
- 기존 REST 서비스별 Go client에서 protobuf 변환·에러 처리 책임 분리
성능/운영 포인트
- unary interceptor 체인으로 recovery, 구조화 로깅, context tags, stacktrace, StatsD 메트릭 적용
- 요청 수·응답 코드·latency 자동 집계와 호출자 헤더 전달로 서비스 간 추적 지원
- protoc·plugin 버전 차이에 따른 생성물 불일치를 CI lint 및 generate·diff 테스트로 방지
주의할 점
- stacktrace 보존을 위해 에러를 중복 wrapping하지 않는 규칙
- gRPC client 싱글톤과 최외곽 레이어의 의존성 주입 병행
- HTTP 테스트 서버인 httptest 기반 client 변환·에러 처리 검증



