목록 보기
프로덕션 환경에서 사용하는 golang과 gRPC
백엔드

프로덕션 환경에서 사용하는 golang과 gRPC

뱅크샐러드
뱅크샐러드
2020년 2월 27일

두줄요약

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 변환·에러 처리 검증

다음 읽기

#Go 주제를 이어서 읽기

뱅크샐러드 Go 코딩 컨벤션

Go 서버 개발에서 안전한 오류 처리와 고루틴, HTTP 연결 관리 원칙을 정리했습니다. 테스트·네이밍·프로젝트 구조까지 일관된 코드베이스를 위한 컨벤션을 제시합니다.

뱅크샐러드
뱅크샐러드
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...