단항 gRPC 서비스 구현
grpc-go를 사용한 서버와 클라이언트
단항 gRPC 서비스 구현은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
단항 RPC란 무엇입니까?
단항 RPC는 가장 간단한 gRPC 패턴입니다. 클라이언트가 하나의 요청을 보내고 하나의 응답을 받으며, 네트워크를 통한 일반 함수 호출과 비슷합니다.
서버 구현
생성된 인터페이스를 구현합니다. 향후 호환성을 위해 Unimplemented*Server 구조체를 임베드합니다:
type userServer struct {
pb.UnimplementedUserServiceServer
db *sql.DB
}
func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
// query DB
return &pb.User{Id: req.Id, Name: "Alice"}, nil
}서버 시작
gRPC 서버를 생성하고 구현을 등록한 다음 TCP 포트에서 수신 대기합니다:
lis, _ := net.Listen("tcp", ":50051")
grpcSrv := grpc.NewServer()
pb.RegisterUserServiceServer(grpcSrv, &userServer{})
log.Fatal(grpcSrv.Serve(lis))클라이언트 연결
서버에 연결하고 클라이언트 스텁을 생성합니다:
conn, err := grpc.NewClient("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { log.Fatal(err) }
defer conn.Close()
client := pb.NewUserServiceClient(conn)단항 호출 수행
로컬 함수인 것처럼 클라이언트 스텁에서 RPC 메서드를 호출합니다:
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 42})
if err != nil { log.Fatalf("error: %v", err) }
fmt.Println(user.Name)오류 처리
gRPC는 상태 코드를 사용합니다. status.Errorf로 오류를 반환하고 status.Code(err)로 확인합니다:
import "google.golang.org/grpc/status"
import "google.golang.org/grpc/codes"
// Server:
return nil, status.Errorf(codes.NotFound, "user %d not found", req.Id)
// Client:
if status.Code(err) == codes.NotFound { /* handle */ }컨텍스트 전파
클라이언트 RPC 호출에 전달한 컨텍스트는 기한과 취소 정보를 서버로 전달합니다. 서버는 이를 하위 호출(DB, 다른 RPC)에 전달해야 합니다.
프로덕션 환경의 TLS
프로덕션 환경에서는 안전하지 않은 자격 증명을 TLS로 교체합니다:
creds, _ := credentials.NewServerTLSFromFile("cert.pem", "key.pem")
grpcSrv := grpc.NewServer(grpc.Creds(creds))UnimplementedServer
pb.UnimplementedXxxServer를 임베드하면 Unimplemented 상태를 반환하는 모든 RPC 메서드의 스텁 구현이 제공됩니다. 따라서 구현하기 전에 proto에 새 RPC를 추가해도 서버가 컴파일됩니다.
grpc.Dial과 grpc.NewClient
grpc.Dial은 최신 버전에서 더 이상 사용되지 않습니다. 즉시 연결을 설정하지 않고 첫 RPC 호출 때 지연해서 연결하는 grpc.NewClient를 사용합니다.
리플렉션 서비스
gRPC 리플렉션 서비스를 등록하면 grpcurl 같은 도구가 .proto 파일 없이 사용 가능한 서비스를 검사할 수 있습니다:
reflection.Register(grpcSrv)빠른 확인
gRPC 서버 구조체에 pb.UnimplementedXxxServer를 임베드하는 목적은 무엇입니까?
복습: 단항 gRPC
핵심 내용:
- 생성된 인터페이스를 구현하고 UnimplementedServer를 임베드합니다
- grpc.NewServer() + Register + TCP 수신기에서 Serve
- 클라이언트: grpc.NewClient + 생성된 NewXxxClient
- gRPC 오류 처리는 status.Errorf/status.Code를 사용합니다
자주 묻는 질문
“단항 gRPC 서비스 구현” 강의는 무료인가요?
네 — “단항 gRPC 서비스 구현” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“단항 gRPC 서비스 구현”에서 뭘 배우나요?
grpc-go를 사용한 서버와 클라이언트 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“단항 gRPC 서비스 구현” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.