ํ™ˆ/Article
Article๋นŒ๋“œ ๋…ธํŠธ

๐Ÿงฑ GKE๋กœ Monolith์—์„œ Microservices ์ด์ „ - ์‹ค์ „ํŽธ

์ด์ „์— ์ด์–ด Google Kubernetes Engine(GKE)๋กœ ๊ธฐ์กด Monolith์—์„œ Microservices๋กœ ์ด์ „์„ ํ•ด ์ง์ ‘ ํ•ด ๋ณด๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.์ด ๊ณผ์ •์€ ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์˜ study jam์˜ ๊ณผ์ • ์ค‘ ์ผ๋ถ€ ๊ณผ์ •(chanlleng lab)์ž…๋‹ˆ๋‹ค. ์šฉ์–ด๋‚˜ ๊ฐœ๋…์ด ์ž˜ ์•ˆ ์žกํžˆ๋Š” ๋ถ„์€...

๋ผ์ด์–ธ ์นธ ์ž‘์„ฑ - 2025๋…„ 4์›” 27์ผ12๋ถ„

์ด์ „์— ์ด์–ด Google Kubernetes Engine(GKE)๋กœ ๊ธฐ์กด Monolith์—์„œ Microservices๋กœ ์ด์ „์„ ํ•ด ์ง์ ‘ ํ•ด ๋ณด๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์€ ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์˜ study jam์˜ ๊ณผ์ • ์ค‘ ์ผ๋ถ€ ๊ณผ์ •(chanlleng lab)์ž…๋‹ˆ๋‹ค.

์šฉ์–ด๋‚˜ ๊ฐœ๋…์ด ์ž˜ ์•ˆ ์žกํžˆ๋Š” ๋ถ„์€ ์ด์ „ ๊ธ€์„ ๋ณด์‹œ๋ฉด ์ข€ ๋” ์ดํ•ด๊ฐ€ ํŽธํ•˜์‹ค๊ฒ๋‹ˆ๋‹ค.

(๋ชจ๋†€๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด์™€ ์™œ ๋งˆ์ดํฌ์„œ๋น„์Šค๋กœ ์ด์ „์„ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€๋Š” ์ด์ „ ๊ธ€์„ ๋ณด๋ฉด ์ •๋ฆฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.)

2025.04.26 - [๊ฐœ๋ฐœ/Google Cloud] - ๐Ÿงฑ GKE๋กœ Monolith์—์„œ Microservices ์ด์ „ - ๊ฐœ๋…์žก๊ธฐ

๐Ÿท ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์—ฌ๊ธฐ์„œ๋Š” https://github.com/googlecodelabs/monolith-to-microservices ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋ฏธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ชจ๋†€๋ฆฌ์Šค ์ฝ”๋“œ๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์„ ๋ฏธ๋ฆฌ ํ•ด๋‘์—ˆ๋‹ค๋Š” ์ „์ œ๋กœ ์‹œ์ž‘์ด ๋ฉ๋‹ˆ๋‹ค. (Microservices๋กœ ์ด์ „ํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„๋œ ํ”„๋กœ์ ํŠธ๋ผ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.)

monolith-to-microservices/
โ”œโ”€โ”€ monolith/          # ๋ชจ๋†€๋ฆฌ์Šค ๋ฒ„์ „์˜ ์ฝ”๋“œ
โ””โ”€โ”€ microservices/
    โ””โ”€โ”€ src/
        โ”œโ”€โ”€ orders/    # ์ด๋ฏธ ๋ถ„๋ฆฌ๋œ Orders ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ฝ”๋“œ
        โ”œโ”€โ”€ products/  # ์ด๋ฏธ ๋ถ„๋ฆฌ๋œ Products ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ฝ”๋“œ
        โ””โ”€โ”€ frontend/  # ์ด๋ฏธ ๋ถ„๋ฆฌ๋œ Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ฝ”๋“œ

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

  • ํด๋Ÿฌ์Šคํ„ฐ ์œ„์น˜: europe-west1
  • ๋ฆฌ์†Œ์Šค ๋ช…๋ช… ๊ทœ์น™: team-resource(์˜ˆ: fancystore-orderservice1)
  • ๋จธ์‹  ํƒ€์ž…: e2-medium(๋น„์šฉ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด)

