๐ŸฅŠJSON vs Protobuf ํฌ๊ธฐ ๋น„๊ต๊ธฐ

ํ•„๋“œ๋ณ„ ์™€์ด์–ด ๊ทœ์น™์œผ๋กœ ๋‘ ํ˜•์‹ ๋ฐ”์ดํŠธ ๊ณ„์‚ฐ

๋ฒˆํ˜ธํƒ€์ž…์™€์ด์–ดํƒœ๊ทธ๊ฐ’ProtobufJSON
varint ๊ฐ’์ฐจ์ง€ํ•˜๋Š” ๋ฐ”์ดํŠธ

Protobuf ๋ฐ”์ดํŠธ๋Š” ํ•„๋“œ 1๊ฑด = ํƒœ๊ทธ(ํ•„๋“œ๋ฒˆํ˜ธ << 3 | ์™€์ด์–ด ํƒ€์ž…์„ varint ๋กœ) + ๊ฐ’ ๊ทœ์น™์œผ๋กœ ์…‰๋‹ˆ๋‹ค. varint ๋Š” 7๋น„ํŠธ๋งˆ๋‹ค 1๋ฐ”์ดํŠธ๊ฐ€ ๋Š˜๊ณ , stringยทbytes ๋Š” ํƒœ๊ทธ + ๊ธธ์ด(varint) + ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์Œ์ˆ˜ int32ยทint64 ๋Š” 64๋น„ํŠธ๋กœ ๋ถ€ํ˜ธ ํ™•์žฅ๋˜์–ด 10๋ฐ”์ดํŠธ๊ฐ€ ๋˜๋ฏ€๋กœ ์Œ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด sint ๊ณ„์—ด์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JSON ์€ ๊ณต๋ฐฑ ์—†๋Š” ์ตœ์†Œ ํ˜•ํƒœ์˜ ์‹ค์ œ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ UTF-8 ๋กœ ์…‰๋‹ˆ๋‹ค.

๊ด€๋ จ๋œ ๋„๊ตฌ

JSON vs Protobuf ํฌ๊ธฐ ๋น„๊ต๊ธฐ ์‚ฌ์šฉ๋ฒ•

ํ•„๋“œ ๋ฒˆํ˜ธ์™€ ํƒ€์ž…, JSON ํ‚ค, ๊ฐ’์„ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ ์œผ๋ฉด ๋‘ ํ˜•์‹์˜ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ํ•„๋“œ๋ณ„๋กœ ์„ธ์–ด ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์‰ผํ‘œ๋‚˜ ํƒญ์œผ๋กœ ์นธ์„ ๋‚˜๋ˆ„๋ฉฐ, ๊ฐ’์— ์‰ผํ‘œ๊ฐ€ ์žˆ์–ด๋„ ๋„ค ๋ฒˆ์งธ ์นธ๋ถ€ํ„ฐ๋Š” ๊ฐ’์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.

๊ณ„์‚ฐ ๋ฐฉ์‹๊ณผ ๊ทผ๊ฑฐ

Protobuf ๋Š” ํ•„๋“œ 1๊ฑด์„ ํƒœ๊ทธ(ํ•„๋“œ๋ฒˆํ˜ธ ร— 8 + ์™€์ด์–ด ํƒ€์ž…์„ varint ๋กœ) + ๊ฐ’์œผ๋กœ ์…‰๋‹ˆ๋‹ค. varint ๋Š” 0~127 ์ด 1๋ฐ”์ดํŠธ, 128~16,383 ์ด 2๋ฐ”์ดํŠธ, 16,384~2,097,151 ์ด 3๋ฐ”์ดํŠธ์ด๊ณ  ์ดํ›„ 7๋น„ํŠธ๋งˆ๋‹ค 1๋ฐ”์ดํŠธ์”ฉ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. fixed32 ๊ณ„์—ด์€ 4๋ฐ”์ดํŠธ, fixed64 ๊ณ„์—ด์€ 8๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. JSON ์€ ๊ณต๋ฐฑ ์—†๋Š” ์ตœ์†Œ ํ˜•ํƒœ ๋ฌธ์ž์—ด์˜ UTF-8 ๊ธธ์ด๋ฅผ ๊ทธ๋Œ€๋กœ ์…‰๋‹ˆ๋‹ค. 2026๋…„ 10์›” ๊ธฐ์ค€ Protocol Buffers ์ธ์ฝ”๋”ฉ ๊ทœ๊ฒฉ์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.

