2022๋…„ 11์›” 12์ผยท6๋ถ„ ์ฝ๊ธฐ

gRPC ๋Œ€ REST ์ฃผ์š” ์ฐจ์ด์ 

๊ฐœ๋ฐœ์ž๋Š” API ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ REST ๋˜๋Š” gRPC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€์™€ ์ฃผ์š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๊ณ„์† ์ฝ์œผ์‹ญ์‹œ์˜ค.

gRPC ๋Œ€ REST ์ฃผ์š” ์ฐจ์ด์ 

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

์š”์ฆ˜ g RPC ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์œผ๋ฉฐ ์ „ํ†ต์ ์œผ๋กœ REST API ์™€ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ์–ด๋””์—์„œ ๋‹ค๋ฅธ๊ฐ€? ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒƒ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” g RPC ์™€ REST ๊ฐ€ ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋” ์ž˜ ์ˆ˜ํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃจ๊ธฐ ์ „์— API๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ํ…Œ์ด๋ธ”์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

API๋ž€?

์†Œํ”„ํŠธ์›จ์–ด ์•ฑ์€ ๊ธฐ์ˆ  ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•˜๋Š” API์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ  ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด๋‚ด๊ณ  ์‹œ์Šคํ…œ์—์„œ ์‘๋‹ต์„ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜จ๋ผ์ธ์œผ๋กœ ์ „ํ™”๋ฅผ ์ฃผ๋ฌธํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ์›น์— ์—ฐ๊ฒฐ๋œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ๋ถ„์„ํ•˜๊ณ  ํ•„์š”ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•œ ํ›„ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์„ธ๋ถ€ ์ •๋ณด๋กœ ํšŒ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ API๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

API๋Š” ์ด๋Ÿฌํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•, ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ํ‘œ์ค€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ์˜ ์ข…๋ฅ˜๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. g RPC ์™€ REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ๋ชจ๋‘ API ์„ค๊ณ„์— ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

API ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค

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

๋ชจ๋†€๋ฆฌ์‹ ์Šคํƒ€์ผ์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๊ธฐ์กด ๊ธฐ๋ฐ˜ ์œ„์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝ, ์—…๋ฐ์ดํŠธ ๋ฐ ํ™•์žฅํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•œ ์ธก๋ฉด์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ ๋‹ค๋ฅธ ์„น์…˜์— ํ•ด๋กœ์šด ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋†€๋ฆฌ์Šค์˜ ์ฝ”๋“œ๋Š” ์Šค์ผ€์ผ๋ง, ์—…๋ฐ์ดํŠธ ๋ฐ ๋ณ€๊ฒฝ์„ ๊ฑฐ๋“ญํ•œ ํ›„์— ์ ์ฐจ์ ์œผ๋กœ ๋„ˆ๋ฌด ์–ฝํžˆ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ ์™„์ „ํ•œ ์‹œ์Šคํ…œ ์žฌ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋Š” ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๊ตฌ์„ฑ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ณ„๋„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ ์•ฑ์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ๊ณ ์œ ํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. API๋กœ ์—ฐ๊ฒฐ๋œ ์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ชจ์Œ์€ ํ•จ๊ป˜ ๋ชจ์—ฌ ๋” ํฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. API๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉ๋œ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๋ฐ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. API ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ธ๊ธฐ ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ GraphQL, RPC ๋ฐ REST ์ž…๋‹ˆ๋‹ค.

RPC ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

RPC (์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ)๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋™์ผํ•œ ํ˜•์‹์œผ๋กœ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์›น ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ฒ„์˜ ์Šคํƒ€์ผ์€ ๋กœ์ปฌ ์„œ๋ฒ„์ธ์ง€ ์›๊ฒฉ ์„œ๋ฒ„์ธ์ง€์— ๊ด€๊ณ„์—†์ด RPC ๋””์ž์ธ์—์„œ ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ itrelease.com/Author Junaid Rehman

RPC API ์š”์ฒญ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ REST API์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. RPC API ์š”์ฒญ์€ ์ƒํ˜ธ ์ž‘์šฉ ์ง€์นจ๊ณผ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. URL์˜ ์š”์ฒญ ๋ฌธ์ž์—ด์—๋Š” ์ž‘์—…์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

API ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด RPC ์‹œ์Šคํ…œ์€ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. RPC ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ ํ•ด์„ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๋‚ด์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์€ ์ˆจ๊ฒจ์ ธ ์žˆ๋Š” ๋™์•ˆ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. RPC ๋ชจ๋ธ์€ ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. RPC ๋Š” ๋ถ„์‚ฐ ๋ฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชจ๋‘์—์„œ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์ง€์›ํ•˜๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

REST ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

REST - Representational State Transfer - ์‚ฌ์šฉ์ž๊ฐ€ JSON ๋˜๋Š” XML ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฐฑ์—”๋“œ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. API๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ RESTful๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

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

ํ•˜์ดํผ๋ฏธ๋””์–ด ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ œํ•œ ์‚ฌํ•ญ์— ์˜์กดํ•˜๋Š” ํ˜„๋Œ€ ๊ฑด์ถ• ์„ค๊ณ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. RESTful ์›น API๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด URL๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. REST API๋Š” ์ƒํƒœ ๋น„์ €์žฅ, ํ™•์žฅ ๊ฐ€๋Šฅ ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ˜„๋Œ€ ์›น ๋””์ž์ธ์— ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ฑ„ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” REST API๊ฐ€ ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ณ ๊ฐ์—๊ฒŒ ์ž์‚ฐ์œผ๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋Š” HTTP GET, POST, PUT ๋ฐ DELETE ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

REST ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

REST ๋Š” API ์š”์ฒญ์— ์ง€์ •๋œ ์„œ๋น„์Šค๋กœ ์ž‘์—…ํ•  ๋•Œ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ณธ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์›์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์—์„œ ๊ฐ์ฒด์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. RESTful ๋ฆฌ์†Œ์Šค์—๋Š” ๊ฐ์ฒด์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ์ž‘์—…๊ณผ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ REST ๊ตฌํ˜„์€ ์ผ๋ฐ˜์ ์œผ๋กœ RESTful ์ž‘์—…์— ๋Œ€ํ•ด ๋œ ์ƒ๊ฐํ•˜๊ณ  ๋Œ€์‹  ๋ฆฌ์†Œ์Šค์˜ ์†์„ฑ์— ๋” ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. RESTful ์†”๋ฃจ์…˜์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ RESTful ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

RESTful API์—์„œ ์‚ฌ์šฉ์ž๋Š” URL(Uniform Resource Locator)์— ์ฟผ๋ฆฌ๋ฅผ ์ œ์ถœํ•˜์—ฌ JSON, XML ๋˜๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ํŽ˜์ด๋กœ๋“œ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด๋กœ๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค์—์„œ ์ฒ˜๋ฆฌํ•  ํ•ญ๋ชฉ์„ ์ง€์ •ํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ
  • ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ๋กœ
  • ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ—ค๋”
  • ํด๋ผ์ด์–ธํŠธ๋ณ„ ๋ฉ”์‹œ์ง€ ํŽ˜์ด๋กœ๋“œ

ํ—ค๋”์˜ Accept ํ•„๋“œ์—์„œ ์‚ฌ์šฉ์ž๋Š” ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ๋ณธ๋ฌธ์— ์‚ฌ์šฉ๋œ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ํ˜•์‹์„ ์‹๋ณ„ํ•˜๋Š” ์ฝ˜ํ…์ธ  ์œ ํ˜• ํ—ค๋”๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ์™€ ํ•จ๊ป˜ API ์„œ๋ฒ„์— ์˜ํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. API ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์‘๋‹ต ์ฝ”๋“œ๋„ ์‘๋‹ต ๋ณธ๋ฌธ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

g RPC ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

API ์„ ํƒ ๊ฒ€์ฆ
์šด์˜์—์„œ REST๋‚˜ gRPC๋ฅผ ํ™•์ •ํ•˜๊ธฐ ์ „์— API ์•„์ด๋””์–ด๋ฅผ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.
๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ž…