์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋Š” ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์„ธ ๊ฐ€์ง€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.(Challenge Lab์˜ ์š”๊ตฌ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.)

  1. Orders ์„œ๋น„์Šค - ๊ณ ๊ฐ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ๋ฐ ์ด๋ ฅ ์ฒ˜๋ฆฌ
  2. Products ์„œ๋น„์Šค - ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์ •๋ณด ๊ด€๋ฆฌ
  3. Frontend ์„œ๋น„์Šค - ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

๐Ÿท ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๋จผ์ € ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# ํ”„๋กœ์ ํŠธ ID ์„ค์ •
gcloud config set project qwiklabs-gcp-00-09f9d6988b61

# ์ €์žฅ์†Œ ๋ณต์ œ
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd monolith-to-microservices

# ์ตœ์‹  Node.js LTS ๋ฒ„์ „ ์„ค์น˜
nvm install --lts

# Cloud Build API ํ™œ์„ฑํ™”
gcloud services enable cloudbuild.googleapis.com

์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์˜ฌ๋ฐ”๋ฅธ Node.js ๋ฒ„์ „์„ ํ™•๋ณดํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ Cloud Build API๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿท๋ชจ๋†€๋ฆฌ์Šค ์ปจํ…Œ์ด๋„ˆํ™”

๋ถ„ํ•ดํ•˜๊ธฐ ์ „์— ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์‹ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ๋จผ์ € ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ??

๋‹น์—ฐํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๊ฐ‘์ž๊ธฐ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜์ฃ .

๊ทธ๋ž˜์„œ ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์ฝ”๋“œ ๋ณ€๊ฒฝ์—†์ด ๊ทธ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ์‹œ์ผœ๋‘๊ณ , ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธํ›„ ํ•˜๋‚˜์”ฉ ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ŠคํŠธ๋žญ๊ธ€๋Ÿฌ ํŒจํ„ด(Strangler Pattern)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์ ์ง„์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์„ ๋งํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๋จผ์ € ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๋ฉด ์ „ํ™˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ์‹œ์Šคํ…œ์„ ๊ณ„์† ์šด์˜ํ•˜๋ฉด์„œ, ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ฆฌ๋””๋ ‰์…˜(redirection)ํ•˜๊ณ , ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๋‹ค ์ด๋™์ด ๋˜์—ˆ์œผ๋ฉด ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํžˆ ๊ทธ ๊ณผ์ •์„ ์ถ•์•ฝํ•ด์„œ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ช‡๋‹ฌ์ด ๊ฑธ๋ฆด์ˆ˜๋„ ์žˆ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

# ๋ชจ๋†€๋ฆฌ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd monolith

# ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
gcloud builds submit \
  --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:1.0.0

์ด ๋ช…๋ น์€ ๋ชจ๋†€๋ฆฌ์Šค ๋””๋ ‰ํ† ๋ฆฌ์˜ Dockerfile์—์„œ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  fancy-monolith-203:1.0.0 ํƒœ๊ทธ๋กœ Google์˜ Artifact Registry์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

Cloud Build๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ์••์ถ•ํ•˜์—ฌ Cloud Storage ๋ฒ„ํ‚ท์œผ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

--tag ํ”Œ๋ž˜๊ทธ๋Š” Docker ์ด๋ฏธ์ง€์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„(gcr.io)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๐ŸทKubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•  GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# Containers API ํ™œ์„ฑํ™”
gcloud services enable container.googleapis.com

# 3๋…ธ๋“œ GKE ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ
gcloud container clusters create fancy-cluster-685 \
  --zone=europe-west1-b \
  --num-nodes=3 \
  --machine-type=e2-medium

# ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ
gcloud container clusters get-credentials fancy-cluster-685 --zone=europe-west1-b

์ด๊ฒƒ์€ ์ง€์ •๋œ ์˜์—ญ์— 3๊ฐœ์˜ e2-medium ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ fancy-cluster-685๋ผ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ช…๋ น์€ kubectl์ด ์ด ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ต์‹ ํ•˜๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

gcloud compute instances list
ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ์„ ํ™•์ธ
ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ์„ ํ™•์ธ
fancy-cluster ํด๋Ÿฌ์Šคํ„ฐ
fancy-cluster ํด๋Ÿฌ์Šคํ„ฐ

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํด๋Ÿฌ์ŠคํŠธ ์ด๋ฆ„์€ "fancy-cluster-685" ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ถœ๋ ฅ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

๐Ÿท Kubernetes์— ๋ชจ๋†€๋ฆฌ์Šค ๋ฐฐํฌ

๋ชจ๋†€๋ฆฌ์‹ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# Kubernetes ๋ฐฐํฌ ์ƒ์„ฑ
kubectl create deployment fancy-monolith-203 \
  --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:1.0.0

# LoadBalancer ์„œ๋น„์Šค๋กœ ๋ฐฐํฌ ๋…ธ์ถœ
kubectl expose deployment fancy-monolith-203 \
  --type=LoadBalancer \
  --port=80 \
  --target-port=8080

# ์™ธ๋ถ€ IP๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
kubectl get service fancy-monolith-203

์ด๊ฒƒ์€ ๋ชจ๋†€๋ฆฌ์Šค ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ๋ฐฐํฌ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ LoadBalancer ์œ ํ˜•์˜ ์„œ๋น„์Šค๋กœ ๋…ธ์ถœ์‹œํ‚ต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋Š” ์™ธ๋ถ€ ํฌํŠธ 80์„ ๋‚ด๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌํŠธ 8080์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ LoadBalancer ์œ ํ˜•์€ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

kubectl get service fancy-monolith-203
kubectl get service fancy-monolith-203

์™ธ๋ถ€ ์•„์ดํ”ผ๊ฐ€ ๋ถ€์—ฌ๋˜๋Š”๋ฐ๋Š” 1~2๋ถ„์ •๋„ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. <pending> ์ด ๋‚˜์˜ค๋ฉด ์กฐ๊ธˆ์žˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์™ธ๋ถ€ ์•„์ดํ”ผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ •์ƒ์ ์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆํ™” ๋œ ๋ชจ๋†€๋ฆฌ์Šค ์„œ๋น„์Šค
์ปจํ…Œ์ด๋„ˆํ™” ๋œ ๋ชจ๋†€๋ฆฌ์Šค ์„œ๋น„์Šค

๐Ÿท ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•˜๊ธฐ

์ •์ƒ์ ์œผ๋กœ ๋ชจ๋†€๋ฆฌ์Šค๋กœ ์„œ๋น„์Šค ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•ด ๋ด…์‹œ๋‹ค.

Orders, Products ๋ฐ Frontend ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โœ…Orders ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค

๋จผ์ € Orders ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๊ณ  ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ๋“ค์„ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

# Orders ์„œ๋น„์Šค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd ~/monolith-to-microservices/microservices/src/orders

# ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
gcloud builds submit \
  --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-orders-447:1.0.0 .

# Kubernetes์— ๋ฐฐํฌ
kubectl create deployment fancy-orders-447 \
  --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-orders-447:1.0.0

# ์„œ๋น„์Šค ๋…ธ์ถœ
kubectl expose deployment fancy-orders-447 \
  --type=LoadBalancer \
  --port=80 \
  --target-port=8081

# ์™ธ๋ถ€ IP ๊ฐ€์ ธ์˜ค๊ธฐ
kubectl get service fancy-orders-447
๐Ÿงฑ GKE๋กœ Monolith์—์„œ Microservices ์ด์ „ - ์‹ค์ „ํŽธ ์ด๋ฏธ์ง€ 5

Orders ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํฌํŠธ 8081์—์„œ ์ง€์ • ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•ด ๋‘์„ธ์š”.

์ด๋Š” ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ• ํ•  ๋•Œ ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฒด ํฌํŠธ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์ฝ”๋“œ๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†์‰ฝ๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌ ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ด์ œ ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค์— ์ ์šฉํ•ด ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „ํ™˜์ด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ Orders ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ

์ด์ œ ๋ชจ๋†€๋ฆฌ์Šค๊ฐ€ ์ƒˆ๋กœ์šด Orders ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

# ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘
cd ~/monolith-to-microservices/react-app
nano .env.monolith

# REACT_APP_ORDERS_URL=/service/orders
# ์ด๊ฒƒ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
# REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders

# ๋ชจ๋†€๋ฆฌ์Šค ํ”„๋ก ํŠธ์—”๋“œ ๋‹ค์‹œ ๋นŒ๋“œ
npm run build:monolith

# ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ๋นŒ๋“œ ๋ฐ ์žฌ๋ฐฐํฌ
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:2.0.0 .
kubectl set image deployment/fancy-monolith-203 fancy-monolith-203=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:2.0.0

๋ชจ๋†€๋ฆฌ์Šค์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ์ด ๋‹จ๊ณ„๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋Œ€์‹ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด์ œ ๋ณ„๋„์˜ ์„œ๋น„์Šค์— HTTP๋กœ ์š”์ฒญ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ์ œ์ผ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ด๋‹ˆ, ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ…Products ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค

์ด์ œ Products ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# Products ์„œ๋น„์Šค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd ~/monolith-to-microservices/microservices/src/products

# ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
gcloud builds submit \
  --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-products-894:1.0.0 .

# Kubernetes์— ๋ฐฐํฌ
kubectl create deployment fancy-products-894 \
  --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-products-894:1.0.0

# ์„œ๋น„์Šค ๋…ธ์ถœ
kubectl expose deployment fancy-products-894 \
  --type=LoadBalancer \
  --port=80 \
  --target-port=8082

# ์™ธ๋ถ€ IP ๊ฐ€์ ธ์˜ค๊ธฐ
kubectl get service fancy-products-894

Products ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํฌํŠธ 8082์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€์šฉ ๊ฐœ๋ณ„ ํฌํŠธ๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Products MicoreService ๋ฐฐํฌ
Products MicoreService ๋ฐฐํฌ

๋ชจ๋†€๋ฆฌ์Šค ๋‹ค์‹œ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ

์ด์ œ Products๋„ ๋ถ„๋ฆฌ๋˜์—ˆ์œผ๋‹ˆ, ์ด์ „์ฒ˜๋Ÿผ ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ๊ฒ ์ฃ ?

# ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘
cd ~/monolith-to-microservices/react-app
nano .env.monolith

# ๋‘ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋„๋ก ๋ณ€๊ฒฝ:
# REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders
# REACT_APP_PRODUCTS_URL=http://<PRODUCTS_IP_ADDRESS>/api/products

# ๋ชจ๋†€๋ฆฌ์Šค ํ”„๋ก ํŠธ์—”๋“œ ๋‹ค์‹œ ๋นŒ๋“œ
npm run build:monolith

# ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ๋นŒ๋“œ ๋ฐ ์žฌ๋ฐฐํฌ
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:3.0.0 .
kubectl set image deployment/fancy-monolith-203 fancy-monolith-203=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-monolith-203:3.0.0
nano .env.monolith
nano .env.monolith

์ด๋ ‡๊ฒŒ Orders, Products๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ frontend๋งŒ ๋ถ„๋ฆฌ ์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โœ…Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐฐํฌ

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌ์„ฑ ์ค€๋น„
cd ~/monolith-to-microservices/react-app
cp .env.monolith .env
npm run build

# Frontend ์„œ๋น„์Šค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd ~/monolith-to-microservices/microservices/src/frontend

# ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
gcloud builds submit \
  --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-frontend-962:1.0.0 .

# Kubernetes์— ๋ฐฐํฌ
kubectl create deployment fancy-frontend-962 \
  --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/fancy-frontend-962:1.0.0

# ์„œ๋น„์Šค ๋…ธ์ถœ
kubectl expose deployment fancy-frontend-962 \
  --type=LoadBalancer \
  --port=80 \
  --target-port=8080

# ์™ธ๋ถ€ IP ๊ฐ€์ ธ์˜ค๊ธฐ
kubectl get service fancy-frontend-962
Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐฐํฌ
Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐฐํฌ

์ด๋ ‡๊ฒŒ Orders ๋ฐ Products ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ์ „์šฉ Frontend ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋„ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ํ™•์ธ์„ ํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ณผ์ˆ˜ ์žˆ๊ฒŒ ๋ ๊ฒ๋‹ˆ๋‹ค.

microservice๋กœ ๋ถ„๋ฆฐ๋œ products
microservice๋กœ ๋ถ„๋ฆฐ๋œ products
microservice๋กœ ๋ถ„๋ฆฐ๋œ orders
microservice๋กœ ๋ถ„๋ฆฐ๋œ orders

study jam์˜ challenge lab์—์„œ๋Š” json ํƒ€์ž…์œผ๋กœ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ณผ์ˆ˜ ์žˆ์„๊ฒ๋‹ˆ๋‹ค..

