gRPC ๋ž€?(Introduction to Remote Procedure Calls)

2023. 2. 26. 22:14ยทIT/gRPC

์ด ํŽ˜์ด์ง€์—์„œ๋Š” gRPC ๋ฐ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. gRPC๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ IDL(์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ์–ธ์–ด) ๋ฐ ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gRPC ๋ฐ/๋˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋‚ด์šฉ์„ ์ฝ์–ด๋ณด์„ธ์š”. ๋จผ์ € gRPC๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋ ค๋ฉด ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ  ๋น ๋ฅธ ์‹œ์ž‘์„ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

Overview

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

gRPC ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” Google ๋‚ด๋ถ€ ์„œ๋ฒ„์—์„œ ๋ฐ์Šคํฌํ†ฑ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์„œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ gRPC์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์–ธ์–ด๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Go, Python ๋˜๋Š” Ruby์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java์—์„œ gRPC ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ตœ์‹  Google API์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ gRPC ๋ฒ„์ „์ด ์žˆ์œผ๋ฏ€๋กœ Google ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‰ฝ๊ฒŒ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Working with Protocol Buffers

๊ธฐ๋ณธ์ ์œผ๋กœ gRPC๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•œ Google์˜ ์„ฑ์ˆ™ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(JSON๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ˜•์‹๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ). ๋‹ค์Œ์€ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์†Œ๊ฐœ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ์— ์ด๋ฏธ ์ต์ˆ™ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ์„น์…˜์œผ๋กœ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์ •ํ•œ ํ›„์—๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ์ปดํŒŒ์ผ๋Ÿฌ protoc์„ ์‚ฌ์šฉํ•˜์—ฌ proto ์ •์˜์—์„œ ๊ธฐ๋ณธ ์„ค์ • ์–ธ์–ด๋กœ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ name() ๋ฐ set_name()๊ณผ ๊ฐ™์€ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ์ž์™€ ์›์‹œ ๋ฐ”์ดํŠธ์—์„œ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ์ง๋ ฌํ™”/๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ ํƒํ•œ ์–ธ์–ด๊ฐ€ C ++ ์ธ ๊ฒฝ์šฐ ์œ„์˜ ์˜ˆ์ œ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Person์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Person ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฉ”์‹œ์ง€๋ฅผ ์ฑ„์šฐ๊ณ , ์ง๋ ฌํ™”ํ•˜๊ณ , ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ํ”„๋กœํ†  ํŒŒ์ผ์—์„œ gRPC ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  RPC ๋ฉ”์„œ๋“œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ๋ฐ˜ํ™˜ ํ˜•์‹์„ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฉ”์‹œ์ง€๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

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

Protocol buffer versions

ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋Š” ํ•œ๋™์•ˆ ์˜คํ”ˆ ์†Œ์Šค ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ์ด ์‚ฌ์ดํŠธ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์˜ˆ์ œ๋Š” ์•ฝ๊ฐ„ ๋‹จ์ˆœํ™” ๋œ ๊ตฌ๋ฌธ, ์œ ์šฉํ•œ ์ƒˆ ๊ธฐ๋Šฅ ๋ฐ ๋” ๋งŽ์€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฒ„์ „ 3 (proto3)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Proto3๋Š” ํ˜„์žฌ ์ž๋ฐ”, C ++, ๋‹คํŠธ, ํŒŒ์ด์ฌ, ์˜ค๋ธŒ์ ํ‹ฐ๋ธŒ -C, C #, ๋ผ์ดํŠธ ๋Ÿฐํƒ€์ž„ (์•ˆ๋“œ๋กœ์ด๋“œ ์ž๋ฐ”), ๋ฃจ๋น„ ๋ฐ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ GitHub ์ €์žฅ์†Œ์˜ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ golang / protobuf ๊ณต์‹ ํŒจํ‚ค์ง€์˜ Go ์–ธ์–ด ์ƒ์„ฑ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋” ๋งŽ์€ ์–ธ์–ด๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ proto3 ์–ธ์–ด ๊ฐ€์ด๋“œ์™€ ๊ฐ ์–ธ์–ด์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ ์„ค๋ช…์„œ์—๋Š” .proto ํŒŒ์ผ ํ˜•์‹์— ๋Œ€ํ•œ ๊ณต์‹ ์‚ฌ์–‘๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ proto2(ํ˜„์žฌ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฒ„์ „)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ gRPC์™€ ํ•จ๊ป˜ proto3์„ ์‚ฌ์šฉํ•˜๋ฉด gRPC ์ง€์› ์–ธ์–ด์˜ ์ „์ฒด ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ proto2 ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” proto3 ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ proto<>์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

