gRPC ํ•ต์‹ฌ ๊ฐœ๋…, ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ(Core concepts, architecture and lifecycle)

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

gRPC์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹ ๊ฐ€์š”? ๋จผ์ € gRPC ์†Œ๊ฐœ๋ฅผ ์ฝ์–ด ๋ณด์‹ญ์‹œ์˜ค. ์–ธ์–ด๋ณ„ ์„ธ๋ถ€ ์ •๋ณด๋Š” ์„ ํƒํ•œ ์–ธ์–ด์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹œ์ž‘, ์ž์Šต์„œ ๋ฐ ์ฐธ์กฐ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Overview

Service definition

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

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string greeting = 1;
}

message HelloResponse {
  string reply = 1;
}

gRPC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„ค ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋‹จ์ผ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹จ์ผ ์‘๋‹ต์„ ๋‹ค์‹œ ๋ฐ›๋Š” ๋‹จํ•ญ RPC์ž…๋‹ˆ๋‹ค.
rpc SayHello(HelloRequest) returns (HelloResponse);
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค๋ฅผ ๋‹ค์‹œ ์ฝ๊ธฐ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ RPC์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋” ์ด์ƒ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜ํ™˜๋œ ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค. gRPC๋Š” ๊ฐœ๋ณ„ RPC ํ˜ธ์ถœ ๋‚ด์—์„œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ๋ จ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ œ๊ณต๋œ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ RPC์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์‹œ์ง€ ์“ฐ๊ธฐ๋ฅผ ๋งˆ์น˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์‹œ gRPC๋Š” ๊ฐœ๋ณ„ RPC ํ˜ธ์ถœ ๋‚ด์—์„œ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
  • ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ RPC๋Š” ์–‘์ชฝ์ด ์ฝ๊ธฐ-์“ฐ๊ธฐ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋‘ ์ŠคํŠธ๋ฆผ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์›ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„๋Š” ์‘๋‹ต์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์€ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์“ฐ๊ฑฐ๋‚˜, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์˜ ๋‹ค๋ฅธ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ŠคํŠธ๋ฆผ์˜ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

์•„๋ž˜์˜ RPC ์ˆ˜๋ช… ์ฃผ๊ธฐ ์„น์…˜์—์„œ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ RPC์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Using the API

.proto ํŒŒ์ผ์˜ ์„œ๋น„์Šค ์ •์˜์—์„œ ์‹œ์ž‘ํ•˜์—ฌ gRPC๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ์ชฝ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. gRPC ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ด๋Ÿฌํ•œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์„œ๋ฒ„ ์ชฝ์—์„œ ํ•ด๋‹น API๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

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

Synchronous vs. asynchronous

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

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ gRPC ํ”„๋กœ๊ทธ๋ž˜๋ฐ API๋Š” ๋™๊ธฐ ๋ฐ ๋น„๋™๊ธฐ ๋ฒ„์ „์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์–ธ์–ด์˜ ์ž์Šต์„œ ๋ฐ ์ฐธ์กฐ ์„ค๋ช…์„œ์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ „์ฒด ์ฐธ์กฐ ๋ฌธ์„œ๋Š” ๊ณง ์ œ๊ณต๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค).

RPC life cycle

์ด ์„น์…˜์—์„œ๋Š” gRPC ํด๋ผ์ด์–ธํŠธ๊ฐ€ gRPC ์„œ๋ฒ„ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋Š” ์–ธ์–ด๋ณ„ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Unary RPC

๋จผ์ € ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹จ์ผ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋‹จ์ผ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ RPC ์œ ํ˜•์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์Šคํ… ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์„œ๋ฒ„๋Š” RPC๊ฐ€ ์ด ํ˜ธ์ถœ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ฐ ์ง€์ •๋œ ์ตœ์ข… ๊ธฐํ•œ(ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ)๊ณผ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„๋Š” ์ž์ฒด ์ดˆ๊ธฐ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ (์‘๋‹ต ์ „์— ์ „์†กํ•ด์•ผ ํ•จ)๋ฅผ ์ฆ‰์‹œ ๋‹ค์‹œ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  3. ์„œ๋ฒ„์— ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์‘๋‹ต์„ ๋งŒ๋“ค๊ณ  ์ฑ„์šฐ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‘๋‹ต์€ ์ƒํƒœ ์„ธ๋ถ€ ์ •๋ณด(์ƒํƒœ ์ฝ”๋“œ ๋ฐ ์„ ํƒ์  ์ƒํƒœ ๋ฉ”์‹œ์ง€) ๋ฐ ์„ ํƒ์  ํ›„ํ–‰ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค(์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ).
  4. ์‘๋‹ต ์ƒํƒœ๊ฐ€ OK์ด๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ๋ฐ›์•„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ํ˜ธ์ถœ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

