Endpoints ์˜ต์…˜ ์„ ํƒ

Cloud Endpoints์—์„œ API๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ API๊ฐ€ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์œ„์น˜์™€ API์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์–ด๋А ์˜ต์…˜์ด ์ ํ•ฉํ•œ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก Endpoints ์˜ต์…˜์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ปดํ“จํŒ… ์˜ต์…˜ ์„ ํƒ

Endpoints๋Š” API์˜ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ Google Cloud ์ปดํ“จํŒ… ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Endpoints๋Š” Extensible Service Proxy(ESP) ๋˜๋Š” Extensible Service Proxy V2(ESPv2)์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ง€์›๋˜๋Š” ์ปดํ“จํŒ… ์˜ต์…˜์„ ์š”์•ฝํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค.

OpenAPI์šฉ ESP gRPC์šฉ ESP OpenAPI์šฉ ESPv2 gRPC์šฉ ESPv2 Endpoints ํ”„๋ ˆ์ž„์›Œํฌ
App Engine
ํ‘œ์ค€ ํ™˜๊ฒฝ 1์„ธ๋Œ€
์ž๋ฐ” 8 ๋ฐ Python 2.7 ๋Ÿฐํƒ€์ž„
App Engine
ํ‘œ์ค€ ํ™˜๊ฒฝ 2์„ธ๋Œ€
App Engine
๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ
Cloud Run ํ•จ์ˆ˜
Cloud Run
Knative serving
Compute Engine
GKE
Kubernetes
๊ธฐํƒ€ Google Cloud ์™ธ

App Engine, GKE, Compute Engine์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ๋น„๊ต๋Š” ์ปดํ“จํŒ… ์˜ต์…˜ ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”. App Engine ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ‘œ์ค€ ๋˜๋Š” ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ™˜๊ฒฝ ๋น„๊ต๋Š” App Engine ํ™˜๊ฒฝ ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปดํ“จํŒ… ์˜ต์…˜ ์ œํ•œ ์ •๋ณด

OpenAPI์šฉ Endpoints์™€ gRPC์šฉ Endpoints๋Š” ESP ๋˜๋Š” ESPv2๋ฅผ ํ”„๋ก์‹œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฆฌ์Šค ์™ธ์˜ ํ”Œ๋žซํผ์—์„œ ESP ๋˜๋Š” ESPv2๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ž์— ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌ๋˜๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์ด๋“œ์นด๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. Cloud Run, Cloud Run ํ•จ์ˆ˜, App Engine๊ณผ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์—์„œ ESPv2๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์›๊ฒฉ ํ”„๋ก์‹œ๋กœ์„œ Cloud Run ์„œ๋น„์Šค๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

API์˜ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•œ ํ›„ ESP ๋˜๋Š” ESPv2๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๋ชจ๋“  ํ•„์š”ํ•œ ๊ฒ€์‚ฌ(์˜ˆ: ์ธ์ฆ)๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— ์š”์ฒญ์„ API ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๊ฐ€ ์‘๋‹ตํ•˜๋ฉด ESP๊ฐ€ ์„œ๋น„์Šค ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๊ฒฉ ๋ถ„์„ ์ž๋ฃŒ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

Google Cloud ์ฝ˜์†”์˜ Endpoints ์„œ๋น„์Šค ํŽ˜์ด์ง€์—์„œ API ์ธก์ •ํ•ญ๋ชฉ๊ณผ Google Cloud Observability ๋กœ๊ทธ ๋ฐ trace์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

App Engine ํ‘œ์ค€ 1์„ธ๋Œ€ ํ™˜๊ฒฝ ์ œํ•œ์‚ฌํ•ญ

์ด์ „๋ถ€ํ„ฐ App Engine ํ‘œ์ค€ 1์„ธ๋Œ€ ํ™˜๊ฒฝ์˜ Endpoints๋Š” ์ž๋ฐ” 8 ๋ฐ Python 2.7 ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ๋งŒ ์ง€์›ํ•˜๋Š” Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Endpoints Frameworks์˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ์ด ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ Endpoints Frameworks๋Š” ESP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Endpoints ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ESP๊ฐ€ OpenAPI์šฉ Endpoints ๋ฐ gRPC์šฉ Endpoints์— ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋น„์Šทํ•œ API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

App Engine ๋˜๋Š” Cloud Run ํ•จ์ˆ˜์—์„œ๋Š” gRPC API๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

App Engine ๋ฐ Cloud Run ํ•จ์ˆ˜์—์„œ๋Š” HTTP/2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

  • OpenAPI ์‚ฌ์–‘์€ ์–ธ์–ด ์ค‘๋ฆฝ์  ์‚ฌ์–‘์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ API๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • gRPC๋Š” C++, C#, Objective-C(iOS์šฉ), Dart, Go, ์ž๋ฐ”(Android ์ง€์› ํฌํ•จ), Node.js, Python, Ruby ๋“ฑ์˜ ๋งŽ์€ ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ์ปดํŒŒ์ผ๋Ÿฌ์ธ protoc์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ชฉ๋ก์€ gRPC FAQ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” 8๊ณผ Python 2.7๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

API ์„ค๋ช…

Endpoints ์˜ต์…˜์€ API๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

OpenAPI์šฉ Endpoints

OpenAPI Initiative๋Š” REST API์˜ ์„ค๋ช…์„ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์—…๊ณ„ ์ฐจ์›์˜ ๋…ธ๋ ฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Endpoints๋Š” OpenAPI ์‚ฌ์–‘(์ด์ „์˜ Swagger ์‚ฌ์–‘) ๋ฒ„์ „ 2.0์œผ๋กœ ์„ค๋ช…๋œ API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. API ๋…ธ์ถœ ์˜์—ญ์„ OpenAPI ๋ฌธ์„œ๋ผ๊ณ  ํ•˜๋Š” JSON ๋˜๋Š” YAML ํŒŒ์ผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Django ๋˜๋Š” Jersey์™€ ๊ฐ™์ด ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ REST ํ”„๋ ˆ์ž„์›Œํฌ๋กœ API๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenAPI ์‚ฌ์–‘์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ OpenAPI ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAPI์šฉ Endpoints๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gRPC์šฉ Endpoints

gRPC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ proto ํŒŒ์ผ์— ์ง๋ ฌํ™”ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ™•์žฅ์ž๊ฐ€ .proto์ธ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ๋ฉ”์‹œ์ง€๋กœ ์ง€์ •๋œ RPC ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ proto ํŒŒ์ผ์—์„œ API ๋…ธ์ถœ ์˜์—ญ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. gRPC๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ gRPC ๋ฌธ์„œ์˜ gRPC๋ž€?์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ gRPC์šฉ Endpoints๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Endpoints ํ”„๋ ˆ์ž„์›Œํฌ

Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” App Engine ํ‘œ์ค€ Python 2.7 ๋ฐ Java 8 ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์˜ ์ฃผ์„์ด๋‚˜ Python์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ REST API์˜ ๋…ธ์ถœ ์˜์—ญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„