g RPC (Google ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ)๋Š” RPC ์„ค๊ณ„์˜ ํ•˜์œ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. g RPC ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ์œ ์—ฐ์„ฑ๊ณผ ์†๋„๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๊ธ€๋กœ๋ฒŒ ์˜คํ”ˆ ์†Œ์Šค RPC ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ๋‹ค์–‘ํ•œ ์ฝ”๋”ฉ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๊ณ ๊ฐ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด g RPC ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ์ˆ ์€ HTTP 2.0 ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ RPC API ์š”์ฒญ์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ ์„œ๋ฒ„๋‚˜ API ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋ชจ๋‘ HTTP๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ RPC ์›์น™์ด HTTP๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žก์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

Google ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„๋ฅผ ๋†’์ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ๋ฐ˜ํ™˜ ๋ฐ ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ฐฉ๋ฒ•๋ก ์„ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ „๋žต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ IDL (์ธํ„ฐํŽ˜์ด์Šค ์„ค๋ช… ์–ธ์–ด)์„ ์‚ฌ์šฉํ•˜์—ฌ RPC API ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ง€์ •ํ•˜๋ฏ€๋กœ ์›๊ฒฉ ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IDL ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค์™€ ํŽ˜์ด๋กœ๋“œ ๋ฉ”์‹œ์ง€ ํ˜•์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

g RPC ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

HTTP/2 ํ”„๋กœํ† ์ฝœ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋˜๋Š” protobufs ๋Š” g RPC API์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. protobuf๋ผ๋Š” ์ง๋ ฌํ™” ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. proto ํŒŒ์ผ์—์„œ API ๋””์ž์ด๋„ˆ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ์ „์†ก๋˜๋Š” ์ž‘์—…๊ณผ ๋ฉ”์‹œ์ง€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

protoc ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ์›๊ฒฉ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ๋ฐ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. XML ๋˜๋Š” JSON ํ˜•์‹๊ณผ ๋น„๊ตํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋กœ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋Š” ์ƒ๋‹นํžˆ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— CPU ์ด ์ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ HTTP/2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” g RPC API๋Š” RPC ์„ค๊ณ„๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์€ ํŒจํ‚ท์„ ๋” ์ž‘์€ ์ด์ง„ ํ”„๋ ˆ์ž„ ๋ฉ”์‹œ์ง€๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ „์†ก ๊ฐ€๋Šฅํ•˜๊ณ  ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์ง„ ํ˜•์‹ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฑ„๋„ ๋‚ด์—์„œ ๋งŽ์€ ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์ค‘ ๋™์‹œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ HTTP/2์˜ ์ง€์›์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

HTTP/2 ์ „์†ก ํ”„๋กœํ† ์ฝœ์€ ์—ฌ๋Ÿฌ ๋™์‹œ ์ŠคํŠธ๋ฆผ์„ ์ง€์›ํ•˜์ง€๋งŒ g RPC API๋Š” ์ฑ„๋„์„ ํ†ตํ•ด ์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฑ„๋„์€ ๋งŽ์€ ๋™์‹œ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ„๋„์€ ์ฃผ์–ด์ง„ ์ฃผ์†Œ์™€ ํฌํŠธ์—์„œ API ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์Šคํ…์€ ์ฑ„๋„์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

g RPC ๋Œ€ REST: ๋น„๊ต

์„œ๋น„์Šค์— ๋กœ์ง ์ถ”๊ฐ€
๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ ํ”„๋กœ์„ธ์Šค๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ API ์—”๋“œํฌ์ธํŠธ๋กœ ์ „ํ™˜ํ•˜์„ธ์š”.
์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ

Google์€ ๊ธฐ์กด API ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์˜ ์ผ๋ถ€ ์ œํ•œ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด RPC ๋ณ€ํ˜•์œผ๋กœ g RPC ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. REST API์™€ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ g RPC API๋Š” ์ตœ์‹  ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฌธ์ œ์— ์ง๋ฉดํ•ฉ๋‹ˆ๋‹ค. REST API๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ์•Œ๊ณ  ๋‚˜๋ฉด ์ด๋Ÿฌํ•œ API ์ค‘ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ๋” ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP 1.1 ๋Œ€ HTTP 2