โœ… ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค ํ๊ธฐ

์ด์ œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

kubectl delete deployment fancy-monolith-203 
kubectl delete service fancy-monolith-203

์‹ค ์ž‘์—…์‹œ์—๋Š” ๋ชจ๋†€๋ฆฌ์Šค์—์„œ ์ƒˆ๋กœ์šด ํ”„๋ก ํŠธ์—”๋“œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ DNS ๋ณ€๊ฒฝ ๋“ฑ์„ ํฌํ•จํ•œ ์‹ ์ค‘ํ•œ ๊ณ„ํš์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ œ๋Œ€๋กœ ์ž‘์—…์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ™•์ธ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl get services
๋ถ„๋ฆฌ๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™•์ธํ•˜๊ธฐ
๋ถ„๋ฆฌ๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™•์ธํ•˜๊ธฐ

์ด์™€ ๋น„์Šทํ•œ ํ™”๋ฉด์„ ๋ณผ์ˆ˜ ์žˆ์„๊ฒ๋‹ˆ๋‹ค. (์ด ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์—์„œ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ์€ ๊ฒƒ์œผ๋กœ ์œ„ ์•„์ดํ”ผ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”.)

๐Ÿท ๊ฒฐ๋ก  ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

๊ฐ„๋‹จํžˆ ๋ชจ๋†€๋ฆฌ์Šค๋กœ ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ๋ฅผ ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์—ฌ์„œ ๋ณ„๊ฑฐ ์•„๋‹Œ๊ฑฐ ๊ฐ™์ง€๋งŒ, ์‹ค ์„œ๋น„์Šค์— ์ ์šฉ์‹œ์—๋Š” ๋งŽ์ด ๋ณต์žกํ•ด ์ง‘๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ๋‚˜๋งˆ ์ฃผ์˜์‚ฌํ•ญ์„ ์ฒดํฌํ•ด ๋ณด๋ฉด..

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

Google Kubernetes Engine(GKE)์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋†€๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ฆฌ ์‹œํ‚ค๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€๋Š” ์•Š์ง€๋งŒ.. ๊ทธ๋Ÿผ์—๋„ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋ฉด ์ข‹์€ ์ ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํ™•์žฅ์„ฑ: ๊ฐ ์„œ๋น„์Šค๋Š” ๊ฐœ๋ณ„์ ์ธ ์ˆ˜์š”์— ๋งž์ถฐ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ณต์›๋ ฅ: ํ•œ ์„œ๋น„์Šค์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  3. ๊ฐœ๋ฐœ ๋ฏผ์ฒฉ์„ฑ: ๊ฐœ๋ฐœ ํŒ€์€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ์ž์˜ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.
  4. ๊ธฐ์ˆ ์  ์œ ์—ฐ์„ฑ: ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ์š”๊ตฌ์‚ฌํ•ญ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง์ ‘ google cloud์—์„œ ํ…Œ์ŠคํŠธ๋‚˜ ์ง์ ‘ํ•ด ๋ณด์‹œ๋ ค๋ฉด https://www.cloudskillsboost.google/course_templates/638 ์—์„œ ์‹ค์Šตํ•ด ๋ณด์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ† ํฐ์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋งค๋…„ ๊ตฌ๊ธ€์—์„œ ํ–‰์‚ฌํ•˜๋Š” study jam์„ ํ†ตํ•ด์„œ๋„ ์ง์ ‘ ์‹ค์Šตํ•ด ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐ„๋‹จํžˆ ์ ์œผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋ฌด์ง€ ๊ธธ์–ด์กŒ๋„ค์š”.

๋ฐ˜์‘์ด ์ข‹์œผ๋ฉด ๋‹ค๋ฅธ google cloud ์„œ๋น„์Šค๋„ ๊ธฐ์ˆ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ์ข‹์€ ํ•˜๋ฃจ ๋ณด๋‚ด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋.


<i>์ด ๊ธ€์€ ๋ธ”๋กœ๊ทธ ์ด์ „์œผ๋กœ ํ‹ฐ์Šคํ† ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜จ ๊ธ€์ž…๋‹ˆ๋‹ค.</i>

๋Œ“๊ธ€

์ƒ๊ฐ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

0

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ์ฃผ์ œ์˜ ๊ธ€