피드로 돌아가기
Your gRPC Protobuf Types Don't Belong in Your Domain Layer
Dev.toDev.to
Backend

Adapter 도입을 통한 gRPC Proto-Domain 결합도 제거 및 런타임 Panic 방지

Your gRPC Protobuf Types Don't Belong in Your Domain Layer

Gabriel Anhaia2026년 4월 28일10intermediate

Context

gRPC generated structs를 Domain Layer까지 직접 전달하여 발생하는 강한 결합 구조 분석. Proto optional 필드의 Pointer 특성으로 인한 Nil pointer panic 발생 및 Transport Layer의 세부 구현이 비즈니스 로직으로 전이되는 아키텍처적 한계 노출.

Technical Solution

  • Hexagonal Architecture 기반의 Transport Model과 Domain Model의 완전한 분리 설계
  • Inbound Adapter를 통한 Proto structs의 Domain type 변환 및 유효성 검증 로직 집중화
  • timestamppb 등 Protobuf 전용 타입을 Go standard time.Time으로 변환하여 외부 라이브러리 의존성 제거
  • Domain Model 내 Pointer 사용을 지양하고 Plain Go structs를 정의하여 Nil-safe한 비즈니스 로직 확보
  • Outbound Adapter를 통해 도메인 상태를 다시 Wire format으로 변환하는 단방향 데이터 흐름 구축
  • Proto 정의 변경 시 수정 범위를 Adapter Layer로 국한시켜 도메인 로직의 안정성 유지

- gRPC generated code가 Service Layer의 파라미터나 리턴 타입으로 사용되고 있는지 확인 - 도메인 로직 내에 timestamppb, wrapperspb 등 protobuf 패키지 import 존재 여부 검토 - Proto optional 필드 역참조 시 Nil-safe 체크가 Adapter가 아닌 비즈니스 로직에 산재해 있는지 분석 - Proto 필드명 변경 시 수정해야 할 파일 개수가 Adapter 외의 영역까지 확장되는지 측정

원문 읽기