REST API์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์š”์ฒญ-ํšŒ์‹  ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฃผ๋กœ HTTP 1.1์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋งŽ์€ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ ๋ชจ๋ธ์ด ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋‹ค์šด๋ฉ๋‹ˆ๋‹ค. REST API๋Š” HTTP 2์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ†ต์‹  ์•„ํ‚คํ…์ฒ˜๋Š” ์—ฌ์ „ํžˆ ์š”์ฒญ-์‘๋‹ต์ด๋ฏ€๋กœ ์–‘๋ฐฉํ–ฅ ํ˜ธํ™˜์„ฑ ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ์„ ํฌํ•จํ•˜์—ฌ HTTP 2์˜ ์ด์ ์„ ์™„์ „ํžˆ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

g RPC API์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต ์—ฐ๊ฒฐ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๊ณ  HTTP 2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. g RPC ๋Š” ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๋งŽ์€ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ์ŠคํŠธ๋ฆฌ๋ฐ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ŠคํŠธ๋ฆฌ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ๊ณผ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ g RPC ๋Š” HTTP 1.1์—์„œ ์ƒ์„ฑ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹จํ•ญ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

g RPC API๋Š” ๋‹ค์Œ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹จํ•ญ ์ƒํ˜ธ์ž‘์šฉ

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹จ์ผ ์š”์ฒญ์„ ํ–ˆ์ง€๋งŒ ๊ทธ ๋Œ€๊ฐ€๋กœ ํ•˜๋‚˜์˜ ์‘๋‹ต๋งŒ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ.

  • ์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ

    ์„œ๋ฒ„๊ฐ€ ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆผ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ฟผ๋ฆฌ์— ์‘๋‹ตํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋˜ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ ํ›„ ์ ˆ์ฐจ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ

    ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ๋ จ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ๋‹จ์ผ ๋ฉ”์‹œ์ง€๋กœ ์‘๋‹ตํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ

    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ฑ„๋„์ด ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์ง€์›

๋Œ€๋ถ€๋ถ„์˜ ์›น API ์ƒํ˜ธ ์ž‘์šฉ์€ ์˜จ๋ผ์ธ์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ์ง€์›์€ g RPC ๋Œ€ REST ๋…ผ์Ÿ์—์„œ ํ•ต์‹ฌ ๊ณ ๋ ค ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ง€์›์€ g RPC ์— ๋น„ํ•ด REST API์˜ ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” ์™„์ „ํ•œ REST API ๊ธฐ๋Šฅ๊ณผ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ g RPC ์˜ ๊ธฐ๋Šฅ์€ ์—ฌ์ „ํžˆ ์ƒ๋Œ€์ ์œผ๋กœ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ HTTP 1.1๊ณผ HTTP 2 ๊ฐ„์˜ ์ „ํ™˜์—๋Š” gRPC-web๊ณผ ํ”„๋ก์‹œ ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ g RPC API๋Š” ํŠน์ • ์กฐ์ง์˜ ๋ฐฑ์—”๋“œ ์ •๋ณด ๋ฐ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ๋˜๋Š” API ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์ด ๋‚ด๋ถ€ ๋˜๋Š” ๊ฐœ์ธ ์‹œ์Šคํ…œ์— ์ฃผ๋กœ ํ™œ์šฉ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ํ™”๋œ ์ŠคํŠธ๋ฆผ์€ HTTP/2 ํ”„๋กœํ† ์ฝœ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜๋งŽ์€ ๊ณ ๊ฐ์ด ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ƒˆ TCP ์„ธ์…˜์„ ์—ด ํ•„์š” ์—†์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ‘๋ ฌ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„๋Š” ๊ธฐ์กด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‘œํ˜„ ์ƒํƒœ ์ „์†ก ๋ชจ๋ธ์€ HTTP 1.1์„ ํ†ตํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด‘๋ฒ”์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. REST ๊ฐ€ ํ™œ์„ฑํ™”๋œ HTTP 1.1์€ ๊ฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด TCP ํ•ธ๋“œ์…ฐ์ดํ‚น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. REST API๋Š” ํ•ธ๋“œ์…ฐ์ดํฌ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ง€์—ฐ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด๋กœ๋“œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