What is gRPC?

gRPC๋Š” ์–ด๋””์„œ๋‚˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์‹  ์˜คํ”ˆ ์†Œ์Šค RPC(์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ) ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํˆฌ๋ช…ํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฐ๊ฒฐ๋œ ์‹œ์Šคํ…œ์„ ๋” ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๊ธด ๋™๊ธฐ ๋ถ€์—ฌ ๋ฐ ๋””์ž์ธ ์›์น™ ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ๊ณ  gRPC๋ฅผ ๋งŒ๋“  ์ด์œ ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

gRPC๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

gRPC Remote Procedure Calls, of course!

Why would I want to use gRPC?

์ฃผ์š” ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค:

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

๋ˆ„๊ฐ€, ์™œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

gRPC๋Š” CNCF(Cloud Native Computing Foundation) ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

Google์€ ์˜ค๋žซ๋™์•ˆ gRPC์˜ ๋งŽ์€ ๊ธฐ๋ณธ ๊ธฐ์ˆ ๊ณผ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„์€ Google์˜ ์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ ์ œํ’ˆ ๋ฐ Google ์™ธ๋ถ€ ์—ฐ๊ฒฐ API์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Square, Netflix, CoreOS, Docker, CockroachDB, Cisco, Juniper Networks ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์กฐ์ง ๋ฐ ๊ฐœ์ธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๊นŒ?

๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์–ธ์–ด ๋ฐ ํ”Œ๋žซํผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

gRPC ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

์—ฌ๊ธฐ์˜ ์ง€์นจ์— ๋”ฐ๋ผ gRPC ์„ค์น˜๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” gRPC GitHub ์กฐ์ง ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ๊ด€์‹ฌ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ๋˜๋Š” ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ  ์ถ”๊ฐ€ ์ •๋ณด ์ง€์นจ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

gRPC๋Š” ์–ด๋–ค ๋ผ์ด์„ ์Šค์— ์†ํ•˜๋‚˜์š”?

๋ชจ๋“  ๊ตฌํ˜„์€ Apache 2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋ฌธ์„œ๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ?

grpc.io ์—์„œ ๋ฐ”๋กœ ์—ฌ๊ธฐ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋กœ๋“œ๋งต์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

gRPC ํ”„๋กœ์ ํŠธ์—๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์„ค๊ณ„๋˜๊ณ  ๊ตฌํ˜„์„ ์œ„ํ•ด ์Šน์ธ๋˜๋Š” RFC ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

gRPC ๋ฆด๋ฆฌ์Šค๋Š” ์–ผ๋งˆ ๋™์•ˆ ์ง€์›๋˜๋‚˜์š”?

gRPC ํ”„๋กœ์ ํŠธ๋Š” LTS ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋กค๋ง ๋ฆด๋ฆฌ์Šค ๋ชจ๋ธ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ˜„์žฌ, ์ตœ์‹  ๋ฆด๋ฆฌ์Šค ๋ฐ ๊ทธ ์ด์ „ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์›์€ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๋ณด์•ˆ ์ˆ˜์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

