gRPC 튜토리얼이 날 속였다
어제 각자 쉬면서 코딩을 하는, 재미있는 모임에 다녀왔다.
집에 있으면 늘어지기 쉬우니 밖에 나와서 코딩을 하되 압박감 없이 여유롭게 하는 것이다.
회사에서 gRPC를 사용하고 있는데, 개인적으로 쓴 적은 없어서 한번 써보고 싶었다.
모임에 참석한 선배 한 분이 클라이언트를, 내가 서버를 맡아서 gRPC를 활용한 투두리스트를 만들어보기로 했다.
하지만 공식 홈페이지에 있는 hello, world 예제에서부터 에러를 봤다.
왜냐하면 제공된 example 코드에 불필요한 파일이 들어있었기 때문이다.
공식 문서에도 나와있듯이, 프로토버프 파일을 수정한 뒤 protoc로 다시 컴파일하면 helloworld.pb.go가 재생성된다.
이 helloworld.pb.go에는 protobuf 파일에 정의한 서비스와 관련된 코드들이 들어있다.
그러면 helloworld_grpc_pb.go에는? 여기에도 마찬가지로 서비스와 관련된 코드들이 들어있다.
그래서 redeclared 되었다는 에러 메세지들이 잔뜩 뜨는 것이다.
프로토버프 저장소의 이 링크를 보면 protoc-gen-go 1.20버전에서는 gRPC 서비스에 대한 코드를 만들어주지 않는다고 적혀있다.
추측하자면 과거에는 gRPC 서비스와 관련된 코드와 protobuf 자체와 관련된 코드, 총 2개 파일이 생성되었던 것 같다.
이제는 (아마도 protoc의 버전이 올라가면서) 한 개의 파일에 protobuf 및 gRPC 서비스 코드가 전부 포함되어 있는 것이다.
helloworld_grpc.pb.go를 삭제하고 서버를 실행하니, 아무런 문제가 없이 잘 실행되었다.
불필요한 파일이 예제에 있는 것은 충분히 있을 수 있는 일이지만, 에러를 발생시키는 건 문제다.
gRPC 저장소에 이슈를 올리고 풀 리퀘스트도 했다.
여러가지를 새삼스럽게 깨닫는 모임이었다.
- 로그의 중요성: 로그가 어디에서 에러가 발생했는지, 무엇이 문제인지 명확하게 알려주면 대처하기가 수월하다.
- 단기 목표는 동기 부여에 좋다