Protobuf 설치하기

참고자료

Protobuf 링크

  1. 링크에 들어가서 본인 운영체제에 맞는거 다운로드

  1. 원하는 위치에 압축을 품

  1. 시스템 환경 변수 Path에다가 압축 푼 경로/bin 을 추가함

  2. cmd 켜서 아래 명령어 쳐서 문제없이 나오나 확인

protoc --version

Protobuf 설치 자체는 끝!

Protobuf Go 플러그인 설치하기

  1. Go 깔려있나 확인
go version

  1. Protobuf Go 플러그인 설치
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

  1. 설치 되었나 확인
protoc-gen-go --version

  • 만약 제대로 안뜬다면?
    • 환경 변수 Path에 아래 경로가 포함되어 있는지 확인할 것
%USERPROFILE%\go\bin
  • 제대로 뜨면 끝!

Go 디렉토리 설정하기

  • 내 Git 레포지토리 상태
GameServerWithGo/          <- Root
 ├─ Server/           <- 서버용 (Go)
 ├─ Client/           <- 클라이언트용 (Unity)
 ├─ Image/            <- ReadMe에 들어가는 사진 저장용
 └─ README.md
  1. GameServerWithGo\Server로 들어가서 cmd 킴
  2. 아래 커맨드 입력
go mod init game-server
  • game-server라는 이름의 모듈을 생성한다는 의미임

  • 참고 : go 프로젝트의 구성

    • go.mod : 직접 사용하는 라이브러리와 그 버전 정보
    • go.sum : 실제 다운로드 한 라이브러리의 해시값 (수정 금지)

첫 Protobuf 구조 짜기

syntax = "proto3"; // 버전 지정
 
package protocol; // 패키지 이름
 
option go_package = "game-server/protocol"; // Go에서 패키지 찾을 수 있게 설정
 
message CS_Ping // 패킷 구조체 (이름 : CS_Ping)
{
    int64 time = 1;
}
 
// Go에서는 struct, C#에서는 Class로 생성됨
 
// [타입] [이름] = [필드 번호]
// 필드 번호 절대 바꾸지 말고 중복 안됨.
 
message SC_Ping
{
    int64 time = 1;
}
 
// 메시지 안에 메시지를 넣을 수 있음
message Vector2
{
    float x = 1;
    float y = 2;
}
 
// 이렇게
message CS_Move
{
    Vector2 direction = 1;
}

Protobuf 자료형 참고 자료
Protobuf 자료형 참고 자료 2

.Proto 파일 컴파일 하기

  • Server 폴더로 가서 아래의 명령 실행
protoc --go_out=. --go_opt=paths=source_relative protocol/game.proto
  • 설명

    • protoc : proto 파일 컴파일러 실행
    • —go_out=. : protoc 실행 위치(.) 를 기준으로 go 코드 생성 결과를 둠
    • —go_opt=paths=source_relative : proto 파일이 있는 경로 그대로에 go 코드를 생성함
    • protocol/game.proto : protocol 폴더 안에 있는 game.proto 파일을 go 코드로 컴파일 할 것
  • 그래서 현재 폴더 구조

GameServerWithGo/          <- Root
 ├─ Server/           <- 서버용 (Go)
 |    ├─ protocol/
 |    |    ├─ game.proto    <- Protobuf 파일
 |    |    ├─ game.pb.go    <- Protobuf 파일을 컴파일 해서 생긴 go 파일 (수동 수정 X)
 |    ├─ server/
 ├─ Client/           <- 클라이언트용 (Unity)
 ├─ Image/            <- ReadMe에 들어가는 사진 저장용
 └─ README.md

다음에 할 것

  • 실제 생성한 game.pb.go 파일을 토대로 간단하게 ping 보내보기
  • go 문법 간략 정리