gRPC ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •์ฑ…์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์—ฌ๊ธฐ์—์„œ gRPC ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •์ฑ…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ตœ์‹  gRPC ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ตœ์‹  ๋ฆด๋ฆฌ์Šค ํƒœ๊ทธ๋Š” v1.52.0์ž…๋‹ˆ๋‹ค.

gRPC ๋ฆด๋ฆฌ์Šค๋Š” ์–ธ์ œ ๋ฐœ์ƒํ•˜๋‚˜์š”?

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

gRPC์˜ ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์„ ๋ณด๊ณ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

gRPC์˜ ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์„ ๋ณด๊ณ ํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

gRPC ์›น ํ”„๋กœ์ ํŠธ๋Š” ์ผ๋ฐ˜ ๊ณต๊ธ‰๋ฉ๋‹ˆ๋‹ค.

์„ ํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹(JSON, Protobuf, Thrift, XML)๊ณผ ํ•จ๊ป˜ gRPC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ. gRPC๋Š” ์—ฌ๋Ÿฌ ์ฝ˜ํ…์ธ  ํ˜•์‹์„ ์ง€์›ํ•˜๋„๋ก ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์Šค์—๋Š” Protobuf์— ๋Œ€ํ•œ ์ง€์›๊ณผ ๋‹ค์–‘ํ•œ ์„ฑ์ˆ™๋„ ์ˆ˜์ค€์—์„œ FlatBuffers ๋ฐ Thrift์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ  ํ˜•์‹์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ง€์›์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฉ”์‹œ์—์„œ gRPC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ. gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ gRPC๋Š” ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ ์—†์ด ์„œ๋น„์Šค ๋ฉ”์‹œ์— gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” xDS API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. gRPC์—์„œ ์ง€์›๋˜๋Š” ํ”„๋ก์‹œ ์—†๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ธฐ๋Šฅ์€ ์—ฌ๊ธฐ์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

gRPC๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋‚˜์š”?

gRPC ๋ฐ Protobuf๋Š” ์„œ๋น„์Šค๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  iOS, Android ๋ฐ ๋ฐฑ ์—”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์—ญํญ์„ ์ ˆ์•ฝํ•˜๊ณ  ๋” ์ ์€ ์ˆ˜์˜ TCP ์—ฐ๊ฒฐ๋กœ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ CPU ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์„ ์ ˆ์•ฝํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ณ ๊ธ‰ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gRPC๊ฐ€ HTTP/2๋ณด๋‹ค ์ด์ง„ BLOB๋ณด๋‹ค ๋‚˜์€ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ด๊ฒƒ์€ ์ฃผ๋กœ gRPC๊ฐ€ ์œ ์„ ์—์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ gRPC๋Š” ์ผ๋ฐ˜์ ์ธ HTTP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง‘ํ•ฉ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ณ„์ธต์—์„œ ํ๋ฆ„ ์ œ์–ด์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ
  • ๊ณ„๋‹จ์‹ ํ†ตํ™” ์ทจ์†Œ
  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ & ์žฅ์•  ์กฐ์น˜

gRPC๊ฐ€ REST๋ณด๋‹ค ์ข‹๊ฑฐ๋‚˜ ๋‚˜์œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

 

 

 

 

 

728x90
'IT/gRPC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • gRPC ๋™๊ธฐ ๋ถ€์—ฌ ๋ฐ ๋””์ž์ธ ์›์น™(Motivation and Design Principles)
  • gRPC ํ•ต์‹ฌ ๊ฐœ๋…, ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ(Core concepts, architecture and lifecycle)
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋‰ด์Šค
    ๋ธŒ๋ฆฌํ•‘
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ์˜ค๋Š˜์˜๋‰ด์Šค
    ํƒœ๊ตญ
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
    ํ€˜์ŠคํŠธ
    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
gRPC ๋ž€?(Introduction to Remote Procedure Calls)
์ƒ๋‹จ์œผ๋กœ

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