Server streaming RPC

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

Client streaming RPC

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

Bidirectional streaming RPC

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

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

Deadlines/Timeouts

gRPC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ RPC๊ฐ€ DEADLINE_EXCEEDED ์˜ค๋ฅ˜๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— RPC๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•  ์‹œ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ชฝ์—์„œ ์„œ๋ฒ„๋Š” ํŠน์ • RPC๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” RPC๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋‚จ์€ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ๊ธฐํ•œ ๋˜๋Š” ์‹œ๊ฐ„ ์ œํ•œ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ์–ธ์–ด๋ณ„๋กœ ๋‹ค๋ฅด๋ฉฐ, ์ผ๋ถ€ ์–ธ์–ด API๋Š” ์‹œ๊ฐ„ ์ œํ•œ(๊ธฐ๊ฐ„)์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•˜๊ณ  ์ผ๋ถ€ ์–ธ์–ด API๋Š” ์ตœ์ข… ๊ธฐํ•œ(๊ณ ์ • ์‹œ์ )์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๊ธฐ๋ณธ ์ตœ์ข… ๊ธฐํ•œ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

RPC termination

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

Cancelling an RPC 

ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„๋Š” ์–ธ์ œ๋“ ์ง€ RPC๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์†Œํ•˜๋ฉด RPC๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Warning

์ทจ์†Œ ์ „์— ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์€ ๋กค๋ฐฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Metadata

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‚ค-๊ฐ’ ์Œ ๋ชฉ๋ก ํ˜•์‹์˜ ํŠน์ • RPC ํ˜ธ์ถœ(์˜ˆ: ์ธ์ฆ ์„ธ๋ถ€ ์ •๋ณด)์— ๋Œ€ํ•œ ์ •๋ณด๋กœ, ํ‚ค๋Š” ๋ฌธ์ž์—ด์ด๊ณ  ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ž์—ด์ด์ง€๋งŒ ์ด์ง„ ๋ฐ์ดํ„ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ASCII ๋ฌธ์ž, ์ˆซ์ž ๋ฐ ํŠน์ˆ˜ ๋ฌธ์ž -, _, ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. grpc-(gRPC ์ž์ฒด์šฉ์œผ๋กœ ์˜ˆ์•ฝ๋จ)๋กœ ์‹œ์ž‘ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด์ง„ ๊ฐ’ ํ‚ค๋Š” -bin์œผ๋กœ ๋๋‚˜์ง€๋งŒ ASCII ๊ฐ’ ํ‚ค๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” gRPC์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Channels

gRPC ์ฑ„๋„์€ ์ง€์ •๋œ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ์˜ gRPC ์„œ๋ฒ„์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์Šคํ…์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ฑ„๋„ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ gRPC์˜ ๊ธฐ๋ณธ ๋™์ž‘(์˜ˆ: ๋ฉ”์‹œ์ง€ ์••์ถ• ์ผœ๊ธฐ ๋˜๋Š” ๋„๊ธฐ)์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ„๋„์—๋Š” ์—ฐ๊ฒฐ๋จ ๋ฐ ์œ ํœด ์ƒํƒœ๋ฅผ ํฌํ•จํ•œ ์ƒํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

gRPC๊ฐ€ ์ฑ„๋„ ๋‹ซ๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์–ธ์–ด์—์„œ๋Š” ์ฑ„๋„ ์ƒํƒœ ์ฟผ๋ฆฌ๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

728x90
'IT/gRPC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • gRPC ๋™๊ธฐ ๋ถ€์—ฌ ๋ฐ ๋””์ž์ธ ์›์น™(Motivation and Design Principles)
  • gRPC ๋ž€?(Introduction to Remote Procedure Calls)
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, 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 ํ•ต์‹ฌ ๊ฐœ๋…, ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ(Core concepts, architecture and lifecycle)
์ƒ๋‹จ์œผ๋กœ

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