피드로 돌아가기
뱅크샐러드 기술블로그Backend
원문 읽기
프로덕션 환경에서 사용하는 golang과 gRPC
뱅크샐러드가 REST API 기반 마이크로서비스를 gRPC와 protobuf 기반으로 전환해 API 명세의 노후화 문제 해결 및 언어별 코드 자동 생성
AI 요약
Context
RESTful API와 Swagger 문서 기반의 마이크로서비스 운영 중 코드 변경 사항이 문서에 반영되지 않아 API 명세가 점진적으로 노후화되었다. 이로 인해 개발자들이 구두 합의에 의존하게 되고 신규입사자의 온보딩이 어려워지며 버그 발생이 증가하는 악순환이 반복되었다.
Technical Solution
- IDL 중앙 리포지토리 구축: 모든 protobuf 파일을 단일 IDL 리포지토리에서 관리해 source of truth 확립
- 다중 언어 코드 생성 자동화: protoc를 통해 Go, Java, Python, Swift 등 6개 언어의 코드를 자동 생성하고 git에 포함해 protoc 버전 통일
- CI 파이프라인 검증: lint, generate & diff 테스트를 통해 잘못된 코드 생성 방지
- gRPC 서버 Interceptor 체인 구축: gRPC 통신 시 unary interceptor를 통해 로깅, statsd 메트릭 수집, 스택 트레이스 기록을 자동화
- grpc-gateway 게이트웨이 도입: gRPC 서비스를 JSON 기반 REST API로 노출해 기존 서비스와의 호환성 유지
Key Takeaway
마이크로서비스 환경에서 protobuf를 단일 리포지토리로 중앙화하고 자동 코드 생성을 CI에 내장하면, API 명세와 구현 코드의 일관성을 강제할 수 있으며 이는 문서 노후화로 인한 협업 비용을 근본적으로 제거한다.
실천 포인트
다양한 언어로 된 마이크로서비스를 운영하는 팀에서 protobuf 기반 IDL을 중앙 리포지토리로 관리하고, 각 언어별 생성 코드를 버전 관리에 포함하며, CI에서 protoc 버전과 생성 결과를 검증하면 API 명세의 일관성을 유지하면서 개발 팀 간 협업 오버헤드를 줄일 수 있다.