[gRPC/gRPC GATEWAY] json 필드 이름 proto 타입이름과 다를때

사실상 gRPC를 사용한다면 필드이름이랑 json으로 변환할때 큰 신경을 안써도 된다. 적어도 내가 하는 프로젝트에선

 

하지만 gRPC를 HTTP 통신을 하고싶다면 요청은 큰 문제가 없지만 응답을 받을때 우리가 예상한 키 값으로 넘어 오지 않는다.

 

가령

 

message Test{
 string first_name = 1; ==> JSON firstName
 string last_name = 2;  ==> JSON lastName
}

위와 같이 _ 가 camelCase형식으로 바뀌디 때문에 예상한 응답이 아닐 경우가 있다.

 

이럴때는 gRPC gateway 의 ServeMux에 옵션을 추가해주면 해결된다.

 

gwMux := runtime.NewServeMux(
    runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{
        MarshalOptions: protojson.MarshalOptions{
            UseProtoNames: true,
        },
    }))

 

WithMarshalerOption함수를 사용하여 옵션을 추가해 주면된다.

 

사용하려는 MIME에 runtime.JsonPB{} 구조체에 MarshalOptions 의 UseProtoNames를 true로 설정해 주면 proto에 정의된 필드 이름대로 JSON 키 값이 출력된다.

 

'개발 > Go' 카테고리의 다른 글

Go 1.22 release  (1) 2024.02.15
Retry 패키지  (0) 2023.10.31
[문법] 임시 구조체  (0) 2022.05.13
[gRPC] message oneof 사용  (0) 2022.05.11