CS

gRPC

2024. 12. 17. 03:19

gRPC๋ž€?

google์—์„œ ๊ฐœ๋ฐœํ•œ RPC(Remote Procedure Call)๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ฐ„ํŽธํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋น ๋ฅด๊ณ  ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.


ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ (Protocol Buffers, Protobuf)

gRPC๋Š” Protobuf๋ผ๋Š” ์ง๋ ฌํ™” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

Protobuf๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ง„ ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๊ณ  ์—ญ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, JSON์ด๋‚˜ XML๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค.

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

RESTful API๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ JSON์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, gRPC๋Š” Protobuf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด, ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ gRPC๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ „์†ก ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


http/2

gRPC๋Š” HTTP/2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

HTTP/1.1์—์„œ๋Š” ํ•œ ์—ฐ๊ฒฐ์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋“œ ์˜ค๋ธŒ ๋ผ์ธ ๋ธ”๋กœํ‚น(Head-of-line Blocking) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜์—ˆ๋Š”๋ฐ

๋ฐ˜๋ฉด, HTTP/2๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ๋ฐฉ์‹์„ ์ง€์›ํ•˜์—ฌ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ  ๋„คํŠธ์›Œํฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP/1.1์—์„œ๋Š” ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, HTTP/2๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.


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

gRPC๋Š” ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•œ๋‹ค. (TCP๋ฐฉ์‹)

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

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

ํฌ๋กœ์Šค ํ”Œ๋žซํผ

https://grpc.io/docs/what-is-grpc/introduction/

gRPC๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์„œ๋ฒ„๋“ค ๊ฐ„์—๋„ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


gRPC vs ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Boost.Asio, kqueue ๋“ฑ)

1. gRPC์˜ ์žฅ์ 

  • ๊ณ ์† ํ†ต์‹ : Protobuf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ณ  ์—ญ์ง๋ ฌํ™”ํ•  ๋•Œ, JSON๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • HTTP/2 ์ง€์›: gRPC๋Š” HTTP/2๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ, ํ—ค๋” ์••์ถ• ๋“ฑ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ๋ฆฌํ•˜๋‹ค.
  • ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ: gRPC๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Boost.Asio, kqueue ๋“ฑ)

Boost.Asio์™€ kqueue ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ €์ˆ˜์ค€์˜ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๋„๊ตฌ๋กœ, ์ง์ ‘ ์†Œ์ผ“์„ ์—ด๊ณ  ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค

  • ์„ธ๋ฐ€ํ•œ ์ œ์–ด: ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋” ์„ธ๋ฐ€ํ•œ ์กฐ์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ์ž‘์—…: ์ฃผ๋กœ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ์‹ I/O๋‚˜ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์žก์„ฑ: ์ง์ ‘ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต์žกํ•œ ์ฝ”๋“œ์™€ ๋””๋ฒ„๊น…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ, ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ๋“ฑ์„ ์ˆ˜๋™์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ ๋‚œ์ด๋„๊ฐ€ ๋†’๋‹ค.

3. ๊ฒฐ๋ก 

gRPC : HTTP/2, ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋Œ€์šฉ๋Ÿ‰์˜ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 

network library : ์„ธ๋ฐ€ํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๋‹จ์ˆœํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋Œ€ํ™”ํ˜• ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” gRPC๊ฐ€ ๋” ์ ํ•ฉํ•˜๊ณ , ์„ธ๋ฐ€ํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด Boost.Asio์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒ

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋™๊ธฐ, ๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น (cpp)  (0) 2024.12.14
process, thread  (0) 2024.12.14
ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด  (1) 2024.12.14
TCP์™€ UDP ํ†ต์‹ ์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹  (0) 2024.12.12
docker-compose์™€ cmake  (0) 2024.11.09
  1. gRPC๋ž€?
  2. ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ (Protocol Buffers, Protobuf)
  3. http/2
  4. ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ
  5. ํฌ๋กœ์Šค ํ”Œ๋žซํผ
  6. gRPC vs ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Boost.Asio, kqueue ๋“ฑ)
  7. 1. gRPC์˜ ์žฅ์ 
  8. 2. ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Boost.Asio, kqueue ๋“ฑ)
  9. 3. ๊ฒฐ๋ก 
moaoh
moaoh
๋‚˜์˜ ์„ฑ์žฅ ์ผ๊ธฐ.
moaoh
๐Ÿถ ๐Ÿพ
moaoh
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • Github
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Algorithm
      • ๊ฐœ๋…์ •๋ฆฌ
      • ๋ฌธ์ œํ’€์ด
    • 42seoul
      • projects
    • CS
    • programming language
      • C++
      • Javascript
      • Go
      • Python
      • Front-end
      • Java
    • Java Spring
    • git
    • ์ผ์ƒ
      • ์ฑ… ์ฝ๊ธฐ

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ
moaoh
gRPC
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.