• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 기타게임 소스자료실
    • 기타게임 소스자료실 기타 ()
    • [Go 공식문서 한국어 정리] ⓪10. Go의 바이너리 직렬화: gob 패키지

      • 오뉴노노
      • 2026.05.30 - 01:17 0

    [Go 공식문서 한국어 정리] ⓪10. Go의 바이너리 직렬화: gob 패키지

    원문 제목: Gobs of data
    작성자: Rob Pike

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 1. 서론 — 이 문서가 다루는 내용
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    네트워크나 파일을 통해 데이터 구조를 전송하거나 저장하려면 인코딩과 디코딩이 필요합니다.
    JSON, XML, Protocol Buffers 등 많은 포맷이 있지만, Go는 gob라는 자체 포맷을 제공합니다.
    이 문서는 gob가 왜 만들어졌는지, 어떤 목표를 가지고 있는지, 그리고 어떻게 작동하는지 설명합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 2. 핵심 개념
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① gob의 목표 — 쉽고 효율적인 Go 중심 인코딩
    gob는 Go 환경에서 쉽게 사용할 수 있도록 설계되었습니다.
    Go의 리플렉션(reflection)을 활용하여 별도의 인터페이스 정의 언어(IDL)나 프로토콜 컴파일러가 필요 없습니다.
    데이터 구조 자체가 인코딩/디코딩 방법을 결정하는 데 충분합니다.

    ② 바이너리 인코딩 — 효율성 극대화
    텍스트 기반 표현(XML, JSON)은 효율적인 통신망의 중심에 두기에는 느립니다.
    gob는 바이너리 인코딩을 사용하여 속도를 극대화합니다.

    ③ 자기 기술적(self-describing) 스트림
    gob 스트림은 처음부터 읽을 수 있도록 충분한 정보를 포함합니다.
    수신자가 미리 데이터 구조를 알 필요 없이도 스트림 전체를 파싱할 수 있습니다.

    ④ 프로토콜 버퍼의 교훈
    gob는 Protocol Buffers의 영향을 받았지만, 세 가지를 의도적으로 피했습니다.
    최상위 레벨에서 정수나 배열을 직접 인코딩할 수 있어야 함, required 필드 없음, 기본값(default values) 없음.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 3. 주요 내용 상세
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    gob의 정수 값은 추상적이고 크기가 없는 숫자로 전송됩니다.
    int8이든 int64이든 값이 같으면 전송되는 비트는 동일합니다.
    수신자는 자신의 변수 타입(int, int64 등)에 맞게 디코딩할 수 있습니다.
    이는 소프트웨어가 진화하면서 정수 타입을 확장하더라도 이전 데이터를 여전히 디코딩할 수 있게 합니다.

    포인터도 유연하게 처리됩니다.
    int8, *int8, **int8, ****int8 등은 모두 정수 값으로 평탄화(flatten)되어 전송됩니다.
    수신자는 이를 int, *int, ******int 등 어떤 타입에든 저장할 수 있습니다.

    구조체를 인코딩할 때는 내보낸(exported) 필드만 처리됩니다.
    type T struct{ X, Y, Z int }에서 t := T{X: 7, Y: 0, Z: 8}을 인코딩하면,
    Y가 0이므로 전송되지 않습니다. 7과 8만 전송됩니다.

    수신자는 다른 구조체 타입으로 디코딩할 수도 있습니다.
    type U struct{ X, Y *int8 }로 디코딩하면 X만 설정되고 Z는 무시됩니다.
    필드는 이름과 호환 가능한 타입으로 매칭됩니다.

    이는 "선택적 필드" 문제를 우아하게 해결합니다.
    타입 T에 필드를 추가하더라도 오래된 수신자는 인식하는 부분만 정상 작동합니다.
    따라서 gob는 추가 메커니즘 없이 확장성(extensibility)을 제공합니다.

    부동소수점 값은 IEEE 754 비트 패턴을 정수로 저장하여 전송합니다.
    작은 정수처럼 흔한 값은 하위 비트가 0이 많으므로, 바이트 반전 순서로 전송하여 압축 효율을 높입니다.

    gob는 GobEncoder와 GobDecoder 인터페이스를 통해 사용자 정의 인코딩을 지원합니다.
    이는 JSON의 Marshaler/Unmarshaler나 fmt의 Stringer와 유사합니다.

    와이어 프로토콜에서 타입은 처음 전송될 때 설명이 포함됩니다.
    내부 struct를 gob 형식으로 인코딩하여 타입 정의와 고유 번호를 부여합니다.
    이후에는 타입 번호로 참조합니다.
    예: ("define type id" 127, definition of type T)(127, T value)(127, T value)...

    이를 통해 재귀 타입(예: 트리의 Node struct)도 인코딩할 수 있습니다.

    gob 패키지는 주어진 타입의 값을 처음 인코딩할 때 작은 인터프리터 머신을 구축합니다.
    리플렉션으로 타입을 분석하여 머신을 만들지만, 한 번 만들어지면 리플렉션 없이 unsafe 패키지를 사용해 고속으로 데이터를 변환합니다.
    Go 1.4부터는 unsafe를 더 이상 사용하지 않으며 성능이 약간 저하되었습니다.

    디코딩도 유사하지만 더 복잡합니다.
    전송된 gob 타입과 수신자가 제공한 Go 타입의 조합으로 디코딩 머신을 만듭니다.

    사용 예시에서 bytes.Buffer를 네트워크 대신 사용하여 gob.NewEncoder와 gob.NewDecoder로 인코딩/디코딩을 수행합니다.
    type P와 type Q는 서로 다른 필드 구조를 가지지만, gob는 호환되는 필드만 자동으로 매핑합니다.

    rpc 패키지는 gob를 기반으로 원격 메서드 호출의 전송 계층을 구현합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 4. 실전 활용 / 예시
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Go 서버 간 통신에서 JSON보다 훨씬 효율적인 직렬화가 필요할 때 gob를 사용합니다.
    특히 내부 마이크로서비스 통신, 분산 캐시, 세션 저장소 등에서 높은 성능을 발휘합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 5. 정리
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    gob는 Go 중심의 바이너리 인코딩 포맷입니다.
    리플렉션 기반으로 사용이 간편하고, 자기 기술적이며, 타입 안전성과 확장성을 동시에 제공합니다.
    Go 서버 간 통신에 최적화되어 있으며, Protocol Buffers의 복잡함 없이 비슷한 효율을 냅니다.

    📎 출처 링크
    https://go.dev/blog/gob

    #Go #Golang #gob #serialization #공식문서

    이 게시물을..
    N
    0
    0
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구오뉴노노
    • 0
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] ⑭. Rustlings 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑬. The Unstable Book 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook 9 2026 05.30 [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros 4 2026 05.30 [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns 12 2026 05.30

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 306
    기본 (305) 제목 날짜 수정 조회 댓글 추천 비추
    기타 정렬 검색
    • 포인트 획득 공지
      4
      2026.04.24 - 19:48 4639 4
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4496 8
    • 인증메일 공지
      2
      2026.03.15 - 16:42 4390 2
    • 파일링크 및 인증메일 발송 관련 문의 안내
      8
      2026.03.14 - 22:03 4984 8
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5771
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7589 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 849
    305
    기타
    피파온라인 3 클라이언트
    lyw01234 2026.05.30 - 23:17 40
    304
    기타
    [Rust 공식문서 한국어 정리] ⑭. Rustlings
    오뉴노노 2026.05.30 - 08:38 11
    303
    기타
    [Rust 공식문서 한국어 정리] ⑬. The Unstable Book
    오뉴노노 2026.05.30 - 08:38 11
    302
    기타
    [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook
    오뉴노노 2026.05.30 - 08:37 9
    301
    기타
    [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros
    오뉴노노 2026.05.30 - 08:36 4
    300
    기타
    [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns
    오뉴노노 2026.05.30 - 08:36 12
    299
    기타
    [Rust 공식문서 한국어 정리] ⑨. Rust API Guidelines
    오뉴노노 2026.05.30 - 08:35 12
    298
    기타
    [Rust 공식문서 한국어 정리] ⑧. The Rust Performance Book
    오뉴노노 2026.05.30 - 08:34 7
    297
    기타
    [Rust 공식문서 한국어 정리] ⑦. Asynchronous Programming in Rust
    오뉴노노 2026.05.30 - 08:34 6
    296
    기타
    [Rust 공식문서 한국어 정리] ⑥. The Rust Edition Guide
    오뉴노노 2026.05.30 - 08:33 9
    295
    기타
    [Rust 공식문서 한국어 정리] ⑤. The Cargo Book
    오뉴노노 2026.05.30 - 08:32 1
    294
    기타
    [Rust 공식문서 한국어 정리] ④. The Rustonomicon
    오뉴노노 2026.05.30 - 08:32
    293
    기타
    [Rust 공식문서 한국어 정리] ③. The Rust Reference
    오뉴노노 2026.05.30 - 08:31
    292
    기타
    [Rust 공식문서 한국어 정리] ②. Rust By Example
    오뉴노노 2026.05.30 - 08:31
    291
    기타
    [Rust 공식문서 한국어 정리] ①. The Rust Programming Language (The Book)
    오뉴노노 2026.05.30 - 08:30 2
    290
    기타
    [Go 공식문서 한국어 정리] ⑤7. Codewalk: Share Memory By Communicating
    오뉴노노 2026.05.30 - 03:29 7
    289
    기타
    [Go 공식문서 한국어 정리] ⑤6. Codewalk: 마르코프 체인 텍스트 생성
    오뉴노노 2026.05.30 - 03:26 2
    288
    기타
    [Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
    오뉴노노 2026.05.30 - 03:25 1
    287
    기타
    [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    오뉴노노 2026.05.30 - 03:24 2
    286
    기타
    [Go 공식문서 한국어 정리] ⑤3. 통합 테스트 커버리지 프로파일링
    오뉴노노 2026.05.30 - 03:23 1
    • 1 2 3 4 5 6 7 8 9 10 .. 16
    • / 16 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay