๋ฐฐํฌ ํ๊ฒฝ ๋ณ์, ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ ์ข์๊น?
์๋
์ ์งํํ ํ๋ก์ ํธ์์ ์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ๋ฐ์ ์ฌ๋ด ๋ฐฐํฌ ํด์ ํ์ฉํด ๊ฐ๋ฐ, ์คํ
์ด์ง, ์ด์ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ฒ ๋์๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ๋ณ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ง ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค.
์ ์ด ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ์๊น?
๊ธฐ์กด ๋ฐฉ์์์๋ ์ฌ๋ด ๋ฐฐํฌ ํด์์ ์ง์ Docker์ ํ๊ฒฝ ๋ณ์๋ฅผ ์
๋ ฅํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ถ๋ฆฌํ ์๋ ์์ง๋ง, ๋ฌธ์ ๋ ์ฝ๋์์์ ์ด๋ค ํ๊ฒฝ์ด ์ ์ฉ๋๋์ง ํ์ธํ ์ ์๋ค๋ ์ ์ด์๋ค. ๋ฐฐํฌ ์ค์ ์ด ์ฌ๋ด ํด ๋ด๋ถ์์๋ง ๊ด๋ฆฌ๋๋ค ๋ณด๋, ์ฝ๋๋ง ๋ด์๋ ์ด๋ค ํ๊ฒฝ์์ ์คํ๋๋์ง ์๊ธฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ๋์์๋ ๋ช
ํํ ํ์ธํ ์ ์์ผ๋ฉด์๋, ๊ด๋ฆฌ๊ฐ ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ๋ก ํ๋ค. ์ฒ์์๋ Dockerfile์์ ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐฉ์์ ๊ณ ๋ คํ์ง๋ง, ์ด์ ํ๊ฒฝ์ด ์ปค์ง๋ฉด์ ์ด ๋ฐฉ์์ด ๊ณผ์ฐ ์ต์ ์ธ์ง ์๋ฌธ์ด ๋ค์๋ค. ์ฌ๋ฌ ๊ฐ์ง ์๋๋ฅผ ๊ฑฐ์น ๋์, ์ต์ข
์ ์ผ๋ก Helm์ values.yaml์ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ ํํ๊ฒ ๋์๋ค.
์ด ๊ธ์์๋ ์ฒ์ ์ฌ์ฉํ๋ Dockerfile ๊ธฐ๋ฐ ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ ๋ฐฉ์๊ณผ Helm์ ํ์ฉํ ๋ฐฉ์์ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก Helm์ ์ ํํ ์ด์ ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๊ธฐ์กด ๋ฐฉ์: Dockerfile์์ ARG์ ENV๋ฅผ ํ์ฉํ ํ๊ฒฝ ์ค์
์ฒ์์๋ Dockerfile์์ ARG์ ENV๋ฅผ ํ์ฉํด์ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํ๋ ๋ฐฉ์์ผ๋ก ์ค์ ์ ์งํํ๋ค. ๋น๋ ์์ ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ฐ์ ENVIRONMENT ๊ฐ์ ์ค์ ํ๊ณ , ์ด๋ฅผ ๋ฐํ์์์๋ ํ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ค.
๊ธฐ์กด ๋ฐฉ์์ Dockerfile ์์
FROM openjdk:11
# ๋น๋ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ (๊ธฐ๋ณธ๊ฐ: dev)
ARG SPRING_PROFILES_ACTIVE=dev
ENV SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE}
WORKDIR /app
COPY . .
CMD ["java", "-jar", "app.jar"]
๐ ์ด ์ฝ๋์ ์ญํ
์ด Dockerfile์ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ์ฉ๋๋ก ์์ฑ๋์๋ค.
- ARG ENVIRONMENT=development: ๋น๋ ์์ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ฐ์ ์ ์๋๋ก ์ค์ ํ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ development๋ก ์ค์ ๋์ด ์์
- ENV ENVIRONMENT=${ENVIRONMENT}: ARG๋ก ๋ฐ์ ๊ฐ์ ์ปจํ ์ด๋ ๋ด๋ถ ํ๊ฒฝ ๋ณ์๋ก ์ ์ฅํด ๋ฐํ์์์๋ ์ฌ์ฉํ ์ ์๋๋ก ์ค์
- WORKDIR /app: ์ปจํ ์ด๋ ๋ด๋ถ์์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ /app์ผ๋ก ์ค์
- COPY . .: ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ปจํ ์ด๋์ /app ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ
- CMD ["python", "app.py"]: ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ python app.py๋ฅผ ์คํํ๋๋ก ์ค์
์ด๋ ๊ฒ ํ๋ฉด Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ --build-arg ENVIRONMENT=production ๊ฐ์ ์ต์
์ด๋ ์ฌ๋ดํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ด์ ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ๋ถํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ development๋ก ์ค์ ํด ๋์๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ์ค์ ์์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋์ํ๋๋ก ํ๋ค.
์ด ๋ฐฉ์์ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ๋ถํ ์ ์๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋ช ๊ฐ์ง ๋ถํธํ ์ ์ด ์์๋ค.
๊ธฐ์กด ๋ฐฉ์์ ์ฅ์
- ๋น๋ ์์ ์ ํ๊ฒฝ์ ์ค์ ํ ์ ์์ด ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค.
- Dockerfile ๋ด์์ ์ง์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์์ด ๊ตฌ์กฐ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ด ํธ์ด๋ค.
- ๋น๋๋ ์ด๋ฏธ์ง ๋ด๋ถ์์ ํ๊ฒฝ์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ค์ ์์ด ์คํํ ์ ์๋ค.
๊ธฐ์กด ๋ฐฉ์์ ๋จ์
- ์ด๋ฏธ์ง๋ฅผ ํ๊ฒฝ๋ณ๋ก ๋ฐ๋ก ๋น๋ํด์ผ ํ๋ค. ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ๋ณต์กํด์ง๋ค.
- Dockerfile์ ์์ ํด์ผ ํ๊ฒฝ์ ๋ณ๊ฒฝํ ์ ์๋ค. ENVIRONMENT ๊ฐ์ ๋ฐ๊พธ๋ ค๋ฉด Dockerfile์ ์์ ํ๊ฑฐ๋, ๋น๋ ์๋ง๋ค --build-arg ์ต์ ์ ๋ช ์์ ์ผ๋ก ์ค์ผ ํ๋ค.
- Kubernetes ํ๊ฒฝ๊ณผ ์์ฐ์ค๋ฝ๊ฒ ๋ง์ง ์๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ConfigMap์ด๋ Secret์ ์ฌ์ฉํด ํ๊ฒฝ์ ์ ์ดํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ, ์ด ๋ฐฉ์์ Docker ๋น๋ ๊ณผ์ ์์ ์ด๋ฏธ ํ๊ฒฝ์ด ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ด์ ํ๊ฒฝ์์ ์ฝ๊ฒ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๋ค.
Dockerfile์ ํ์ฉํ ๋ฐฉ์๋ ์ถฉ๋ถํ ํ์ฉํ ์ ์์์ง๋ง, Kubernetes ํ๊ฒฝ์์ ์ด์ํ๊ธฐ์๋ ์ ์ฝ์ด ๋ง์๋ค. ํนํ ๋ฐฐํฌ ํ๊ฒฝ๋ง๋ค ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅด๊ฒ ๋น๋ํด์ผ ํ๋ ์ ์ด ๋นํจ์จ์ ์ผ๋ก ๋๊ปด์ก๋ค. ๊ทธ๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ฒ ๋์๋ค.
Helm values.yaml์ ํ์ฉํ ํ๊ฒฝ ์ค์
๊ธฐ์กด ๋ฐฉ์์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Dockerfile์์ ํ๊ฒฝ์ ์ง์ ์ค์ ํ๋ ๋์ , Helm์ values.yaml์ ํ์ฉํ์ฌ ํ๊ฒฝ์ ๊ตฌ๋ถํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
Helm์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ ๋ฐฐํฌ ์์ ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฐ๋ผ์ Docker ์ด๋ฏธ์ง๋ ํ๋๋ง ๋น๋ํ๊ณ , ํ๊ฒฝ์ ๋ง๋ ์ค์ ๊ฐ์ values.yaml์ ํตํด ์ ์ฉํ ์ ์๋ค.
์๋ก์ด ๋ฐฉ์์ ์ค์ ์์
๊ฐ๋ฐ ํ๊ฒฝ (values-dev.yaml)
env:
SPRING_PROFILES_ACTIVE: dev
์ด์ ํ๊ฒฝ (values-prod.yaml)
env:
SPRING_PROFILES_ACTIVE: production
Helm์ deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-backend
spec:
template:
spec:
containers:
- name: backend
image: my-backend-image
env:
- name: SPRING_PROFILES_ACTIVE
value: {{ .Values.env.SPRING_PROFILES_ACTIVE }}
์ด์ ๋ฐฐํฌํ ๋ helm install ๋ช ๋ น์ด์์ values.yaml์ ์ ํํ๋ ๊ฒ๋ง์ผ๋ก ํ๊ฒฝ์ ๋ค๋ฅด๊ฒ ์ ์ฉํ ์ ์๋ค.
# ๊ฐ๋ฐ ํ๊ฒฝ ๋ฐฐํฌ
helm install my-backend ./helm-chart -f values-dev.yaml
# ์ด์ ํ๊ฒฝ ๋ฐฐํฌ
helm install my-backend ./helm-chart -f values-prod.yaml
์ด ๋ฐฉ์์์๋ Docker ์ด๋ฏธ์ง๋ฅผ ํ๋๋ง ๋น๋ํ๋ฉด ๋๊ณ , ๋ฐฐํฌ ์์ ์์ values.yaml์ ํตํด ํ๊ฒฝ์ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ Kubernetes ํ๊ฒฝ์ ํจ์ฌ ์ ํฉํ ๊ตฌ์กฐ๋ค.
์๋ก์ด ๋ฐฉ์์ ์ฅ์
- Docker ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ๋ง ๋น๋ํ๋ฉด ๋๋ค. ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์๋ค.
- ํ๊ฒฝ ๋ณ์๋ฅผ Helm values.yaml์์ ๊ด๋ฆฌํ ์ ์๋ค. ํ๊ฒฝ๋ณ๋ก values.yaml์ ๋ฐ๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ๋ฉด ์ค์ ์ด ํจ์ฌ ๊น๋ํด์ง๋ค.
- Kubernetes ๋ค์ดํฐ๋ธํ ๋ฐฉ์์ด๋ค. Kubernetes์์๋ ConfigMap์ด๋ Secret์ ํ์ฉํด ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ, ์ด ๋ฐฉ์์ด ์ด์ ์ ํฉํ๋ค.
- ๋ฐฐํฌ ์์ ์์ ํ๊ฒฝ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ๊ธฐ์กด ๋ฐฉ์์์๋ Dockerfile์์ ๋น๋ ์ ํ๊ฒฝ์ ์ ํด์ผ ํ์ง๋ง, ์ด์ ๋ ๋ฐฐํฌํ ๋ ์ ํ๋ง ํ๋ฉด ๋๋ค.
์๋ก์ด ๋ฐฉ์์ ๋จ์
- Helm์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ ์ฉํ๊ธฐ ์ด๋ ต๋ค. ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ docker run ๊ฐ์ ๋ฐฉ์์ผ๋ก ์คํํ ๊ฒฝ์ฐ, ํ๊ฒฝ ์ค์ ์ ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
- ํ๊ฒฝ์ด Helm์ ์ข ์๋๋ค. Kubernetes๊ฐ ์๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ์ ์๋ค.
๋ด๊ฐ ์ ํํ ๊ฒฐ๋ก : Helm values.yaml์ด ๋ ํจ์จ์ ์ด์๋ค
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Dockerfile์์ ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์๊ณผ Helm์ ํ์ฉํ๋ ๋ฐฉ์์ ๋น๊ตํ ์ ์์๋ค. ์ฌ๋ฌ ๊ฐ์ง ์๋๋ฅผ ํด ๋ณธ ๊ฒฐ๊ณผ, Helm values.yaml์ ํ์ฉํ๋ ๋ฐฉ์์ด ๋ ์ ์ฐํ๊ณ , ๋ฐฐํฌ ํ๊ฒฝ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์์๋ค๋ ์ ์์ ์ ํฉํ๋ค๊ณ ํ๋จํ๋ค.
์ด ๋ฐฉ์์ ์ ์ฉํ ํ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ณผ์ ์ด ๋จ์ํด์ก๊ณ , ๋ฐฐํฌ ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์์ก๋ค. ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ํ๊ฒฝ๋ณ ์ค์ ์ ์ ์ฐํ๊ฒ ๋ฐ๊ฟ ์ ์์ด ์ ์ง๋ณด์ ์ธก๋ฉด์์๋ ์ฅ์ ์ด ๋ง์๋ค. ๋ํ, ์ฌ๋ด ๋ฐฐํฌ ํด์์ Docker์ ์ง์ ๊ฐ์ ๋ฃ์ด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์ฌ๋ผ์ง๊ณ , Helm์์ ์ฝ๋๋ก ๋ช ์ํ ์ ์์ด ์ค์ ์์ด ๊ด๋ฆฌํ ์ ์๊ฒ ๋์๋ค.
๋ฌผ๋ก ๋ชจ๋ ํ๋ก์ ํธ์ ๋ฌด์กฐ๊ฑด Helm์ด ์ ๋ต์ ์๋ ์๋ ์๋ค. ํ์ง๋ง ๋ด๊ฐ ๊ฒฝํํ ํ๋ก์ ํธ์์๋ ์ด ๋ฐฉ์์ด ๋ ์ ํฉํ๊ณ , ๋ ํจ์จ์ ์ด์๋ค. Kubernetes๋ฅผ ํ์ฉํ๋ ํ๊ฒฝ์ด๋ผ๋ฉด, Dockerfile์์ ARG์ ENV๋ฅผ ํ์ฉํ๋ ๊ฒ๋ณด๋ค Helm values.yaml์ ํตํด ํ๊ฒฝ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๋ ๋์ ์ ํ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
'Deploy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Sub Domain์ HTTPS ์ธ์ฆ๋ฐ๊ธฐ (0) | 2022.03.17 |
---|---|
AWS RDS๋ก DB ๊ตฌ์ถ(MySQL) (0) | 2022.03.17 |
Sub Domain, Redirection ์ ์ฉ (0) | 2022.03.17 |
Bitnami๋ก MAPM ๊ตฌํ ํ ํฌํธํฌ์๋ฉํ๊ธฐ (0) | 2022.03.17 |
EC2์ ubuntu, nginx, APM ์๋ฒ ๊ตฌ์ถ (0) | 2022.03.17 |