• 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
    • [Rust 공식문서 한국어 정리] 150. Attribute Macros오뉴노노
    • 2
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] 184. PartialOrd 16 2026 06.08 [Rust 공식문서 한국어 정리] 183. Ord 13 2026 06.08 [Rust 공식문서 한국어 정리] 182. Eq 15 2026 06.08 [Rust 공식문서 한국어 정리] 181. PartialEq 15 2026 06.08 [Rust 공식문서 한국어 정리] 180. TryFrom 13 2026 06.08

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Rust 공식문서 한국어 정리] 150. Attribute Macros
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 490
    기본 (582) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 포인트 획득 공지
      5
      2026.04.24 - 19:48 4946 5
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4711 8
    • 인증메일 공지
      3
      2026.03.15 - 16:42 4605 3
    • 파일링크 및 인증메일 발송 관련 문의 안내
      9
      2026.03.14 - 22:03 5248 9
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5993
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7853 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 853
    582
    기타
    [Rust 공식문서 한국어 정리] 184. PartialOrd
    오뉴노노 2026.06.08 - 15:42 16
    581
    기타
    [Rust 공식문서 한국어 정리] 183. Ord
    오뉴노노 2026.06.08 - 15:42 13
    580
    기타
    [Rust 공식문서 한국어 정리] 182. Eq
    오뉴노노 2026.06.08 - 15:42 15
    579
    기타
    [Rust 공식문서 한국어 정리] 181. PartialEq
    오뉴노노 2026.06.08 - 15:42 15
    578
    기타
    [Rust 공식문서 한국어 정리] 180. TryFrom
    오뉴노노 2026.06.08 - 15:42 13
    577
    기타
    [Rust 공식문서 한국어 정리] 179. TryInto
    오뉴노노 2026.06.08 - 15:42 11
    576
    기타
    [Rust 공식문서 한국어 정리] 178. From
    오뉴노노 2026.06.08 - 15:39 14
    575
    기타
    [Rust 공식문서 한국어 정리] 177. Into
    오뉴노노 2026.06.08 - 15:39 9
    574
    기타
    [Rust 공식문서 한국어 정리] 176. AsRef
    오뉴노노 2026.06.08 - 15:39 5
    573
    기타
    [Rust 공식문서 한국어 정리] 175. Deref
    오뉴노노 2026.06.08 - 15:39 4
    572
    기타
    [Rust 공식문서 한국어 정리] 174. Default
    오뉴노노 2026.06.08 - 15:39
    571
    기타
    [Rust 공식문서 한국어 정리] 173. Clone
    오뉴노노 2026.06.08 - 15:38
    570
    기타
    [Rust 공식문서 한국어 정리] 172. Copy
    오뉴노노 2026.06.08 - 15:38
    569
    기타
    [Rust 공식문서 한국어 정리] 171. Drop
    오뉴노노 2026.06.08 - 15:38
    568
    기타
    [Rust 공식문서 한국어 정리] 170. Weak
    오뉴노노 2026.06.08 - 15:37
    567
    기타
    [Rust 공식문서 한국어 정리] 169. Arc
    오뉴노노 2026.06.08 - 15:37
    566
    기타
    [Rust 공식문서 한국어 정리] 168. Rc
    오뉴노노 2026.06.08 - 15:37
    565
    기타
    [Rust 공식문서 한국어 정리] 167. Box
    오뉴노노 2026.06.08 - 15:36
    564
    기타
    [Rust 공식문서 한국어 정리] 166. str
    오뉴노노 2026.06.08 - 15:36
    563
    기타
    [Rust 공식문서 한국어 정리] 165. String
    오뉴노노 2026.06.08 - 15:36
    562
    기타
    [Rust 공식문서 한국어 정리] 164. HashMap
    오뉴노노 2026.06.08 - 15:36 1
    561
    기타
    [Rust 공식문서 한국어 정리] 163. Vec
    오뉴노노 2026.06.08 - 15:35
    560
    기타
    [Rust 공식문서 한국어 정리] 162. Result
    오뉴노노 2026.06.08 - 15:35
    559
    기타
    [Rust 공식문서 한국어 정리] 161. Option
    오뉴노노 2026.06.08 - 15:35
    558
    기타
    [Rust 공식문서 한국어 정리] 160. Iterators
    오뉴노노 2026.06.08 - 15:35
    557
    기타
    [Rust 공식문서 한국어 정리] 159. Closures
    오뉴노노 2026.06.08 - 15:35
    556
    기타
    [Rust 공식문서 한국어 정리] 158. Trait Objects
    오뉴노노 2026.06.08 - 15:34
    555
    기타
    [Rust 공식문서 한국어 정리] 157. Lifetimes
    오뉴노노 2026.06.08 - 15:34 1
    554
    기타
    [Rust 공식문서 한국어 정리] 156. Cargo.lock
    오뉴노노 2026.06.08 - 15:34
    553
    기타
    [Rust 공식문서 한국어 정리] 155. Cargo.toml
    오뉴노노 2026.06.08 - 15:34 1
    552
    기타
    [Rust 공식문서 한국어 정리] 154. Workspaces
    오뉴노노 2026.06.08 - 15:34
    551
    기타
    [Rust 공식문서 한국어 정리] 153. Crates
    오뉴노노 2026.06.08 - 15:33
    550
    기타
    [Rust 공식문서 한국어 정리] 152. Modules
    오뉴노노 2026.06.08 - 15:33
    549
    기타
    [Rust 공식문서 한국어 정리] 151. Proc Macros
    오뉴노노 2026.06.08 - 15:32 1
    548
    기타
    [Rust 공식문서 한국어 정리] 150. Attribute Macros
    오뉴노노 2026.06.08 - 15:32
    547
    기타
    [Rust 공식문서 한국어 정리] 149. cfg
    오뉴노노 2026.06.08 - 15:32
    546
    기타
    [Rust 공식문서 한국어 정리] 148. assert
    오뉴노노 2026.06.08 - 15:31
    545
    기타
    [Rust 공식문서 한국어 정리] 147. panic
    오뉴노노 2026.06.08 - 15:27
    544
    기타
    [Rust 공식문서 한국어 정리] 146. Error
    오뉴노노 2026.06.08 - 15:24
    543
    기타
    [Rust 공식문서 한국어 정리] 145. Any
    오뉴노노 2026.06.08 - 15:22
    542
    기타
    [Rust 공식문서 한국어 정리] 144. Unpin
    오뉴노노 2026.06.08 - 15:19
    541
    기타
    [Rust 공식문서 한국어 정리] 143. Pin
    오뉴노노 2026.06.08 - 15:17 2
    540
    기타
    [Rust 공식문서 한국어 정리] 142. LazyLock
    오뉴노노 2026.06.08 - 15:14 1
    539
    기타
    [Rust 공식문서 한국어 정리] 141. OnceCell
    오뉴노노 2026.06.08 - 15:11
    538
    기타
    [Rust 공식문서 한국어 정리] 140. Atomic
    오뉴노노 2026.06.08 - 15:06
    537
    기타
    [Rust 공식문서 한국어 정리] 139. RwLock
    오뉴노노 2026.06.08 - 14:34 3
    536
    기타
    [Rust 공식문서 한국어 정리] 152. Modules
    오뉴노노 2026.06.08 - 14:00
    535
    기타
    [Rust 공식문서 한국어 정리] 151. Proc Macros
    오뉴노노 2026.06.08 - 14:00
    534
    기타
    [Rust 공식문서 한국어 정리] 150. Attribute Macros
    오뉴노노 2026.06.08 - 14:00 3
    533
    기타
    [Rust 공식문서 한국어 정리] 149. cfg
    오뉴노노 2026.06.08 - 14:00 3
    • 1 2 3 4 5 6 7 8 9 10 .. 12
    • / 12 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay