Cloud Endpoints Frameworks

Cloud Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” App Engine ํ‘œ์ค€ Python 2.7 ๋ฐ ์ž๋ฐ” 8 ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. Cloud Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ•  REST API ๋ฐ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ž๋ฐ”

@ApiMethod(name = "echo")
public Message echo(Message message, @Named("n") @Nullable Integer n) {
  return doEcho(message, n);
}

์ฝ”๋“œ ์˜ˆ์‹œ์—์„œ ์ฃผ์„์€ @ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Python

@endpoints.method(
    # This method takes a ResourceContainer defined above.
    ECHO_RESOURCE,
    # This method returns an Echo message.
    EchoResponse,
    path="echo",
    http_method="POST",
    name="echo",
)
def echo(self, request):
    output_message = " ".join([request.message] * request.n)
    return EchoResponse(message=output_message)

์ฝ”๋“œ ์˜ˆ์‹œ์—์„œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” @ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Apache Tomcat, Gunicorn ๋“ฑ์˜ ํƒ€์‚ฌ ์›น ์„œ๋ฒ„๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ๋ฐฐํฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ์ฃผ์„์ด๋‚˜ ๋ฐ์ฝ”๋ ˆ์ด์…˜์„ ์ถ”๊ฐ€ํ•œ ํ›„ ํ‰์†Œ์™€ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

API ๊ด€๋ฆฌ

Extensible Service Proxy(ESP)๋Š” OpenAPI์šฉ Endpoints ๋ฐ gRPC์šฉ Endpoints์— ๋Œ€ํ•œ API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ESP๋Š” ๋ฐฑ์—”๋“œ์˜ ๊ฐ ์ธ์Šคํ„ด์Šค์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

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

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

API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์—†์ด Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ๋น„์šฉ์€ Endpoints ๊ฐ€๊ฒฉ ํŽ˜์ด์ง€์— ๋”ฐ๋ผ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” App Engine ํ‘œ์ค€ Python 2.7 ๋ฐ ์ž๋ฐ” 8 ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
  • Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ์˜ Node.js, PHP, Go ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” App Engine ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Endpoints ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Cloud Run ํ•จ์ˆ˜, Compute Engine, Google Kubernetes Engine์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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