ํ•œ๊ณ„์™€ ์ฃผ์˜์‚ฌํ•ญ

์ค‘์ฒฉ ๋ฉ”์‹œ์ง€, ๋ฐ˜๋ณต ํ•„๋“œ, map ์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ  ํ‰ํ‰ํ•œ ํ•„๋“œ๋งŒ ์…‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’๊ณผ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•˜๋Š” proto3 ๋™์ž‘๋„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์†ก ์••์ถ•์„ ์ ์šฉํ•˜๋ฉด JSON ์ชฝ์ด ํฌ๊ฒŒ ์ค„์–ด ์ฐจ์ด๊ฐ€ ์ขํ˜€์ง‘๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Protobuf ๊ฐ€ ์ž‘์€ ์ด์œ ๋Š” ๋ญ˜๊นŒ?

ํ•„๋“œ ์ด๋ฆ„์„ ๋ณด๋‚ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. JSON ์€ ํ‚ค์™€ ๋”ฐ์˜ดํ‘œ, ์ฝœ๋ก , ์‰ผํ‘œ๋ฅผ ๋งค๋ฒˆ ํ•จ๊ป˜ ์‹ค์–ด ๋ณด๋‚ด์ง€๋งŒ Protobuf ๋Š” ํ•„๋“œ ๋ฒˆํ˜ธ๋งŒ 1~2๋ฐ”์ดํŠธ๋กœ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ›๋Š” ์ชฝ์— ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์Šคํ‚ค๋งˆ ์—†์ด ๋ฐ”์ดํŠธ๋งŒ ๋ณด๋ฉด ํ•ด์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ‰๊ท  ๋ช‡ % ์ค„์–ด๋“ค๊นŒ?

ํ‰๊ท ๊ฐ’์„ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์งง์€ ์ •์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ํฌ๊ฒŒ ์ค„๊ณ , ๊ธด ๋ฌธ์ž์—ด๋งŒ ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ์˜ ๊ฐ™์•„์ง‘๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๋‘ ํ˜•์‹ ๋ชจ๋‘ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์‹ค์–ด ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋„๊ตฌ๋Š” ์–ด๋ฆผ ์ ˆ๊ฐ๋ฅ ์„ ๋‚ด์ง€ ์•Š๊ณ  ํ•„๋“œ๋ณ„๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์Œ์ˆ˜๋ฅผ ๋‹ด์œผ๋ ค๋ฉด ์–ด๋–ค ํƒ€์ž…์ด ์ข‹์„๊นŒ?

sint32 ๋‚˜ sint64 ์ž…๋‹ˆ๋‹ค. int32ยทint64 ์— ์Œ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด 64๋น„ํŠธ๋กœ ๋ถ€ํ˜ธ๊ฐ€ ํ™•์žฅ๋˜์–ด ๊ฐ’ ํ•˜๋‚˜๊ฐ€ 10๋ฐ”์ดํŠธ๋ฅผ ๋จน์Šต๋‹ˆ๋‹ค. sint ๊ณ„์—ด์€ ์ง€๊ทธ์žฌ๊ทธ ๋ถ€ํ˜ธํ™”๋กœ ์ž‘์€ ์Œ์ˆ˜๋ฅผ ์ž‘์€ ๋ฐ”์ดํŠธ์— ๋‹ด์Šต๋‹ˆ๋‹ค.