{"componentChunkName":"component---src-templates-blog-post-js","path":"/etc/Docker와-Kubernetes-실전-배포-가이드/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"f21b4690-6eaa-56a1-b32d-e1d172dc8336","excerpt":"Docker와 Kubernetes 실전 배포 가이드 Docker와 Kubernetes는 현대적인 애플리케이션 배포의 표준이 되었다. 이 글은 Docker 컨테이너화부터 Kubernetes 클러스터 배포까지 실전 예제와 함께 완벽하게 정리한다. 1. Docker 기초 1-…","html":"<h1 id=\"docker와-kubernetes-실전-배포-가이드\" style=\"position:relative;\"><a href=\"#docker%EC%99%80-kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"docker와 kubernetes 실전 배포 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Docker와 Kubernetes 실전 배포 가이드</h1>\n<p>Docker와 Kubernetes는 현대적인 애플리케이션 배포의 표준이 되었다. 이 글은 Docker 컨테이너화부터 Kubernetes 클러스터 배포까지 실전 예제와 함께 완벽하게 정리한다.</p>\n<h2 id=\"1-docker-기초\" style=\"position:relative;\"><a href=\"#1-docker-%EA%B8%B0%EC%B4%88\" aria-label=\"1 docker 기초 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Docker 기초</h2>\n<h3 id=\"1-1-dockerfile-작성\" style=\"position:relative;\"><a href=\"#1-1-dockerfile-%EC%9E%91%EC%84%B1\" aria-label=\"1 1 dockerfile 작성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-1. Dockerfile 작성</h3>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token comment\"># Node.js 애플리케이션 예시</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18-alpine <span class=\"token keyword\">AS</span> builder</span>\n\n<span class=\"token comment\"># 작업 디렉토리 설정</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n\n<span class=\"token comment\"># 의존성 파일 복사</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> package*.json ./</span>\n\n<span class=\"token comment\"># 의존성 설치</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> npm ci --only=production</span>\n\n<span class=\"token comment\"># 소스 코드 복사</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n\n<span class=\"token comment\"># 빌드</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> npm run build</span>\n\n<span class=\"token comment\"># 프로덕션 이미지</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18-alpine</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n\n<span class=\"token comment\"># 빌드된 파일만 복사</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /app/dist ./dist</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /app/node_modules ./node_modules</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /app/package*.json ./</span>\n\n<span class=\"token comment\"># 비root 사용자로 실행</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> addgroup -g 1001 -S nodejs &amp;&amp; <span class=\"token operator\">\\</span>\n    adduser -S nodejs -u 1001</span>\n<span class=\"token instruction\"><span class=\"token keyword\">USER</span> nodejs</span>\n\n<span class=\"token comment\"># 포트 노출</span>\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 3000</span>\n\n<span class=\"token comment\"># 애플리케이션 실행</span>\n<span class=\"token instruction\"><span class=\"token keyword\">CMD</span> [<span class=\"token string\">\"node\"</span>, <span class=\"token string\">\"dist/index.js\"</span>]</span></code></pre></div>\n<h3 id=\"1-2-멀티-스테이지-빌드\" style=\"position:relative;\"><a href=\"#1-2-%EB%A9%80%ED%8B%B0-%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C\" aria-label=\"1 2 멀티 스테이지 빌드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-2. 멀티 스테이지 빌드</h3>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token comment\"># Go 애플리케이션 예시</span>\n<span class=\"token comment\"># 빌드 스테이지</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> golang:1.21-alpine <span class=\"token keyword\">AS</span> builder</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /build</span>\n\n<span class=\"token comment\"># 의존성 다운로드</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> go.mod go.sum ./</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> go mod download</span>\n\n<span class=\"token comment\"># 소스 코드 복사 및 빌드</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .</span>\n\n<span class=\"token comment\"># 실행 스테이지</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> alpine:latest</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> apk --no-cache add ca-certificates</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /root/</span>\n\n<span class=\"token comment\"># 빌드된 바이너리만 복사</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /build/app .</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 8080</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">CMD</span> [<span class=\"token string\">\"./app\"</span>]</span></code></pre></div>\n<h3 id=\"1-3-python-애플리케이션\" style=\"position:relative;\"><a href=\"#1-3-python-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98\" aria-label=\"1 3 python 애플리케이션 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-3. Python 애플리케이션</h3>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token instruction\"><span class=\"token keyword\">FROM</span> python:3.11-slim</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n\n<span class=\"token comment\"># 시스템 의존성 설치</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> apt-get update &amp;&amp; apt-get install -y <span class=\"token operator\">\\</span>\n    gcc <span class=\"token operator\">\\</span>\n    &amp;&amp; rm -rf /var/lib/apt/lists/*</span>\n\n<span class=\"token comment\"># Python 의존성 설치</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> requirements.txt .</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> pip install --no-cache-dir -r requirements.txt</span>\n\n<span class=\"token comment\"># 애플리케이션 코드 복사</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n\n<span class=\"token comment\"># 환경 변수 설정</span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENV</span> PYTHONUNBUFFERED=1</span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENV</span> FLASK_APP=app.py</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 5000</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">CMD</span> [<span class=\"token string\">\"gunicorn\"</span>, <span class=\"token string\">\"--bind\"</span>, <span class=\"token string\">\"0.0.0.0:5000\"</span>, <span class=\"token string\">\"app:app\"</span>]</span></code></pre></div>\n<h3 id=\"1-4-docker-이미지-최적화\" style=\"position:relative;\"><a href=\"#1-4-docker-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"1 4 docker 이미지 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-4. Docker 이미지 최적화</h3>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token comment\"># .dockerignore 파일</span>\nnode_modules\nnpm-debug.log\n.git\n.gitignore\n.env\n*.md\n.DS_Store\n\n<span class=\"token comment\"># 최적화된 Dockerfile</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18-alpine <span class=\"token keyword\">AS</span> deps</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> package*.json ./</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> npm ci --only=production &amp;&amp; npm cache clean --force</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18-alpine <span class=\"token keyword\">AS</span> builder</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> package*.json ./</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> npm ci</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN</span> npm run build</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18-alpine</span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENV</span> NODE_ENV=production</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">deps</span></span> /app/node_modules ./node_modules</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /app/dist ./dist</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> <span class=\"token options\"><span class=\"token property\">--from</span><span class=\"token punctuation\">=</span><span class=\"token string\">builder</span></span> /app/package.json ./</span>\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 3000</span>\n<span class=\"token instruction\"><span class=\"token keyword\">CMD</span> [<span class=\"token string\">\"node\"</span>, <span class=\"token string\">\"dist/index.js\"</span>]</span></code></pre></div>\n<h2 id=\"2-docker-compose\" style=\"position:relative;\"><a href=\"#2-docker-compose\" aria-label=\"2 docker compose permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Docker Compose</h2>\n<h3 id=\"2-1-기본-compose-파일\" style=\"position:relative;\"><a href=\"#2-1-%EA%B8%B0%EB%B3%B8-compose-%ED%8C%8C%EC%9D%BC\" aria-label=\"2 1 기본 compose 파일 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-1. 기본 Compose 파일</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3.8'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">web</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span> .\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"3000:3000\"</span>\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> NODE_ENV=production\n      <span class=\"token punctuation\">-</span> DATABASE_URL=postgresql<span class=\"token punctuation\">:</span>//user<span class=\"token punctuation\">:</span>password@db<span class=\"token punctuation\">:</span>5432/mydb\n    <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> db\n      <span class=\"token punctuation\">-</span> redis\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> ./logs<span class=\"token punctuation\">:</span>/app/logs\n\n  <span class=\"token key atrule\">db</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> postgres<span class=\"token punctuation\">:</span>15<span class=\"token punctuation\">-</span>alpine\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> POSTGRES_USER=user\n      <span class=\"token punctuation\">-</span> POSTGRES_PASSWORD=password\n      <span class=\"token punctuation\">-</span> POSTGRES_DB=mydb\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> postgres_data<span class=\"token punctuation\">:</span>/var/lib/postgresql/data\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"5432:5432\"</span>\n\n  <span class=\"token key atrule\">redis</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> redis<span class=\"token punctuation\">:</span>7<span class=\"token punctuation\">-</span>alpine\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"6379:6379\"</span>\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> redis_data<span class=\"token punctuation\">:</span>/data\n\n<span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">postgres_data</span><span class=\"token punctuation\">:</span>\n  redis_data<span class=\"token punctuation\">:</span></code></pre></div>\n<h3 id=\"2-2-개발-환경-compose\" style=\"position:relative;\"><a href=\"#2-2-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-compose\" aria-label=\"2 2 개발 환경 compose permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-2. 개발 환경 Compose</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3.8'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">web</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">context</span><span class=\"token punctuation\">:</span> .\n      <span class=\"token key atrule\">dockerfile</span><span class=\"token punctuation\">:</span> Dockerfile.dev\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"3000:3000\"</span>\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> .<span class=\"token punctuation\">:</span>/app\n      <span class=\"token punctuation\">-</span> /app/node_modules\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> NODE_ENV=development\n    <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> npm run dev\n\n  <span class=\"token key atrule\">db</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> postgres<span class=\"token punctuation\">:</span>15<span class=\"token punctuation\">-</span>alpine\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> POSTGRES_USER=dev\n      <span class=\"token punctuation\">-</span> POSTGRES_PASSWORD=dev\n      <span class=\"token punctuation\">-</span> POSTGRES_DB=devdb\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"5432:5432\"</span>\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> ./init.sql<span class=\"token punctuation\">:</span>/docker<span class=\"token punctuation\">-</span>entrypoint<span class=\"token punctuation\">-</span>initdb.d/init.sql\n\n  <span class=\"token key atrule\">redis</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> redis<span class=\"token punctuation\">:</span>7<span class=\"token punctuation\">-</span>alpine\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"6379:6379\"</span></code></pre></div>\n<h3 id=\"2-3-프로덕션-compose\" style=\"position:relative;\"><a href=\"#2-3-%ED%94%84%EB%A1%9C%EB%8D%95%EC%85%98-compose\" aria-label=\"2 3 프로덕션 compose permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-3. 프로덕션 Compose</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3.8'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">web</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span> .\n    <span class=\"token key atrule\">restart</span><span class=\"token punctuation\">:</span> always\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"80:3000\"</span>\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> NODE_ENV=production\n    <span class=\"token key atrule\">deploy</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n      <span class=\"token key atrule\">resources</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">limits</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">cpus</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'0.5'</span>\n          <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> 512M\n        <span class=\"token key atrule\">reservations</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">cpus</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'0.25'</span>\n          <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> 256M\n    <span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> app<span class=\"token punctuation\">-</span>network\n\n  <span class=\"token key atrule\">nginx</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> nginx<span class=\"token punctuation\">:</span>alpine\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token string\">\"443:443\"</span>\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> ./nginx.conf<span class=\"token punctuation\">:</span>/etc/nginx/nginx.conf\n      <span class=\"token punctuation\">-</span> ./ssl<span class=\"token punctuation\">:</span>/etc/nginx/ssl\n    <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> web\n    <span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> app<span class=\"token punctuation\">-</span>network\n\n<span class=\"token key atrule\">networks</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">app-network</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">driver</span><span class=\"token punctuation\">:</span> bridge</code></pre></div>\n<h2 id=\"3-kubernetes-기초\" style=\"position:relative;\"><a href=\"#3-kubernetes-%EA%B8%B0%EC%B4%88\" aria-label=\"3 kubernetes 기초 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Kubernetes 기초</h2>\n<h3 id=\"3-1-pod-정의\" style=\"position:relative;\"><a href=\"#3-1-pod-%EC%A0%95%EC%9D%98\" aria-label=\"3 1 pod 정의 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-1. Pod 정의</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Pod\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n    <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">containerPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n    <span class=\"token key atrule\">env</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> NODE_ENV\n      <span class=\"token key atrule\">value</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"production\"</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> DATABASE_URL\n      <span class=\"token key atrule\">valueFrom</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">secretKeyRef</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> db<span class=\"token punctuation\">-</span>secret\n          <span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> url\n    <span class=\"token key atrule\">resources</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">requests</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"256Mi\"</span>\n        <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"250m\"</span>\n      <span class=\"token key atrule\">limits</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"512Mi\"</span>\n        <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"500m\"</span></code></pre></div>\n<h3 id=\"3-2-deployment\" style=\"position:relative;\"><a href=\"#3-2-deployment\" aria-label=\"3 2 deployment permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-2. Deployment</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n        <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n        <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">containerPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n        <span class=\"token key atrule\">livenessProbe</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">httpGet</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /health\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n          <span class=\"token key atrule\">initialDelaySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">30</span>\n          <span class=\"token key atrule\">periodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span>\n        <span class=\"token key atrule\">readinessProbe</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">httpGet</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /ready\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n          <span class=\"token key atrule\">initialDelaySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n          <span class=\"token key atrule\">periodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n        <span class=\"token key atrule\">resources</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">requests</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"256Mi\"</span>\n            <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"250m\"</span>\n          <span class=\"token key atrule\">limits</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"512Mi\"</span>\n            <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"500m\"</span></code></pre></div>\n<h3 id=\"3-3-service\" style=\"position:relative;\"><a href=\"#3-3-service\" aria-label=\"3 3 service permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-3. Service</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Service\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">protocol</span><span class=\"token punctuation\">:</span> TCP\n    <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n    <span class=\"token key atrule\">targetPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n  <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> LoadBalancer</code></pre></div>\n<h3 id=\"3-4-configmap과-secret\" style=\"position:relative;\"><a href=\"#3-4-configmap%EA%B3%BC-secret\" aria-label=\"3 4 configmap과 secret permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-4. ConfigMap과 Secret</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># ConfigMap</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> ConfigMap\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app<span class=\"token punctuation\">-</span>config\n<span class=\"token key atrule\">data</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">NODE_ENV</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"production\"</span>\n  <span class=\"token key atrule\">LOG_LEVEL</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"info\"</span>\n  <span class=\"token key atrule\">API_TIMEOUT</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"30\"</span>\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># Secret</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Secret\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> db<span class=\"token punctuation\">-</span>secret\n<span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Opaque\n<span class=\"token key atrule\">stringData</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">url</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"postgresql://user:password@db:5432/mydb\"</span>\n  <span class=\"token key atrule\">username</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"user\"</span>\n  <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"password\"</span></code></pre></div>\n<h2 id=\"4-고급-kubernetes-리소스\" style=\"position:relative;\"><a href=\"#4-%EA%B3%A0%EA%B8%89-kubernetes-%EB%A6%AC%EC%86%8C%EC%8A%A4\" aria-label=\"4 고급 kubernetes 리소스 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 고급 Kubernetes 리소스</h2>\n<h3 id=\"4-1-horizontalpodautoscaler\" style=\"position:relative;\"><a href=\"#4-1-horizontalpodautoscaler\" aria-label=\"4 1 horizontalpodautoscaler permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-1. HorizontalPodAutoscaler</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> autoscaling/v2\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> HorizontalPodAutoscaler\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>hpa\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">scaleTargetRef</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n    <span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n    <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">minReplicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n  <span class=\"token key atrule\">maxReplicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span>\n  <span class=\"token key atrule\">metrics</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Resource\n    <span class=\"token key atrule\">resource</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> cpu\n      <span class=\"token key atrule\">target</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Utilization\n        <span class=\"token key atrule\">averageUtilization</span><span class=\"token punctuation\">:</span> <span class=\"token number\">70</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Resource\n    <span class=\"token key atrule\">resource</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> memory\n      <span class=\"token key atrule\">target</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> Utilization\n        <span class=\"token key atrule\">averageUtilization</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span></code></pre></div>\n<h3 id=\"4-2-ingress\" style=\"position:relative;\"><a href=\"#4-2-ingress\" aria-label=\"4 2 ingress permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-2. Ingress</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> networking.k8s.io/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Ingress\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>ingress\n  <span class=\"token key atrule\">annotations</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">kubernetes.io/ingress.class</span><span class=\"token punctuation\">:</span> nginx\n    <span class=\"token key atrule\">cert-manager.io/cluster-issuer</span><span class=\"token punctuation\">:</span> letsencrypt<span class=\"token punctuation\">-</span>prod\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">tls</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">hosts</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> api.example.com\n    <span class=\"token key atrule\">secretName</span><span class=\"token punctuation\">:</span> api<span class=\"token punctuation\">-</span>tls\n  <span class=\"token key atrule\">rules</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">host</span><span class=\"token punctuation\">:</span> api.example.com\n    <span class=\"token key atrule\">http</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">paths</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /\n        <span class=\"token key atrule\">pathType</span><span class=\"token punctuation\">:</span> Prefix\n        <span class=\"token key atrule\">backend</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">service</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span>\n              <span class=\"token key atrule\">number</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span></code></pre></div>\n<h3 id=\"4-3-persistentvolumeclaim\" style=\"position:relative;\"><a href=\"#4-3-persistentvolumeclaim\" aria-label=\"4 3 persistentvolumeclaim permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-3. PersistentVolumeClaim</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> PersistentVolumeClaim\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app<span class=\"token punctuation\">-</span>storage\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">accessModes</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> ReadWriteOnce\n  <span class=\"token key atrule\">resources</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">requests</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">storage</span><span class=\"token punctuation\">:</span> 10Gi\n  <span class=\"token key atrule\">storageClassName</span><span class=\"token punctuation\">:</span> fast<span class=\"token punctuation\">-</span>ssd</code></pre></div>\n<h3 id=\"4-4-job과-cronjob\" style=\"position:relative;\"><a href=\"#4-4-job%EA%B3%BC-cronjob\" aria-label=\"4 4 job과 cronjob permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-4. Job과 CronJob</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># Job</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> batch/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Job\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> data<span class=\"token punctuation\">-</span>migration\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> migrator\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> migrator<span class=\"token punctuation\">:</span>1.0.0\n        <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"node\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"migrate.js\"</span><span class=\"token punctuation\">]</span>\n      <span class=\"token key atrule\">restartPolicy</span><span class=\"token punctuation\">:</span> Never\n  <span class=\"token key atrule\">backoffLimit</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># CronJob</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> batch/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> CronJob\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> daily<span class=\"token punctuation\">-</span>backup\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">schedule</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"0 2 * * *\"</span>  <span class=\"token comment\"># 매일 오전 2시</span>\n  <span class=\"token key atrule\">jobTemplate</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n          <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> backup\n            <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> backup<span class=\"token punctuation\">:</span>1.0.0\n            <span class=\"token key atrule\">command</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"sh\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"backup.sh\"</span><span class=\"token punctuation\">]</span>\n          <span class=\"token key atrule\">restartPolicy</span><span class=\"token punctuation\">:</span> OnFailure</code></pre></div>\n<h2 id=\"5-배포-전략\" style=\"position:relative;\"><a href=\"#5-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5\" aria-label=\"5 배포 전략 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 배포 전략</h2>\n<h3 id=\"5-1-rolling-update\" style=\"position:relative;\"><a href=\"#5-1-rolling-update\" aria-label=\"5 1 rolling update permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-1. Rolling Update</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n  <span class=\"token key atrule\">strategy</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> RollingUpdate\n    <span class=\"token key atrule\">rollingUpdate</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">maxSurge</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n      <span class=\"token key atrule\">maxUnavailable</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>2.0.0</code></pre></div>\n<h3 id=\"5-2-blue-green-배포\" style=\"position:relative;\"><a href=\"#5-2-blue-green-%EB%B0%B0%ED%8F%AC\" aria-label=\"5 2 blue green 배포 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-2. Blue-Green 배포</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># Blue Deployment</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>blue\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n      <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> blue\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n        <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> blue\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># Green Deployment</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>green\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n      <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> green\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n        <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> green\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>2.0.0\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># Service (트래픽 전환)</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Service\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n    <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> blue  <span class=\"token comment\"># green으로 변경하여 트래픽 전환</span>\n  <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n    <span class=\"token key atrule\">targetPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span></code></pre></div>\n<h3 id=\"5-3-canary-배포\" style=\"position:relative;\"><a href=\"#5-3-canary-%EB%B0%B0%ED%8F%AC\" aria-label=\"5 3 canary 배포 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-3. Canary 배포</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># Stable Deployment</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>stable\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">9</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n      <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> stable\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n        <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> stable\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># Canary Deployment</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>canary\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n      <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> canary\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n        <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> canary\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>2.0.0</code></pre></div>\n<h2 id=\"6-모니터링과-로깅\" style=\"position:relative;\"><a href=\"#6-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81%EA%B3%BC-%EB%A1%9C%EA%B9%85\" aria-label=\"6 모니터링과 로깅 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 모니터링과 로깅</h2>\n<h3 id=\"6-1-health-check\" style=\"position:relative;\"><a href=\"#6-1-health-check\" aria-label=\"6 1 health check permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-1. Health Check</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n        <span class=\"token key atrule\">livenessProbe</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">httpGet</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /health\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n          <span class=\"token key atrule\">initialDelaySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">30</span>\n          <span class=\"token key atrule\">periodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span>\n          <span class=\"token key atrule\">timeoutSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n          <span class=\"token key atrule\">failureThreshold</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n        <span class=\"token key atrule\">readinessProbe</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">httpGet</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /ready\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n          <span class=\"token key atrule\">initialDelaySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n          <span class=\"token key atrule\">periodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n          <span class=\"token key atrule\">timeoutSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n          <span class=\"token key atrule\">failureThreshold</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n        <span class=\"token key atrule\">startupProbe</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">httpGet</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /startup\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n          <span class=\"token key atrule\">initialDelaySeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n          <span class=\"token key atrule\">periodSeconds</span><span class=\"token punctuation\">:</span> <span class=\"token number\">10</span>\n          <span class=\"token key atrule\">failureThreshold</span><span class=\"token punctuation\">:</span> <span class=\"token number\">30</span></code></pre></div>\n<h3 id=\"6-2-리소스-모니터링\" style=\"position:relative;\"><a href=\"#6-2-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81\" aria-label=\"6 2 리소스 모니터링 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-2. 리소스 모니터링</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Service\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n  <span class=\"token key atrule\">annotations</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">prometheus.io/scrape</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"true\"</span>\n    <span class=\"token key atrule\">prometheus.io/port</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"3000\"</span>\n    <span class=\"token key atrule\">prometheus.io/path</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"/metrics\"</span>\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n    <span class=\"token key atrule\">targetPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span></code></pre></div>\n<h2 id=\"7-보안-모범-사례\" style=\"position:relative;\"><a href=\"#7-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\" aria-label=\"7 보안 모범 사례 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 보안 모범 사례</h2>\n<h3 id=\"7-1-securitycontext\" style=\"position:relative;\"><a href=\"#7-1-securitycontext\" aria-label=\"7 1 securitycontext permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-1. SecurityContext</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">securityContext</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">runAsNonRoot</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n        <span class=\"token key atrule\">runAsUser</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1000</span>\n        <span class=\"token key atrule\">fsGroup</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2000</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n        <span class=\"token key atrule\">securityContext</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">allowPrivilegeEscalation</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span>\n          <span class=\"token key atrule\">readOnlyRootFilesystem</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n          <span class=\"token key atrule\">capabilities</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">drop</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> ALL\n            <span class=\"token key atrule\">add</span><span class=\"token punctuation\">:</span>\n            <span class=\"token punctuation\">-</span> NET_BIND_SERVICE</code></pre></div>\n<h3 id=\"7-2-networkpolicy\" style=\"position:relative;\"><a href=\"#7-2-networkpolicy\" aria-label=\"7 2 networkpolicy permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-2. NetworkPolicy</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> networking.k8s.io/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> NetworkPolicy\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>network<span class=\"token punctuation\">-</span>policy\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">podSelector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">policyTypes</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> Ingress\n  <span class=\"token punctuation\">-</span> Egress\n  <span class=\"token key atrule\">ingress</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">from</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">podSelector</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> nginx\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">protocol</span><span class=\"token punctuation\">:</span> TCP\n      <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n  <span class=\"token key atrule\">egress</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">to</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">podSelector</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> db\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">protocol</span><span class=\"token punctuation\">:</span> TCP\n      <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5432</span></code></pre></div>\n<h2 id=\"8-실전-배포-예제\" style=\"position:relative;\"><a href=\"#8-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EC%98%88%EC%A0%9C\" aria-label=\"8 실전 배포 예제 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. 실전 배포 예제</h2>\n<h3 id=\"8-1-완전한-애플리케이션-스택\" style=\"position:relative;\"><a href=\"#8-1-%EC%99%84%EC%A0%84%ED%95%9C-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%8A%A4%ED%83%9D\" aria-label=\"8 1 완전한 애플리케이션 스택 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-1. 완전한 애플리케이션 스택</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token comment\"># namespace.yaml</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Namespace\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> production\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># deployment.yaml</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> apps/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Deployment\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">namespace</span><span class=\"token punctuation\">:</span> production\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">replicas</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">matchLabels</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">template</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">labels</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n    <span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">containers</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app\n        <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">:</span>1.0.0\n        <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n        <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">containerPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n        <span class=\"token key atrule\">env</span><span class=\"token punctuation\">:</span>\n        <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> DATABASE_URL\n          <span class=\"token key atrule\">valueFrom</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">secretKeyRef</span><span class=\"token punctuation\">:</span>\n              <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> db<span class=\"token punctuation\">-</span>secret\n              <span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> url\n        <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> REDIS_URL\n          <span class=\"token key atrule\">valueFrom</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">configMapKeyRef</span><span class=\"token punctuation\">:</span>\n              <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> app<span class=\"token punctuation\">-</span>config\n              <span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> redis<span class=\"token punctuation\">-</span>url\n        <span class=\"token key atrule\">resources</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">requests</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"256Mi\"</span>\n            <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"250m\"</span>\n          <span class=\"token key atrule\">limits</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">memory</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"512Mi\"</span>\n            <span class=\"token key atrule\">cpu</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"500m\"</span>\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># service.yaml</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Service\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n  <span class=\"token key atrule\">namespace</span><span class=\"token punctuation\">:</span> production\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">selector</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app\n  <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n    <span class=\"token key atrule\">targetPort</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000</span>\n  <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> ClusterIP\n\n<span class=\"token punctuation\">---</span>\n<span class=\"token comment\"># ingress.yaml</span>\n<span class=\"token key atrule\">apiVersion</span><span class=\"token punctuation\">:</span> networking.k8s.io/v1\n<span class=\"token key atrule\">kind</span><span class=\"token punctuation\">:</span> Ingress\n<span class=\"token key atrule\">metadata</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>ingress\n  <span class=\"token key atrule\">namespace</span><span class=\"token punctuation\">:</span> production\n<span class=\"token key atrule\">spec</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">rules</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">host</span><span class=\"token punctuation\">:</span> api.example.com\n    <span class=\"token key atrule\">http</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">paths</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /\n        <span class=\"token key atrule\">pathType</span><span class=\"token punctuation\">:</span> Prefix\n        <span class=\"token key atrule\">backend</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">service</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> my<span class=\"token punctuation\">-</span>app<span class=\"token punctuation\">-</span>service\n            <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span>\n              <span class=\"token key atrule\">number</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span></code></pre></div>\n<h2 id=\"9-cicd-통합\" style=\"position:relative;\"><a href=\"#9-cicd-%ED%86%B5%ED%95%A9\" aria-label=\"9 cicd 통합 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. CI/CD 통합</h2>\n<h3 id=\"9-1-github-actions-예제\" style=\"position:relative;\"><a href=\"#9-1-github-actions-%EC%98%88%EC%A0%9C\" aria-label=\"9 1 github actions 예제 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-1. GitHub Actions 예제</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build and Deploy\n\n<span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">build</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n    <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v3\n    \n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Build Docker image\n      <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n        docker build -t my-app:${{ github.sha }} .\n        docker tag my-app:${{ github.sha }} my-app:latest</span>\n    \n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Push to registry\n      <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n        echo \"${{ secrets.DOCKER_PASSWORD }}\" | docker login -u \"${{ secrets.DOCKER_USERNAME }}\" --password-stdin\n        docker push my-app:${{ github.sha }}\n        docker push my-app:latest</span>\n    \n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Deploy to Kubernetes\n      <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n        kubectl set image deployment/my-app app=my-app:${{ github.sha }} -n production</span></code></pre></div>\n<h2 id=\"10-트러블슈팅\" style=\"position:relative;\"><a href=\"#10-%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85\" aria-label=\"10 트러블슈팅 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. 트러블슈팅</h2>\n<h3 id=\"10-1-일반적인-문제\" style=\"position:relative;\"><a href=\"#10-1-%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9D%B8-%EB%AC%B8%EC%A0%9C\" aria-label=\"10 1 일반적인 문제 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10-1. 일반적인 문제</h3>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># Pod 상태 확인</span>\nkubectl get pods\n\n<span class=\"token comment\"># Pod 로그 확인</span>\nkubectl logs <span class=\"token operator\">&lt;</span>pod-name<span class=\"token operator\">></span>\n\n<span class=\"token comment\"># Pod 상세 정보</span>\nkubectl describe pod <span class=\"token operator\">&lt;</span>pod-name<span class=\"token operator\">></span>\n\n<span class=\"token comment\"># 컨테이너 내부 접속</span>\nkubectl <span class=\"token builtin class-name\">exec</span> <span class=\"token parameter variable\">-it</span> <span class=\"token operator\">&lt;</span>pod-name<span class=\"token operator\">></span> -- /bin/sh\n\n<span class=\"token comment\"># 리소스 사용량 확인</span>\nkubectl <span class=\"token function\">top</span> pods\nkubectl <span class=\"token function\">top</span> nodes\n\n<span class=\"token comment\"># 이벤트 확인</span>\nkubectl get events --sort-by<span class=\"token operator\">=</span>.metadata.creationTimestamp</code></pre></div>\n<h3 id=\"10-2-디버깅-명령어\" style=\"position:relative;\"><a href=\"#10-2-%EB%94%94%EB%B2%84%EA%B9%85-%EB%AA%85%EB%A0%B9%EC%96%B4\" aria-label=\"10 2 디버깅 명령어 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10-2. 디버깅 명령어</h3>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># Deployment 롤아웃 상태</span>\nkubectl rollout status deployment/my-app\n\n<span class=\"token comment\"># 이전 버전으로 롤백</span>\nkubectl rollout undo deployment/my-app\n\n<span class=\"token comment\"># 특정 리비전으로 롤백</span>\nkubectl rollout undo deployment/my-app --to-revision<span class=\"token operator\">=</span><span class=\"token number\">2</span>\n\n<span class=\"token comment\"># 리소스 YAML 확인</span>\nkubectl get deployment my-app <span class=\"token parameter variable\">-o</span> yaml\n\n<span class=\"token comment\"># 포트 포워딩</span>\nkubectl port-forward pod/<span class=\"token operator\">&lt;</span>pod-name<span class=\"token operator\">></span> <span class=\"token number\">3000</span>:3000</code></pre></div>\n<h2 id=\"11-결론\" style=\"position:relative;\"><a href=\"#11-%EA%B2%B0%EB%A1%A0\" aria-label=\"11 결론 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>11. 결론</h2>\n<p>Docker와 Kubernetes는 현대적인 애플리케이션 배포의 핵심 도구다. 이 글에서 다룬 내용:</p>\n<ol>\n<li><strong>Docker 기초</strong>: Dockerfile 작성, 멀티 스테이지 빌드, 이미지 최적화</li>\n<li><strong>Docker Compose</strong>: 개발/프로덕션 환경 구성</li>\n<li><strong>Kubernetes 리소스</strong>: Pod, Deployment, Service, ConfigMap, Secret</li>\n<li><strong>고급 리소스</strong>: HPA, Ingress, PVC, Job, CronJob</li>\n<li><strong>배포 전략</strong>: Rolling Update, Blue-Green, Canary</li>\n<li><strong>모니터링</strong>: Health Check, 리소스 모니터링</li>\n<li><strong>보안</strong>: SecurityContext, NetworkPolicy</li>\n<li><strong>CI/CD 통합</strong>: GitHub Actions</li>\n</ol>\n<p>이러한 도구와 패턴을 적절히 활용하면 안정적이고 확장 가능한 애플리케이션을 배포할 수 있다.</p>\n<h2 id=\"참고-자료\" style=\"position:relative;\"><a href=\"#%EC%B0%B8%EA%B3%A0-%EC%9E%90%EB%A3%8C\" aria-label=\"참고 자료 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>참고 자료</h2>\n<ul>\n<li><a href=\"https://docs.docker.com/\">Docker 공식 문서</a></li>\n<li><a href=\"https://kubernetes.io/docs/\">Kubernetes 공식 문서</a></li>\n<li><a href=\"https://docs.docker.com/develop/dev-best-practices/\">Docker Best Practices</a></li>\n<li><a href=\"https://k8spatterns.io/\">Kubernetes Patterns</a></li>\n</ul>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#docker%EC%99%80-kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C\">Docker와 Kubernetes 실전 배포 가이드</a></p>\n<ul>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#1-docker-%EA%B8%B0%EC%B4%88\">1. Docker 기초</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#1-1-dockerfile-%EC%9E%91%EC%84%B1\">1-1. Dockerfile 작성</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#1-2-%EB%A9%80%ED%8B%B0-%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%A7%80-%EB%B9%8C%EB%93%9C\">1-2. 멀티 스테이지 빌드</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#1-3-python-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98\">1-3. Python 애플리케이션</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#1-4-docker-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%B5%9C%EC%A0%81%ED%99%94\">1-4. Docker 이미지 최적화</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#2-docker-compose\">2. Docker Compose</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#2-1-%EA%B8%B0%EB%B3%B8-compose-%ED%8C%8C%EC%9D%BC\">2-1. 기본 Compose 파일</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#2-2-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-compose\">2-2. 개발 환경 Compose</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#2-3-%ED%94%84%EB%A1%9C%EB%8D%95%EC%85%98-compose\">2-3. 프로덕션 Compose</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#3-kubernetes-%EA%B8%B0%EC%B4%88\">3. Kubernetes 기초</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#3-1-pod-%EC%A0%95%EC%9D%98\">3-1. Pod 정의</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#3-2-deployment\">3-2. Deployment</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#3-3-service\">3-3. Service</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#3-4-configmap%EA%B3%BC-secret\">3-4. ConfigMap과 Secret</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#4-%EA%B3%A0%EA%B8%89-kubernetes-%EB%A6%AC%EC%86%8C%EC%8A%A4\">4. 고급 Kubernetes 리소스</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#4-1-horizontalpodautoscaler\">4-1. HorizontalPodAutoscaler</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#4-2-ingress\">4-2. Ingress</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#4-3-persistentvolumeclaim\">4-3. PersistentVolumeClaim</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#4-4-job%EA%B3%BC-cronjob\">4-4. Job과 CronJob</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#5-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5\">5. 배포 전략</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#5-1-rolling-update\">5-1. Rolling Update</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#5-2-blue-green-%EB%B0%B0%ED%8F%AC\">5-2. Blue-Green 배포</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#5-3-canary-%EB%B0%B0%ED%8F%AC\">5-3. Canary 배포</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#6-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81%EA%B3%BC-%EB%A1%9C%EA%B9%85\">6. 모니터링과 로깅</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#6-1-health-check\">6-1. Health Check</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#6-2-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81\">6-2. 리소스 모니터링</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#7-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\">7. 보안 모범 사례</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#7-1-securitycontext\">7-1. SecurityContext</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#7-2-networkpolicy\">7-2. NetworkPolicy</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#8-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EC%98%88%EC%A0%9C\">8. 실전 배포 예제</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#8-1-%EC%99%84%EC%A0%84%ED%95%9C-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%8A%A4%ED%83%9D\">8-1. 완전한 애플리케이션 스택</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#9-cicd-%ED%86%B5%ED%95%A9\">9. CI/CD 통합</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#9-1-github-actions-%EC%98%88%EC%A0%9C\">9-1. GitHub Actions 예제</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#10-%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85\">10. 트러블슈팅</a></p>\n<ul>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#10-1-%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9D%B8-%EB%AC%B8%EC%A0%9C\">10-1. 일반적인 문제</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#10-2-%EB%94%94%EB%B2%84%EA%B9%85-%EB%AA%85%EB%A0%B9%EC%96%B4\">10-2. 디버깅 명령어</a></li>\n</ul>\n</li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#11-%EA%B2%B0%EB%A1%A0\">11. 결론</a></li>\n<li><a href=\"/etc/Docker%EC%99%80-Kubernetes-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EA%B0%80%EC%9D%B4%EB%93%9C/#%EC%B0%B8%EA%B3%A0-%EC%9E%90%EB%A3%8C\">참고 자료</a></li>\n</ul>\n</li>\n</ul>","wordCount":{"words":218},"fields":{"slug":"/etc/Docker와-Kubernetes-실전-배포-가이드/","image":null,"faq":[]},"frontmatter":{"title":"Docker와 Kubernetes 실전 배포 가이드","date":"2025년 11월 28일","dateISO":"2025-11-28T00:00:00.000Z","updatedISO":null,"category":"etc","description":"Docker 컨테이너화부터 Kubernetes 클러스터 배포까지 실전 예제와 함께 완벽하게 정리합니다. Dockerfile 작성, Docker Compose, Kubernetes 리소스 정의, 배포 전략까지 모든 것을 다룹니다.","tags":["Docker","Kubernetes","컨테이너","DevOps","배포","인프라","클라우드"]}}},"pageContext":{"slug":"/etc/Docker와-Kubernetes-실전-배포-가이드/","previous":{"fields":{"slug":"/etc/PostgreSQL-고급-기능-JSON-Full-Text-Search-Partitioning/"},"frontmatter":{"title":"PostgreSQL 고급 기능 - JSON, Full-Text Search, Partitioning","tags":["PostgreSQL","데이터베이스","JSON","Full-Text Search","Partitioning","인덱싱","성능 최적화","SQL"]}},"next":{"fields":{"slug":"/ai/LLM-추론-최적화-KV-Cache-Quantization-Speculative-Decoding/"},"frontmatter":{"title":"LLM 추론 최적화 - KV Cache, Quantization, Speculative Decoding","tags":["LLM","추론 최적화","KV Cache","Quantization","Speculative Decoding","AI","성능 최적화","모델 서빙"]}}}},"staticQueryHashes":["213619243","3262363727"]}