
๐งฑ GKE๋ก Monolith์์ Microservices ์ด์ - ๊ฐ๋ ์ก๊ธฐ
์ฒ์ ์น์ฑ์ ๋ง๋ค ๋ ๋๋ถ๋ถ์ ํ๋์ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ชจ๋๋ฆฌ์ค(Monolith) ๊ตฌ์กฐ์ ๋๋ค.์ฒ์์ ์ฝ๊ณ ๋น ๋ฅด์ง๋ง, ์๊ฐ์ด ์ง๋๊ณ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋๋ค.๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ๋ง์ดํฌ๋ก์๋น์ค(Microservices)์ GKE(Google Kubernetes Engine)์ ...
์ฒ์ ์น์ฑ์ ๋ง๋ค ๋ ๋๋ถ๋ถ์ ํ๋์ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ชจ๋๋ฆฌ์ค(Monolith) ๊ตฌ์กฐ์ ๋๋ค.
์ฒ์์ ์ฝ๊ณ ๋น ๋ฅด์ง๋ง, ์๊ฐ์ด ์ง๋๊ณ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋๋ค.
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ๋ง์ดํฌ๋ก์๋น์ค(Microservices)์ GKE(Google Kubernetes Engine)์ ๋๋ค.
์ด ๊ธ์์๋ ์ด ๊ฐ๋ ๋ค์ ์ด๋ณด์ ๋๋์ด์์ ์ค๋ช ํ๊ณ , ๊ฐ๋จํ ์์ ๋ก GKE๋ฅผ ์ด์ฉํ ์ ํ ๊ณผ์ ์ ๋ณด์ฌ๋๋ฆด๊ฒ์.
๐ท Monolith
๋ชจ๋๋ฆฌ์ค ๊ตฌ์กฐ๋ ๋ชจ๋ ๊ธฐ๋ฅ(ํ๋ก ํธ, ๋ฐฑ์๋, DB ๋ฑ)์ด ํ ์๋ฒ, ํ๋์ ์ฝ๋๋ฒ ์ด์ค์ ๋ชจ์ฌ ์๋ ๊ตฌ์กฐ์ ๋๋ค.
์ฆ, ๋จ์ผ ํ๋ ์์ํฌ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ ํํ๋ก ๋ณด๋ฉด ๋ฉ๋๋ค.
- ๋ฐฑ์๋: Spring Boot(Java), Django/Flask(Python), Express/Nest.js(Node.js), Rails(Ruby) ๋ฑ์ ๋จ์ผ ํ๋ ์์ํฌ
- ํ๋ก ํธ์๋: ๊ฐ์ ํ๋ก์ ํธ ๋ด์ ํจ๊ป ํฌํจ๋๊ฑฐ๋ ๋ณ๋๋ก ๋ถ๋ฆฌ๋์ด๋ ๋จ์ผ ์ฑ์ผ๋ก ๋ฐฐํฌ
Monolith Architecture
โโโ src/
โ โโโ controllers/ (๋๋ routes/)
โ โโโ models/
โ โโโ services/
โ โโโ views/ (๋๋ templates/)
โ โโโ utils/
โ โโโ app.js (๋๋ main ํ์ผ)
โโโ public/ (๋๋ static/)
โ โโโ css/
โ โโโ js/
โ โโโ images/
โโโ package.json (๋๋ ํด๋น ์ธ์ด์ ์ข
์์ฑ ๊ด๋ฆฌ ํ์ผ)์ฒ์์๋ ๊ฐ๋จํ์ง๋ง, ๊ธฐ๋ฅ์ด ๋ง์์ง์๋ก ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง๋๋ค.
๐ท Microservices
๋ง์ดํฌ๋ก์๋น์ค๋ ๊ธฐ๋ฅ์ ์์ ๋จ์์ ์๋น์ค๋ก ๋๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ๋ฐฐํฌ, ์ค์ผ์ผ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ๋ก ํธ์๋ ์๋น์ค โ ์ฌ์ฉ์ ํ๋ฉด ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์๋น์ค โ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
- ์ํ ์๋น์ค โ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
Microservices Architecture
__ Frontend Service
|__ ์ฌ์ฉ์ ํ๋ฉด UI ์ฒ๋ฆฌ
|__ API Gateway ๋๋ BFF์ ํต์
__ Order Service
|__ ์ฃผ๋ฌธ ์์ฑ, ์กฐํ, ์ทจ์
|__ ์ฃผ๋ฌธ ์ํ ๊ด๋ฆฌ
|__ ๋ฉ์์ง ํ ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ
__ Product Service
|__ ์ํ ๋ชฉ๋ก, ์์ธ ์ ๋ณด ์ ๊ณต
|__ ์ํ ๋ฑ๋ก/์์ /์ญ์
|__ ์ฌ๊ณ ๊ด๋ฆฌ์ด์ฒ๋ผ ๋ง์ดํฌ๋ก์๋น์คํ ์๋น์ค๋ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ์ ์ฒด ์๋น์ค๊ฐ ๋ฉ์ถ์ง ์์ต๋๋ค.
๊ทธ๋ผ ๋ง์ด๋ค ์ฌ์ฉํ๋ API ์์ ๋น์ทํด ๋ณด์ด๋๋ฐ.. ๋ง์ต๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค๋ ๋ณดํต API๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ํต์ ์ ํฉ๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์์ ๊ฐ๋ (์ค๊ณ ์ฒ ํ?)์ผ๋ก ๋ณด๋ฉด ๋๋ฉฐ, ๊ทธ ํ์์ API๊ฐ ์๋ค๋ฉด ๋ณด์๋ฉด ๋ฉ๋๋ค.
(๋ฐ๋์ ๋ง์ดํฌ๋ก ์๋น์ค์ API๊ฐ ํ์ฌ๋์ด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.)
๐ท Google Kubernetes Engine (GKE)
GKE๋ Google Cloud์ ๊ด๋ฆฌํ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ ๋๋ค. ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ผ์คํธ๋ ์ด์ ์ ๋์์ฃผ๋ฉฐ, ๋ฐฐํฌ, ํ์ฅ ๋ฐ ๊ด๋ฆฌ์ ๋ณต์กํ ๋ถ๋ถ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด ๋ถ๋ถ์ ์์ผ๋ก ์ข ๋ ๋ค๋ฃจ์ด ๋ณด๋ฉด, ๊ฐ์ด ์กํ๊ฑฐ๋ผ ์๊ฐ์ด ๋ฉ๋๋ค.
๐ท Migration ์ ํ๋ ์ด์
๊ทธ๋ผ ์ ์ ์๋ํ๋ Monolith๋ฅผ Microservices ๋ก ์ด์ ์ ํ๋๋๋ ๊ทผ๋ณธ์ ์ธ ์ง๋ฌธ์ ๋์ง ์ ๋ฐ์ ์์ต๋๋ค.
โ ๋ชจ๋๋ฆฌ์ค์ ๋ฌธ์ ์ :
- ๋นํจ์จ์ ์ธ ํ์ฅ (ํน์ ๊ธฐ๋ฅ๋ง ํธ๋ํฝ์ด ๋ง์๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅํด์ผ ํด์ ๋ฆฌ์์ค ๋ญ๋น)
- ๊ธด ๋ฐฐํฌ ์ฃผ๊ธฐ์ ๋ค์ดํ์ (์์ ์์ ๋ ์ ์ฒด ์์คํ ์ ์ฌ๋ฐฐํฌํด์ผ ํด์ ์๊ฐ ์์)
- ๋จ์ผ ์ฅ์ ์ง์ (ํ ๋ถ๋ถ์ ์ค๋ฅ๊ฐ ์ ์ฒด ์์คํ ์ ๋ค์ด์ํฌ ์ ์์)
- ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์๋ก ์ดํดํ๊ธฐ ์ด๋ ค์ (์ฝ๋๋ฒ ์ด์ค๊ฐ ์ปค์ง๋ฉด์ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ๋ถ๋ถ์ ํ์ ํ๊ธฐ ์ด๋ ค์์ง)
- ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์ ์คํ์ด ๊ณ ์ ๋จ (์๋ก์ด ๊ธฐ์ ๋์ ์ ์ ์ฒด ์์คํ ์ ์ํฅ์ ์ค)
โ ๋ง์ดํฌ๋ก์๋น์ค์ ์ด์ :
- ์์์ ๋ฐ๋ผ ์๋น์ค๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ (์ธ๊ธฐ ์๋ ๊ฒฐ์ ์๋น์ค๋ง ์ถ๊ฐ ์๋ฒ๋ก ํ์ฅ ๊ฐ๋ฅ)
- ์ ์ฒด ์์คํ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ ๋ฐ์ดํธ ๋ฐฐํฌ (์ฌ์ฉ์ ์๋น์ค๋ง ์ ๋ฐ์ดํธํด๋ ๋ค๋ฅธ ๊ธฐ๋ฅ ์ ์ ์๋)
- ๋ ๋์ ์ฅ์ ๊ฒฉ๋ฆฌ (์ํ ์๋น์ค๊ฐ ๋ค์ด๋์ด๋ ์ฅ๋ฐ๊ตฌ๋์ ๊ฒฐ์ ๋ ๊ณ์ ์๋)
- ๋ช ํํ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ง ํ์ ๋ ๋ฆฝ์ ์ธ ์์ (์ํํ, ๊ฒฐ์ ํ์ด ์๋ก ๊ฐ์ญ ์์ด ๊ฐ๋ฐ ๊ฐ๋ฅ)
- ๋ค์ํ ์๋น์ค์ ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ ์์ (๋ฐ์ดํฐ ์ฒ๋ฆฌ์ Python, ์ค์๊ฐ ๊ธฐ๋ฅ์ Node.js ๋ฑ ์ต์ ๊ธฐ์ ์ ํ)
์ด ๋ด์ฉ์ ๋ณด๋ฉด ์ microservices๋ก ์ ํ์ ํด์ผ ํ๋์ง์ ๋ํ ์ด์ ๊ฐ ๋ช ํํด ์ง๊ฒ๋๋ค.
๐ท๊ตฌํ ๊ณผ์
โ ์๋น์ค ๊ฒฝ๊ณ ๊ตฌ๋ถํ๊ธฐ
๋ชจ๋๋ฆฌ์ค๋ฅผ ๋ถ์ํ๊ณ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๊ฐ ๋ ์ ์๋ ๋ ผ๋ฆฌ์ ๊ตฌ์ฑ ์์๋ฅผ ์๋ณํด์ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง ๋ถ๋ถ์ ์ฐพ์์ ๊ตฌ๋ถํด ์ค์ผ ํฉ๋๋ค.
- ํน์ ๋น์ฆ๋์ค ๊ธฐ๋ฅ์ ์ ๊ณต
- ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์์กด์ฑ์ด ์ต์ํ๋จ
- ๋ ๋ฆฝ์ ์ผ๋ก ์์ ๊ฐ๋ฅ
โ ๊ฐ ์๋น์ค ์ปจํ ์ด๋ํํ๊ธฐ
# ํ๋ก ํธ์๋ (Frontend UI) ๋์ปค ๋น๋
docker build -t frontend-service:1.0 ./frontend
# ์ํ API (Products Service) ๋์ปค ๋น๋
docker build -t products-service:1.0 ./products
# ์ฃผ๋ฌธ API (Orders Service) ๋์ปค ๋น๋
docker build -t orders-service:1.0 ./ordersโ GKE๋ก ๋ฐฐํฌ
gcloud container clusters create shop-cluster --num-nodes=3GKE ํด๋ฌ์คํฐ ์์ฑํ๊ณ ๋๋ค ๊ฐ๊ฐ ์๋น์ค๋ฅผ ๋น๋ํ๋ฉด ๋ฉ๋๋ค.
Products Service
# Docker ์ด๋ฏธ์ง ๋น๋ + ํธ์
cd ~/monolith-to-microservices/microservices/src/products
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0 .
# GKE ๋ฐฐํฌ
kubectl create deployment products --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0
# ์ธ๋ถ ๋
ธ์ถ(์ธ๋ถ ์ ๊ทผ์ ํ์ฉ)
kubectl expose deployment products --type=LoadBalancer --port=80 --target-port=8082Orders Service
# Docker ์ด๋ฏธ์ง ๋น๋ + ํธ์
cd ~/monolith-to-microservices/microservices/src/orders
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0 .
# GKE ๋ฐฐํฌ
kubectl create deployment orders --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0
# ์ธ๋ถ ๋
ธ์ถ(์ธ๋ถ ์ ๊ทผ์ ํ์ฉ)
kubectl expose deployment orders --type=LoadBalancer --port=80 --target-port=8081Frontend Service
# Docker ์ด๋ฏธ์ง ๋น๋ + ํธ์
cd ~/monolith-to-microservices/microservices/src/frontend
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0 .
# GKE ๋ฐฐํฌ
kubectl create deployment frontend --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0
# ์ธ๋ถ ๋
ธ์ถ(์ธ๋ถ ์ ๊ทผ์ ํ์ฉ)
kubectl expose deployment frontend --type=LoadBalancer --port=80 --target-port=8080โ ์์ฝ
์๋น์ค
Docker Build
GKE ๋ฐฐํฌ
ํฌํธ ๋ ธ์ถ (LoadBalancer)
Products
8082 ํฌํธ๋ก ์ค์
products Deployment
์ธ๋ถ 80 โ ๋ด๋ถ 8082
Orders
8081 ํฌํธ๋ก ์ค์
orders Deployment
์ธ๋ถ 80 โ ๋ด๋ถ 8081
Frontend
8080 ํฌํธ๋ก ์ค์
frontend Deployment
์ธ๋ถ 80 โ ๋ด๋ถ 8080
๋ชจ๋ ์๋น์ค๋ LoadBalancer๋ฅผ ํตํด ์ธ๋ถ์ ๊ณต๊ฐ๋๋ฉด, ํ๋ก ํธ์๋์ ์ฐ๊ฒฐ์ด ๋๊ฒ ๋ฉ๋๋ค.
๐ฅ ๊ฒฐ๋ก
๊ฐ๋จํ ๋ช ๋ น์ด๋ก ๋ชจ๋๋ฆฌ์ค์์ ๋ง์ดํฌ๋ก ์๋น์ค๋ก ์ด์ ํ๋ ๋ง๋ณด๊ธฐ๋ฅผ ๋ณด์ฌ๋๋ ธ์ต๋๋ค.
๋ณด์๋ฉด ์์๊ฒ ์ง๋ง, ๊ฐ๋จํ ์์ ์ ์๋๋๋ค. ๊ทธ๋ผ์ผ๋ก ์ถฉ๋ถํ ๊ธฐํ๊ณผ ์ค๋น๋ฅผ ํด์ ์์ ์ ์งํํด์ผ ํฉ๋๋ค.
์ฐ์ ์ค์ํ์ง ์๋ ์๋น์ค๋ถํฐ ๋ถ๋ฆฌ๋ฅผ ์์ํด์ ๋ชจ๋ํฐ๋ง์ ๊ตฌํํ ๋ค ํ ์คํธ์ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๊ฒ์ด ์ข์๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์คํธ๋ญ๊ธ๋ฌ ํจํด(Strangler Pattern)์ด๋ผ๊ณ ํฉ๋๋ค.(๋ ๊ฑฐ์ ์์คํ ์ ์ ์ง์ ์ผ๋ก ์๋ก์ด ์์คํ ์ผ๋ก ๋์ฒดํ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต)
๋ค์์๋ google cloud๋ฅผ ํตํด ๊ฐ๋จํ ์ด ๊ณผ์ ์ ์ค์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ค๋๋ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์๊ธฐ๋ฅผ ๋ฐ๋ผ๊ฒ ์ต๋๋ค. ^^;
๋.
<i>์ด ๊ธ์ ๋ธ๋ก๊ทธ ์ด์ ์ผ๋ก ํฐ์คํ ๋ฆฌ์์ ๊ฐ์ ธ์จ ๊ธ์ ๋๋ค.</i>



๋๊ธ
์๊ฐ์ ๋จ๊ฒจ์ฃผ์ธ์
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธํด ์ฃผ์ธ์.
๋๊ธ ๋ก๊ทธ์ธ ์ค์ ์ด ์์ง ์ค๋น ์ค์ ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.