인프런 커뮤니티 질문&답변

ys님의 프로필 이미지
ys

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

JobQueue #2

Protobuf Packet 클라이언트 - 서버 설계

작성

·

38

·

수정됨

0

서버에서 Protobuf를 사용하고
클라이언트에서 예기치 못한 이유로 사용하지 못했을 때
주고 받는 Packet.id
그리고 그 id에 해당하는 정보(구조체)가 같다면
상관 없을 까요?
ex)
서버 -> S_CHAT : string msg; 구글 프로토버프로 만듬

클라이언트 -> S_CHAT : string msg: 일반 구조체로 만듬

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

기능적으로는 상관없지만
보통 한쪽에서만 사용하게끔 예외처리를 해줘야 하는 경우가 많아
바람직하진 않습니다. (패킷 조작 방지)

ys님의 프로필 이미지
ys
질문자

답변해주셔서 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ys님.

서버와 클라이언트가 같은 Packet ID와 구조를 유지하면서 서로 통신을 할 수 있는지에 대한 질문이시군요. 프로토콜 버퍼(Protobuf)가 이러한 경우에 중요한 역할을 하는데요, 프로토콜 버퍼는 데이터의 직렬화 및 역직렬화를 위한 포맷이므로, 동일한 구조체와 Packet ID를 사용하신다면 이론적으로 통신은 가능할 수 있습니다. 하지만 몇 가지 고려해야 할 점이 있습니다.

  1. 데이터 일관성: 구조체의 필드들이 같다면 문제는 없겠지만, 데이터의 직렬화 및 역직렬화 과정이 각 플랫폼에서 동일하게 처리되어야 합니다.

  2. 기능 및 성능 차이: Protobuf를 사용하면 플랫폼 독립적인 데이터 직렬화 포맷을 갖추게 되어 데이터 교환 시 안정성과 성능을 확보할 수 있습니다. 클라이언트에서 Protobuf를 사용 못할 경우, 직접 구현한 구조체로 모든 직렬화 작업을 대신해야 하기 때문에 오류가 발생할 가능성이 더 높아질 수 있습니다.

  3. 유지보수 및 호환성: Protobuf의 장점 중 하나는 새로운 필드를 추가해도 기존 범위에서는 호환성을 유지합니다. 반면, 사용자 정의 구조체를 사용하면 양쪽에서 업데이트 정보와 방식에 대하여 일관성이 있어야 합니다.

즉, 동일한 구조체와 Packet ID를 사용하신다면 이론적으로 가능하지만 Protobuf가 가진 장점인 안정성, 확장성, 성능을 잃게 될 수 있습니다.

추가로 동일한 질문에 대한 이전 강의의 관련 Q&A를 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ys님의 프로필 이미지
ys

작성한 질문수

질문하기