g RPC ๋Œ€ REST ๋ฅผ ๋ณด๋ฉด์„œ ํŽ˜์ด๋กœ๋“œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค๋ฉด g RPC API๋Š” ์˜๋„์ ์œผ๋กœ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด๋กœ๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ณ ๋„๋กœ ์••์ถ•๋œ ๊ตฌ์กฐ๋ฅผ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ๋” ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ์ •๋ณด๋ฅผ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. Protobuf๋Š” ๋งŽ์ด ์ž‘์„ฑ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž๋™ ๋ฒˆ์—ญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ REST ๋Š” ๋Œ€๋ถ€๋ถ„ JSON ๋˜๋Š” XML ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๋ฐ›์Šต๋‹ˆ๋‹ค. JSON ์€ ์ •ํ™•ํ•œ ๊ตฌ์กฐ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์ง€๋งŒ ์ •ํ™•ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ณ ์ˆ˜ํ•˜์ง€ ์•Š๊ณ  ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ์‘์„ฑ๊ณผ ์šฉ๋Ÿ‰ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค. Protobuf๊ฐ€ ์•„์ง ๋”ฐ๋ผํ•  ์ˆ˜ ์—†๋Š” JSON์˜ ๊ฐ€๋…์„ฑ ํ’ˆ์งˆ์€ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ด์ ์ž…๋‹ˆ๋‹ค.

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

์ฝ”๋“œ ์ƒ์„ฑ

์—”์ง€๋‹ˆ์–ด๋Š” API ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ์„ ์œ„ํ•ด Postman๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ g RPC ์™€ ๋‹ฌ๋ฆฌ REST API์—๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด์™€๋Š” ๋Œ€์กฐ์ ์œผ๋กœ g RPC ๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” protoc ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ธํ•ด ๊ธฐ๋ณธ ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ƒ์„ฑ์€ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ ๋ฐ ์–ธ์–ด์—์„œ ์ƒ์„ฑ๋œ ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ํŠนํžˆ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ๋‚ด์žฅ๋œ ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ(SDK)๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด REST API๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ํƒ€์‚ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๊ฑฐ๋กญ์ง€๋Š” ์•Š์ง€๋งŒ g RPC ๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

REST API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

g RPC ์™€ REST ๋ฅผ ๋น„๊ตํ•  ๋•Œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์— ๊ตฌ์ถ•๋œ ์ธํ”„๋ผ๋ฅผ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์„ ํ˜ธ๋˜๋Š” API๋Š” REST API์ž…๋‹ˆ๋‹ค. REST API๋Š” ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ž์‚ฐ์„ ์ „ ์„ธ๊ณ„์— ๊ณต๊ฐœํ•˜๋Š” ๊ฐœ๋ฐฉํ˜• ํ”Œ๋žซํผ์„ ์ƒ์„ฑํ•˜๋Š”์ง€์— ๊ด€๊ณ„์—†์ด ๋งค์šฐ ์˜ค๋žซ๋™์•ˆ ์•ฑ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ๊ณ„์† ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. REST API๋Š” ๋น ๋ฅธ ๋ฐ˜๋ณต ๋ฐ HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ์—๋„ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

REST API๋Š” ํƒ€์‚ฌ ๊ธฐ์ˆ ์ด ๋ณดํŽธ์ ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ ์•ฑ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. g RPC ์™€ ๋‹ฌ๋ฆฌ ๊ด‘๋ฒ”์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐœ์ธ ์‹œ์Šคํ…œ์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ REST API๋ฅผ ๋งŽ์€ ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ธํ„ฐ๋„ท์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ API ๋ฌธ์„œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ REST ๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ„๋‹จํ•œ ํ•™์Šต ๊ณก์„ ์€ ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์กฐ์‚ฌํ•˜๊ณ  ๋ฐฐ์šฐ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  ์ฆ‰์‹œ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RESTful API๋Š” ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋” ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋‚˜์€ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ™•์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ๋ฐ ๊ธฐ๋ฐ€์„ฑ์ด ๋ถ€์กฑํ•˜๋ฉด ํŠน์ • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋Œ€ํ‘œ ์ƒํƒœ ์ด์ „์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง€๋ถˆ ์˜ต์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ g RPC ๊ฐ€ ๋” ๋‚˜์€ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

g RPC API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์ƒ์„ฑ๋œ ์†Œ์Šค ์ง์ ‘ ์†Œ์œ 
์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐ”๋€Œ๋ฉด ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์ž์ฒด ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ›์œผ์„ธ์š”.
์ฝ”๋“œ ์ƒ์„ฑ

