app.yaml ๊ตฌ์„ฑ ํŒŒ์ผ

app.yaml ํŒŒ์ผ์€ ๋Ÿฐํƒ€์ž„์˜ ๊ตฌ์„ฑ ์„ค์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์•ฑ, ๋„คํŠธ์›Œํฌ, ๊ธฐํƒ€ ๋ฆฌ์†Œ์Šค ์„ค์ •๊นŒ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

.gcloudignore ํŒŒ์ผ์— app.yaml์„ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”. ๋ฐฐํฌ์— app.yaml๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ .gcloudignore์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

app.yaml ํŒŒ์ผ์˜ ๊ตฌ๋ฌธ์€ YAML ํ˜•์‹์ž…๋‹ˆ๋‹ค. YAML ํ˜•์‹์€ ํ•ด์‹œํƒœ๊ทธ(#) ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์ค„์ด ๋ฌด์‹œ๋˜๋Š” ์ฃผ์„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# This is a comment.

URL ๋ฐ ํŒŒ์ผ ๊ฒฝ๋กœ ํŒจํ„ด์€ ๋Œ€์กฐ ์š”์†Œ์™€ ๋Œ€์กฐ ํด๋ž˜์Šค๋ฅผ ์ œ์™ธํ•œ POSIX ํ™•์žฅ ์ •๊ทœ ํ‘œํ˜„์‹ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃนํ™”๋œ ์ผ์น˜๋กœ์˜ ์—ญ์ฐธ์กฐ(์˜ˆ: \1)๊ฐ€ ์ง€์›๋˜๋ฉฐ Perl ํ™•์žฅ๋ช…(\w \W \s \S \d \D)๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์„ค์ •

app.yaml ํŒŒ์ผ์—๋Š” ์ด๋Ÿฌํ•œ ์ผ๋ฐ˜ ์„ค์ •์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„ค์ •์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด๋ฆ„์„ค๋ช…
build_env_variables

์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œํŒฉ์„ ์ง€์›ํ•˜๋Š” ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ app.yaml ํŒŒ์ผ์— ๋นŒ๋“œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋นŒ๋“œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

runtime

ํ•„์ˆ˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

env: flex ํ•„์ˆ˜: ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
service: service_name ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ ํ•„์ˆ˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ์„ ํƒ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค์™€ ๋ฒ„์ „์—๋Š” ์ด๋ฆ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ˆซ์ž, ๋ฌธ์ž, ํ•˜์ดํ”ˆ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ์—์„œ VERSION-dot-SERVICE-dot-PROJECT_ID์˜ ๊ฒฐํ•ฉ๋œ ๊ธธ์ด(VERSION๋Š” ๋ฒ„์ „ ์ด๋ฆ„, SERVICE์€ ์„œ๋น„์Šค ์ด๋ฆ„, PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID)๋Š” 63์ž(์˜๋ฌธ)๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•˜์ดํ”ˆ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋๋‚  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋ฐฐํฌํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์„œ๋น„์Šค์˜ ์ƒˆ ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐฐํฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ƒˆ ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒˆ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐฐํฌํ•  ๊ฒฝ์šฐ ์ƒˆ ์„œ๋น„์Šค ๋ฐ ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค-๋ฒ„์ „ ์กฐํ•ฉ์— ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด์ „์—๋Š” ์„œ๋น„์Šค๋ฅผ '๋ชจ๋“ˆ'์ด๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

service_account

์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. service_account ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋ฒ„์ „์˜ ID๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๊ณ  ํƒœ์Šคํฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ •์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

service_account: [SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com
skip_files

์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. skip_files ์š”์†Œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ App Engine์— ์—…๋กœ๋“œํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ •๊ทœ ํ‘œํ˜„์‹์ด๊ฑฐ๋‚˜ ์ •๊ทœ ํ‘œํ˜„์‹์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ •๊ทœ ํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—…๋กœ๋“œ๋  ๋•Œ ์—…๋กœ๋“œํ•  ํŒŒ์ผ ๋ชฉ๋ก์—์„œ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฆ„์ด .bak๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ skip_files ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

skip_files:
- ^.*\.bak$

๋„คํŠธ์›Œํฌ ์„ค์ •

app.yaml ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋„คํŠธ์›Œํฌ ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

network:
  name: NETWORK_NAME
  instance_ip_mode: INSTANCE_IP_MODE
  instance_tag: TAG_NAME
  subnetwork_name: SUBNETWORK_NAME
  session_affinity: true
  forwarded_ports:
    - PORT
    - HOST_PORT:CONTAINER_PORT
    - PORT/tcp
    - HOST_PORT:CONTAINER_PORT/udp

๋„คํŠธ์›Œํฌ ์„ค์ •์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…
name ๊ฐ€๋ณ€ํ˜• ํ™˜๊ฒฝ์˜ ๋ชจ๋“  VM ์ธ์Šคํ„ด์Šค๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ Google Compute Engine ๋„คํŠธ์›Œํฌ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ ์ด ์„ค์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์งง์€ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default ๋Œ€์‹  default). ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ(์ด๋ฆ„ default)์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์„œ๋ธŒ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
instance_ip_mode ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž„์‹œ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด internal๋กœ ์„ค์ •ํ•˜๊ณ  ๋น„๊ณต๊ฐœ Google ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด์ „์— ์ด ์„ค์ • ์—†์ด ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ ๋˜๋Š” external๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ internal ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๋ฉด ์ธ์Šคํ„ด์Šค์—์„œ ์ž„์‹œ ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. internal ์„ค์ •์—๋Š” ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ external์ž…๋‹ˆ๋‹ค.
instance_tag ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ์„œ๋น„์Šค์˜ ๊ฐ ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹น ์ด๋ฆ„์ด ํ• ๋‹น๋˜๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์— ์ž‘์—…์„ ํƒ€๊ฒŸํŒ…ํ•˜๋Š” gcloud ๋ช…๋ น์–ด์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. compute firewalls-create ๋ช…๋ น์–ด์— --source-tags ๋ฐ --target-tags ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณต์œ  VPC๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— aef-INSTANCE_ID ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  VPC๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— aef-INSTANCE_ID and aef-instance. ํƒœ๊ทธ๊ฐ€ ๋ชจ๋‘ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
subnetwork_name ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์ปค์Šคํ…€ ์„œ๋ธŒ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ name์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์งง์€ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: https://www.googleapis.com/compute/v1/projects/my-project/global/networks/default/subnetworks/default ๋Œ€์‹  default). ์„œ๋ธŒ๋„คํŠธ์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™์ผํ•œ ๋ฆฌ์ „์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
session_affinity ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์„ธ์…˜ ์ค‘์— ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์ง€์ •๋œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ˆœ์ฐจ ์š”์ฒญ์„ ๋™์ผํ•œ App Engine ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋„๋ก App Engine์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๋Š” ๋™์ผํ•œ ์‚ฌ์šฉ์ž์˜ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์‹๋ณ„ํ•˜๋Š” ์ฟ ํ‚ค ๊ฐ’ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ํ›„ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์š”์ฒญ์„ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ˆ˜๊ฐ€ ์ถ•์†Œ๋˜์—ˆ์„ ๋•Œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žฌ๋ถ€ํŒ…๋˜๊ฑฐ๋‚˜, ๋น„์ •์ƒ ๋˜๋Š” ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์ด๊ฑฐ๋‚˜, ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๊ฐ€ ์†์ƒ๋˜๊ณ  ์ดํ›„ ์š”์ฒญ์ด ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์„ค์ •์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.
forwarded_ports ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ํฌํŠธ๋ฅผ ์ธ์Šคํ„ด์Šค(HOST_PORT)์—์„œ Docker ์ปจํ…Œ์ด๋„ˆ(CONTAINER_PORT)๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HOST_PORT๋Š” 1024์™€ 65535 ์‚ฌ์ด์—ฌ์•ผ ํ•˜๋ฉฐ ํฌํŠธ 22, 8080, 8090, 8443, 10000, 10001, 10400-10500, 11211, 24231๊ณผ ์ถฉ๋Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. CONTAINER_PORT๋Š” 1์—์„œ 65535 ์‚ฌ์ด์—ฌ์•ผ ํ•˜๋ฉฐ ํฌํŠธ 22, 10001, 10400-10500, 11211๊ณผ ์ถฉ๋Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. PORT๋งŒ ์ง€์ •ํ•  ๊ฒฝ์šฐ, App Engine์€ ํ•ด๋‹น ํฌํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ํฌํŠธ์™€ ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ TCP ํŠธ๋ž˜ํ”ฝ๊ณผ UDP ํŠธ๋ž˜ํ”ฝ์ด ๋ชจ๋‘ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์€ appspot.com ๋„๋ฉ”์ธ์ด๋‚˜ ์ปค์Šคํ…€ ๋„๋ฉ”์ธ์„ ํ†ตํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋Œ€์ƒ ์ธ์Šคํ„ด์Šค์˜ IP ์ฃผ์†Œ๋กœ ์ง์ ‘ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

Compute Engine ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ๋„คํŠธ์›Œํฌ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ์—… ๋„คํŠธ์›Œํฌ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋“ฑ์˜ VPN ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

App Engine ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•˜์œ„ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ปค์Šคํ…€ ์„œ๋ธŒ๋„ท ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. ์œ„์—์„œ ์ง€์ •ํ•œ ๋Œ€๋กœ app.yaml ํŒŒ์ผ์— ๋„คํŠธ์›Œํฌ ์ด๋ฆ„๊ณผ ์„œ๋ธŒ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ •์  ๋ผ์šฐํŒ… ๊ธฐ๋ฐ˜์˜ ๊ฐ„๋‹จํ•œ VPN์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ปค์Šคํ…€ ์„œ๋ธŒ๋„ท ๋„คํŠธ์›Œํฌ๋ฅผ ์œ„ํ•œ ๊ฒŒ์ดํŠธ์›จ์ด์™€ ํ„ฐ๋„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์œ ํ˜•์˜ VPN์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํฌํŠธ ์ „๋‹ฌ

ํฌํŠธ ์ „๋‹ฌ์„ ์ด์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค์˜ Docker ์ปจํ…Œ์ด๋„ˆ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠธ๋ž˜ํ”ฝ์€ ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌํŠธ ์ „๋‹ฌ์€ ๋””๋ฒ„๊ฑฐ ๋˜๋Š” ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์€ appspot.com ๋„๋ฉ”์ธ์ด๋‚˜ ์ปค์Šคํ…€ ๋„๋ฉ”์ธ์„ ํ†ตํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋Œ€์ƒ ์ธ์Šคํ„ด์Šค์˜ IP ์ฃผ์†Œ๋กœ ์ง์ ‘ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ, ๋„คํŠธ์›Œํฌ ์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์€ Google Cloud Platform ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. app.yaml ํŒŒ์ผ์— ํฌํŠธ ์ „๋‹ฌ์„ ์ง€์ •ํ•œ ํ›„์—๋Š” ์—ด์–ด ๋†“์„ ํฌํŠธ๋กœ๋ถ€ํ„ฐ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Google Cloud ์ฝ˜์†”์˜ ๋„คํŠธ์›Œํ‚น ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ํŽ˜์ด์ง€์—์„œ ๋˜๋Š” gcloud ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํฌํŠธ 2222์—์„œ ๋“ค์–ด์˜ค๋Š” TCP ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. app.yaml์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์— ๋‹ค์Œ์„ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.

    network:
      forwarded_ports:
        - 2222/tcp
    
    1. Python ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ํฌํ•จํ•˜๋„๋ก app.yaml์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

      entrypoint: gunicorn -b :$PORT -b :2222 main:app
      
  2. Google Cloud ์ฝ˜์†”์—์„œ ๋˜๋Š” gcloud compute firewall-rules create๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ง€์ •ํ•ด ๋ชจ๋“  ์†Œ์Šค(0.0.0.0/0)์™€ tcp:2222์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ์„ค์ •

์ด ์„ค์ •์€ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. App Engine์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋จธ์‹  ์œ ํ˜•์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋จธ์‹ ์—๋Š” ์ตœ์†Œํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์ˆ˜์ค€ ์ด์ƒ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณด์žฅ๋˜๋ฉฐ ๊ทธ ์ด์ƒ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œ๊ณต๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ์„ค์ •์—์„œ ์ตœ๋Œ€ 8๊ฐœ์˜ tmpfs ๋ณผ๋ฅจ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ tmpfs๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์›Œํฌ๋กœ๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ I/O๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

resources:
  cpu: 2
  memory_gb: 2.3
  disk_size_gb: 10
  volumes:
  - name: ramdisk1
    volume_type: tmpfs
    size_gb: 0.5

๋ฆฌ์†Œ์Šค ์„ค์ •์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
cpu ์ฝ”์–ด ์ˆ˜๋Š” ํ•˜๋‚˜์—ฌ์•ผ ํ•˜๋ฉฐ 2~32 ์‚ฌ์ด์˜ ์ง์ˆ˜์ด๊ฑฐ๋‚˜ 32์™€ 80 ์‚ฌ์ด์˜ 4์˜ ๋ฐฐ์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1๊ฐœ์˜ ์ฝ”์–ด
memory_gb

RAM(GB). ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ์ด๋ฉฐ, ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค์˜ ์˜ค๋ฒ„ํ—ค๋“œ์— ํ•„์š”ํ•œ 0.4GB ์ดํ•˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๊ฐ CPU ์ฝ”์–ด์— 1.0~6.5GB ์‚ฌ์ด์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

memory_gb = cpu * [1.0 - 6.5] - 0.4

2๊ฐœ์˜ ์ฝ”์–ด๋ฅผ ์ง€์ •ํ•œ ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” 1.6~12.6GB๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ œ๊ณต๋˜๋Š” ์ด ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GAE_MEMORY_MB๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

0.6GB
disk_size_gb ํฌ๊ธฐ(GB). ์ตœ์†Ÿ๊ฐ’์€ 10GB์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ 10,240GB์ž…๋‹ˆ๋‹ค. 13GB
name ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•„์ˆ˜ ํ•ญ๋ชฉ์ด๋ฉฐ, ๋ณผ๋ฅจ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ๊ณ ์œ ํ•ด์•ผ ํ•˜๋ฉฐ 1~63์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋Œ€์‹œ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž๋Š” ๋ฌธ์ž์—ฌ์•ผ ํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ๊ธ€์ž๋Š” ๋Œ€์‹œ๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์€ ์•ฑ ์ปจํ…Œ์ด๋„ˆ์— /mnt/NAME์œผ๋กœ ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค.
volume_type ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•„์ˆ˜ ํ•ญ๋ชฉ์ด๋ฉฐ, tmpfs์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
size_gb ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•„์ˆ˜ ํ•ญ๋ชฉ์ด๋ฉฐ, ๋ณผ๋ฅจ์˜ ํฌ๊ธฐ(GB)์ž…๋‹ˆ๋‹ค. ์ตœ์†Ÿ๊ฐ’์€ 0.001GB์ด๊ณ  ์ตœ๋Œ“๊ฐ’์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ธฐ๋ณธ ๊ธฐ๊ธฐ์— ์ œ๊ณต๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ž…๋‹ˆ๋‹ค. Google์€ ๋””์Šคํฌ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€ RAM์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. tmpfs ๋ณผ๋ฅจ์— ํ• ๋‹น๋˜๋Š” RAM์€ ์•ฑ ์ปจํ…Œ์ด๋„ˆ์— ์ œ๊ณต๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค. ์ •๋ฐ€๋„๋Š” ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ถ„ํ•  ์ƒํƒœ ํ™•์ธ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ„ํ•  ์ƒํƒœ ํ™•์ธ์€ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ •๊ธฐ์ ์ธ ์ƒํƒœ ํ™•์ธ ์š”์ฒญ์„ ํ†ตํ•ด VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •์ƒ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ƒํƒœ ํ™•์ธ์— ๋Œ€ํ•œ ์‘๋‹ต์€ ์ง€์ •๋œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ๋‚ด์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ƒํƒœ ํ™•์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™œ์„ฑ ํ™•์ธ์€ VM ๋ฐ Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. App Engine์ด ๋น„์ •์ƒ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค€๋น„ ํ™•์ธ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ˆ˜์‹ ๋˜๋Š” ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ค€๋น„ ํ™•์ธ์— ์‹คํŒจํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค์˜ ํ’€์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ, ์ƒํƒœ ํ™•์ธ์˜ HTTP ์š”์ฒญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ํ™•์ธ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด ํ™œ์„ฑ ํ™•์ธ ๋˜๋Š” ์ค€๋น„ ํ™•์ธ์„ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 200 OK ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปค์Šคํ…€ ์ƒํƒœ ํ™•์ธ์— ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑ ํ™•์ธ

ํ™œ์„ฑ ํ™•์ธ์€ VM ๋ฐ Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋น„์ •์ƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์„ ํƒ์‚ฌํ•ญ์ธ liveness_check ์„น์…˜์„ app.yaml ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜์—ฌ ํ™œ์„ฑ ํ™•์ธ ์š”์ฒญ์„ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

liveness_check:
  path: "/liveness_check"
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2

ํ™œ์„ฑ ํ™•์ธ์— ๋‹ค์Œ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ธฐ๋ณธ๊ฐ’ ๋ฒ”์œ„(์ตœ์†Œ-์ตœ๋Œ€) ์„ค๋ช…
path ์—†์Œ ํ™œ์„ฑ ํ™•์ธ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•˜๋ ค๋ฉด "/liveness_check"์™€ ๊ฐ™์€ URL ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
timeout_sec 4์ดˆ 1~300๋ช… ๊ฐ ์š”์ฒญ์˜ ์ œํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(์ดˆ)์ž…๋‹ˆ๋‹ค.
check_interval_sec 30์ดˆ 1~300๋ช… ๊ฐ ํ™•์ธ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(์ดˆ)์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ timeout_sec๋ณด๋‹ค ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
failure_threshold 4ํšŒ ํ™•์ธ 1~10 ์ด ํšŸ์ˆ˜๋งŒํผ ์—ฐ์†์œผ๋กœ ํ™•์ธ์— ์‹คํŒจํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น„์ •์ƒ์ž…๋‹ˆ๋‹ค.
success_threshold 2ํšŒ ํ™•์ธ 1~10 ๋น„์ •์ƒ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด ํšŸ์ˆ˜๋งŒํผ ์—ฐ์†์œผ๋กœ ํ™•์ธ์— ์‘๋‹ตํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•˜๋ฉด ์ •์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.
initial_delay_sec 300์ดˆ 0-3600 ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋œ ํ›„์— ์ƒํƒœ ํ™•์ธ ์‘๋‹ต์ด ๋ฌด์‹œ๋˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ ์ธ์Šคํ„ด์Šค์— ์ ์šฉ๋˜๋ฉฐ ์ƒˆ ์ธ์Šคํ„ด์Šค์˜ ์ค€๋น„ ๋ฐ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ค‘์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ ๊ฒ€ํ•˜๊ณ  ์กฐ๊ธฐ์— ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ์ž๋™ ๋ณต๊ตฌ๋ฅผ ์ง€์—ฐํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ RUNNING ๋ชจ๋“œ์ด๋ฉด ์ดˆ๊ธฐ ์ง€์—ฐ ํƒ€์ด๋จธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ดˆ๊ธฐํ™” ์ž‘์—… ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์ค€๋น„๊นŒ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ์ง€์—ฐ์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค€๋น„ ํ™•์ธ

์ค€๋น„ ํ™•์ธ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ˆ˜์‹ ๋˜๋Š” ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ค€๋น„ ํ™•์ธ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค์˜ ํ’€์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

readiness_check:
  path: "/readiness_check"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300

์ค€๋น„ ํ™•์ธ์— ๋‹ค์Œ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ธฐ๋ณธ๊ฐ’ ๋ฒ”์œ„(์ตœ์†Œ-์ตœ๋Œ€) ์„ค๋ช…
path ์—†์Œ ์ค€๋น„ ํ™•์ธ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•˜๋ ค๋ฉด "/readiness_check"์™€ ๊ฐ™์€ URL ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
timeout_sec 4์ดˆ 1~300๋ช… ๊ฐ ์š”์ฒญ์˜ ์ œํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(์ดˆ)์ž…๋‹ˆ๋‹ค.
check_interval_sec 5์ดˆ 1~300๋ช… ๊ฐ ํ™•์ธ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ(์ดˆ)์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ timeout_sec๋ณด๋‹ค ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
failure_threshold 2ํšŒ ํ™•์ธ 1~10 ์ด ํšŸ์ˆ˜๋งŒํผ ์—ฐ์†์œผ๋กœ ํ™•์ธ์— ์‹คํŒจํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น„์ •์ƒ์ž…๋‹ˆ๋‹ค.
success_threshold 2ํšŒ ํ™•์ธ 1~10 ๋น„์ •์ƒ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ด ํšŸ์ˆ˜๋งŒํผ ์—ฐ์†์œผ๋กœ ํ™•์ธ์— ์‘๋‹ตํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•˜๋ฉด ์ •์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.
app_start_timeout_sec 300์ดˆ 1-1800 ์ด ์„ค์ •์€ ๊ฐœ๋ณ„ VM์ด ์•„๋‹Œ ์ƒˆ ๋ฐฐํฌ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ์—์„œ ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒํƒœ ํ™•์ธ์„ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ๋Œ€ ์‹œ๊ฐ„(์ดˆ)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•˜์—ฌ ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค. ์ด ํƒ€์ด๋จธ๋Š” Compute Engine ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋˜๊ณ  Load Balancer ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐํฌ ์ค‘์— ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์–‘ํ˜ธํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ํ™•์ธ ๋นˆ๋„

๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด App Engine์—์„œ๋Š” ๊ฐ ์ƒํƒœ ๊ฒ€์‚ฌ๊ธฐ์˜ ์ค‘๋ณต ์‚ฌ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ƒํƒœ ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ง€์—ฐ ์‹œ๊ฐ„ ์—†์ด ์ค‘๋ณต ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ nginx.health_check ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด ์‚ฌ์šฉ์ž ์„ค์ •๊นŒ์ง€ ๋”ฐ๋ฅด๋Š” ์ค‘๋ณต ์ƒํƒœ ๊ฒ€์‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ ํ™•์ธ ํด๋ง์ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•œ ๋นˆ๋„๋ณด๋‹ค ๋” ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘๋ณต ์ƒํƒœ ๊ฒ€์‚ฌ๊ธฐ๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ํ™•์žฅ ์„ค์ •

์„œ๋น„์Šค์˜ ํ™•์žฅ์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค๋Š” ์„œ๋น„์Šค์— ํ• ๋‹นํ•˜๋Š” ํ™•์žฅ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ž๋™ ํ™•์žฅ ๋˜๋Š” ์ˆ˜๋™ ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ž๋™ ํ™•์žฅ์ž…๋‹ˆ๋‹ค.

์ž๋™ ํ™•์žฅ

app.yaml ํŒŒ์ผ์— automatic_scaling ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋™ ํ™•์žฅ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 15
  cool_down_period_sec: 180
  cpu_utilization:
    target_utilization: 0.6
  target_concurrent_requests: 100

๋‹ค์Œ ํ‘œ์—๋Š” ์ž๋™ ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ์„ค๋ช…
automatic_scaling ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™ ํ™•์žฅ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ํ™•์žฅ ์„ค์ •์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์ด ์ค„์„ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค.
min_num_instances ์„œ๋น„์Šค์— ์ œ๊ณต๋˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋ฐฐํฌ๋˜๋ฉด ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ผ ์ด ๊ฐœ์ˆ˜๋งŒํผ ์ธ์Šคํ„ด์Šค์™€ ํ™•์žฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. 1 ์ด์ƒ์ด์–ด์•ผ ํ•˜๋ฉฐ, ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ๊ฐ’์€ 2์ž…๋‹ˆ๋‹ค.
max_num_instances ์„œ๋น„์Šค๊ฐ€ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด ์ตœ๋Œ€ ์ธ์Šคํ„ด์Šค ์ˆ˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰์— ๋”ฐ๋ผ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 20์ž…๋‹ˆ๋‹ค.
cool_down_period_sec ์ž๋™ ํ™•์žฅ ์ฒ˜๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์ „์— ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์ž๋™ ํ™•์žฅ ์ฒ˜๋ฆฌ๊ฐ€ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋™์•ˆ ์ˆ˜์ง‘๋œ ์‚ฌ์šฉ๋Ÿ‰์€ ์ •ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ 60์ดˆ ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 120์ž…๋‹ˆ๋‹ค.
cpu_utilization ๋Œ€์ƒ CPU ์‚ฌ์šฉ๋ฅ ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์ด ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
target_utilization ๋Œ€์ƒ CPU ์‚ฌ์šฉ๋ฅ ์ž…๋‹ˆ๋‹ค. CPU ์‚ฌ์šฉ๋ฅ ์€ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ํ‰๊ท ์œผ๋กœ ๊ณ„์‚ฐ๋˜๋ฉฐ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ๋Š˜๋ฆด ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ 25์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ์ฒ˜๋ฆฌ ์ค‘์ธ ์š”์ฒญ๊ณผ ๊ด€๊ณ„์—†์ด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0.5์ž…๋‹ˆ๋‹ค.
target_concurrent_requests

(๋ฒ ํƒ€) ์ธ์Šคํ„ด์Šค๋‹น ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ํƒ€๊ฒŸํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ์ž๋™ ํ™•์žฅ ์ฒ˜๋ฆฌ๋Š” ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ํ‰๊ท  ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ๋Š˜๋ฆด ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ์ค‘์ธ ์š”์ฒญ๊ณผ ๊ด€๊ณ„์—†์ด ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ 25์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค.

์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™ ํ™•์žฅ ์ฒ˜๋ฆฌ๊ฐ€ ์ธ์Šคํ„ด์Šค๋‹น ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ํƒ€๊ฒŸํŒ…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์€ ์š”์ฒญ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋™ ํ™•์žฅ

app.yaml ํŒŒ์ผ์— manual_scaling ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜๋™ ํ™•์žฅ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

manual_scaling:
  instances: 5

๋‹ค์Œ ํ‘œ์—๋Š” ์ˆ˜๋™ ํ™•์žฅ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์„ค๋ช…
manual_scaling ์„œ๋น„์Šค์— ์ˆ˜๋™ ํ™•์žฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
instances ์„œ๋น„์Šค์— ํ• ๋‹นํ•  ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •์˜

app.yaml์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

env_variables:
  MY_VAR: "my value"

์—ฌ๊ธฐ์„œ MY_VAR ๋ฐ my value๋Š” ์ •์˜ํ•˜๋ ค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๊ฐ’์ด๋ฉฐ, ๊ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ•ญ๋ชฉ์€ env_variables ์š”์†Œ ์•„๋ž˜์— ๋‘ ์นธ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