์ฒ์ ๋ฐฐ์ฐ๋ ์ฟ ๋ฒ๋คํฐ์ค, ์ค์ต์ผ๋ก ์ฝ๊ฒ!
ํด๋ผ์ฐ๋/์๋ฒ ํ๊ฒฝ์ ํ์ค
์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ์ด ๋ฐ๋ก์ก๊ธฐ
ํด๋ผ์ฐ๋/์๋ฒ ์ฑ ๊ฐ๋ฐ์ ์์, ์ฟ ๋ฒ๋คํฐ์ค
์ด ๊ฐ์์์๋ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์ค์ตํ๊ณ , ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ ๊ฐ๋
๊ณผ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ(MSA)์ ์ค๊ณ ์๋ฆฌ๋ฅผ ์ดํดํฉ๋๋ค.
ํด๋ผ์ฐ๋/์๋ฒ ํ๊ฒฝ์ ์์์ผ ํ ๋ด์ฉ๋ ๋ง๊ณ ๋ณต์กํฉ๋๋ค. ๋ํ, ๊ณ์ ๋ฐ๋๊ณ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์ด์ ์์ํ๋ ์ฌ๋๋ค์ด ์ ๊ทผํ๊ธฐ ์ฝ์ง ์์ต๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค(Kubernetes, k8s)๋ ํด๋ผ์ฐ๋/์๋ฒ ํ๊ฒฝ์ ํ์ค์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. AWS, Google, Microsoft ๋ฑ ์ฃผ์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ง์ํ๋ ๋งํผ, ์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ์ ์ํด ๊ฐ์ฅ ๋จผ์ ์์์ผ ํ ์ง์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ค์ต์ผ๋ก ๋ฐฐ์ฐ๋ ์ฟ ๋ฒ๋คํฐ์ค by Minikube
๋ฏธ๋ํ๋ธ(Minikube)๋ก PC ํ๊ฒฝ์ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฆ, ์ฐ๊ฒฐ๋ ์๋ฒ๊ฐ ์๋๋ผ๋ ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ์ ๊ณต๋ถํ ์ ์์ต๋๋ค.
์ด ๊ฐ์์์๋ ๋ฏธ๋ํ๋ธ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ฉฐ ๊ฐ๋จํ ์์ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ค์ตํฉ๋๋ค. ์ค์ต์ ํตํด ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ ๊ฐ๋
์ ์ดํดํ๊ณ , ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ์๋ก์์ ๊ธฐ์ด๋ฅผ ๋ค์ ธ๋ด
์๋ค!
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ฒ์์ธ ๋น์ ์ ์ํ
๋ฐ๋ผ ์์ํ๋ ์ฟ ๋ฒ๋คํฐ์ค 101
๐ก ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฒ์ ์ ํ๋ ๋ถ๋ค์ ์ํด ๋จ๊ณ๋ณ๋ก ์ค๋ช
์ ์งํํฉ๋๋ค. ๋ฐ๋ผํ๋ฉด์ ๊ณต๋ถํ์๋ฉด ์ด๋ ต์ง ์๊ฒ ์ฟ ๋ฒ๋คํฐ์ค ๋ฐ ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ์ ์ตํ์ค ์ ์์ต๋๋ค.
์ถ์ฒ ํ์ต์ โ
- ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์๊ณ ์ถ์ ๋ถ
- ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ์ ๋ํด ๋ฐฐ์ฐ๊ณ ์ถ์ ๋ถ
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ(MSA)์ ๊ด์ฌ์๋ ๋ถ
๋ค๋ฃจ๋ ๊ธฐ์ โ
- Minikube, Kubernetes
- Node.js, Docker, YAML, Redis DB
ํต์ฌ ํ์ต ๋ด์ฉ โ
- ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ ๊ฐ๋
์ ์ดํดํ๊ณ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- pod, deployment, replicaset, statefulste, autoscaler
- service, ingress, persistent volume
- ํด๋ผ์ฐ๋/์๋ฒ ๊ฐ๋ฐ ๊ณผ์ ์ ์ดํดํ๊ณ ์ฑ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
- Node.js ์น ์๋ฒ ๊ฐ๋ฐ - ๋น๋ - ๋ฐฐํฌ
- Visual Studio Code + Google Cloud Code
์์
์์์ ์๋ง์ ์ ๊ณตํฉ๋๋ค. ์ด๋ณด์๋ ์ฝ๊ฒ ๋ฐ๋ผ ์ค์ตํ ์ ์์ต๋๋ค.
์์ธ ์ปค๋ฆฌํ๋ผ ๐
์ปค๋ฆฌํ๋ผ ์ ์ฒด
ํ์ต ๋ชฉํ
์ด ๊ฐ์์์๋ 3๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๊ตฌ์ฑ๋ counter ์ฑ์ ๊ฐ๋ฐํ๊ณ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ ๊ฐ๋
๊ณผ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํฉ๋๋ค.
- ingress API gateway๋ ์์ฒญ์ ์๋น์ค๋ก ์ ๋ฌํฉ๋๋ค.
- web-inc ์๋น์ค๋ count ์ฆ๊ฐ ์์ฒญ(INC)์ ์ฒ๋ฆฌํฉ๋๋ค.
- web ์๋น์ค๋ count ๊ฐ์ ๋ํ ์์ฒญ(GET)์ ์ฒ๋ฆฌํฉ๋๋ค.
- redis ์๋น์ค๋ count ๊ฐ์ ์ ์ฅํฉ๋๋ค.
์น์
1
kubectl ๋ช
๋ น์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ๋ค๋ฃจ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค ๋ช
๋ น ๋๊ตฌ์ธ kubectl์ ์ด์ฉํด์ ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค์ตํฉ๋๋ค.
- ์น ์๋ฒ์ธ nginx ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด deployment๋ก ๋ฐฐํฌํฉ๋๋ค.
- service๋ก nginx pod๋ฅผ ๋
ธ์ถ์ํต๋๋ค.
- ingress API gateway๋ฅผ ์์ฑํด์ service๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
์น์
2
์ฟ ๋ฒ๋คํฐ์ค์์ Node.js ์ฑ ๊ฐ๋ฐํ๊ธฐ
๊ฐ๋จํ ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌํฉ๋๋ค. YAML ํ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ ์์๋ฅผ ๋ช
์ธํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํฉ๋๋ค.
- Node.js HTTP ๋ชจ๋๋ก ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
- ๊ฐ๋ฐ๋ ์น ์๋น์ค์ ๋ฐฐํฌ๋ฅผ ์ํด ๋์ปค(Docker) ์ด๋ฏธ์ง๋ฅผ ์์ฑ(๋น๋)ํฉ๋๋ค.
- ์์ฑํ ์ด๋ฏธ์ง๋ฅผ deployment๋ก ๋ฐฐํฌํฉ๋๋ค.
- service๋ก deployment๊ฐ ์์ฑํ pod๋ฅผ ๋
ธ์ถํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ ํด๋ผ์ฐ๋/์๋ฒ ์ฑ์ ๊ฐ๋ฐํ๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ก์ธ์ค๋ฅผ ์ค์ตํฉ๋๋ค. (๊ฐ๋ฐ - ์ด๋ฏธ์ง ๋น๋ - ๋ฐฐํฌ) ์น์
2์ ์์ค ์ฝ๋๋ github์์ ํ์ธํ ์ ์์ต๋๋ค.
์น์
3
Counter ์ฑ ๋ง๋ค๊ธฐ
count ๊ฐ์ persistent volume์ ํ์ผ๋ก ์ ์ฅํ๊ณ ์ด๋ฅผ ์๋น์คํ๋ counter ์ฑ์ ๊ฐ๋ฐํฉ๋๋ค.
Google Cloud Code๋ฅผ ์ฌ์ฉํด์ ๋น๋์ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค์ตํฉ๋๋ค. ์น์
3์ ์์ค ์ฝ๋๋ github์์ ํ์ธํ ์ ์์ต๋๋ค.
์น์
4
Redis(๋ ๋์ค) DB๋ก Counter ์ฑ ์์ฑํ๊ธฐ
count ์ฆ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ web-inc ์๋น์ค, count ๊ฐ์ ๋ฐํํ๋ web ์๋น์ค, Redis DB์ count ๊ฐ์ ์ ์ฅํ๋ redis ์๋น์ค๋ก ๊ตฌ์ฑ๋ ์ด ๊ฐ์ ์ต์ข
๊ตฌ์กฐ๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์ํ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋(stateless) web, web-inc ์๋น์ค๋ deployment๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ์ํ๋ฅผ ์ ์ฅํด์ผ ํ๋ redis ์๋น์ค๋ statefulset์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- Redis DB๋ฅผ master-slave ๊ตฌ์กฐ๋ก ์ค์ ํฉ๋๋ค.
- ์์ฒญ์ ๋ฐ๋ผ ์๋น์ค๋ฅผ ๋ผ์ฐํ
ํ๋ ingress API gateway๋ฅผ ์ค์ ํฉ๋๋ค.
- CPU ๋ถํ์ ๋ฐ๋ผ pod์ ๊ฐ์๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ๋๋ก autoscaler๋ ์ค์ ํฉ๋๋ค.
์น์
4์ ์์ค ์ฝ๋๋ github์์ ํ์ธํ ์ ์์ต๋๋ค.
Q&A ๐ญ
Q. ๊ฐ์๋ฅผ ๋ฃ๊ธฐ ์ , ์์์ผ ํ ๊ฒ์ด ์๋์?
- ์ด ๊ฐ์๋ ์ค์ต์ ํตํด ํ์ตํ๋ฏ๋ก ํน๋ณํ ์ ์ ์ง์์ด ํ์ํ ๊ฒ์ ์๋๋๋ค.
- ๋จ, ์ปดํจํฐ/๋คํธ์ํฌ ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ธฐ์ด ์ง์๊ณผ ๊ฒฝํ์ ํ์ํ ์ ์์ต๋๋ค.
- ์ฒ์ฒํ ๋ฐ๋ผ ํ์๋ฉด ๋ฉ๋๋ค.