g RPC ๋Œ€ REST ๋‘˜ ๋‹ค์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ํƒ€์‚ฌ ๋„๊ตฌ๋Š” ์—ฌ์ „ํžˆ g RPC ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ g RPC API๋Š” ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋‚ด๋ถ€ ์‹œ์Šคํ…œ ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž๊ฒฉ์„ ์—ผ๋‘์— ๋‘๊ณ  ๋‹ค์Œ ์ƒํ™ฉ์—์„œ g RPC API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์—ฐ๊ฒฐ

g RPC API๋Š” ์งง์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ๋น ๋ฅธ ๋Œ€์—ญํญ ํ†ต์‹ ์œผ๋กœ ์ธํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์˜ ํšจ์œจ์„ฑ์ด ์ค‘์š”ํ•œ ๊ฐ€๋ฒผ์šด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค๊ตญ์–ด ์‹œ์Šคํ…œ

g RPC ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๋•๋ถ„์— ๋‹ค์ค‘ ์–ธ์–ด ์ปจํ…์ŠคํŠธ์—์„œ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ

์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” gRPC ๊ธฐ๋Šฅ ๋•๋ถ„์— ์‹œ์Šคํ…œ์€ ๋‹จํ•ญ ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ €์ „๋ ฅ ๋ฐ ์ €๋Œ€์—ญํญ ๋„คํŠธ์›Œํฌ

์ด๋Ÿฌํ•œ ๋„คํŠธ์›Œํฌ๋Š” ๊ฒฝ๋Ÿ‰ ํ†ต์‹ , ํ–ฅ์ƒ๋œ ํšจ์œจ์„ฑ ๋ฐ ์‹ ์†์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”๋œ Protobuf ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” gRPC์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, g RPC API์—์„œ ์ด์ต์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ๋Š” ์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท์ž…๋‹ˆ๋‹ค.

AppMaster ๋Š” ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋‚˜์š”?

์›น ํ”„๋ก ํŠธ์—”๋“œ์™€ API ์—ฐ๊ฒฐ
๋ฐฑ์—”๋“œ API์™€ ์—ฐ๋™๋˜๋Š” Vue3 ์›น UI๋ฅผ ๋งŒ๋“œ์„ธ์š”.
์›น ์•ฑ ๊ตฌ์ถ•

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ตœ๊ทผ ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ธํ•ด ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. No-code ์ƒ์„ฑ์€ ์ด๋ฅผ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋Œ์–ด ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ์„ ๊ฑฐ์น  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ AppMaster ์™€ ๊ฐ™์€ no-code ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๊ท€ํ•˜์˜ ์†Œ์œ ์ด๋ฉฐ ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด ๊ฐœ๋ฐœ ํŒ€์ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ €๋ ดํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” AppMaster์˜ no-code ์ƒ์„ฑ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜์—ฌ g RPC ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ฐ„์— ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” g RPC ์ง€์›์„ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‚ด๋…„์— g RPC ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ๊ณผ g RPC ๋ชจ๋ฐ”์ผ ์•ฑ ๋ชจ๋‘์— API๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

Representational state transfer๋Š” ๊ณผ๊ฑฐ์— API ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ g RPC ๋Œ€ REST ์‚ฌ์ด์—์„œ g RPC API๊ฐ€ ์„œ์„œํžˆ ๋Œ€์ค‘ํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆˆ์— ๋„๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ์ง€์› ๋ฐ API ๋ฌธ์„œ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์ˆ  ๋ฐœ์ „๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์„ฑ์žฅ์œผ๋กœ g RPC ๊ฐ€ ์˜ค๋Š˜๋‚ ์˜ ๋„์ „์„ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ REST ๋˜๋Š” g RPC ๋˜๋Š” GraphQL ๋˜๋Š” SOAP ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ API ๋ฐฉ๋ฒ•๋ก  ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์˜ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” g RPC ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ด์ ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” REST ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์ด ๋‘ ๊ฐ€์ง€ ๊ธฐ์ˆ  ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
gRPC ๋Œ€ REST ์ฃผ์š” ์ฐจ์ด์  | AppMaster