{"componentChunkName":"component---src-templates-blog-post-js","path":"/etc/개발-환경-설정-자동화-도구-모음/","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":"d64a4037-c8ff-5ec4-a6e8-789986c152bc","excerpt":"개발 환경 설정 자동화 도구 모음 새로운 개발자 온보딩이나 프로젝트 설정에 시간을 낭비하는 것은 비효율적이다. 개발 환경 설정을 자동화하면 몇 분 만에 일관된 개발 환경을 구축할 수 있다. 이 글은 주요 개발 환경 자동화 도구들을 비교 분석한다. 1. 주요 도구 개요 Docker…","html":"<p><img src=\"/assets/etc.png\" alt=\"개발 환경 설정 자동화 도구 모음\" title=\"개발 환경 설정 자동화 도구 모음\"></p>\n<p>새로운 개발자 온보딩이나 프로젝트 설정에 시간을 낭비하는 것은 비효율적이다. 개발 환경 설정을 자동화하면 몇 분 만에 일관된 개발 환경을 구축할 수 있다. 이 글은 주요 개발 환경 자동화 도구들을 비교 분석한다.</p>\n<h2 id=\"1-주요-도구-개요\" style=\"position:relative;\"><a href=\"#1-%EC%A3%BC%EC%9A%94-%EB%8F%84%EA%B5%AC-%EA%B0%9C%EC%9A%94\" aria-label=\"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>1. 주요 도구 개요</h2>\n<h3 id=\"docker\" style=\"position:relative;\"><a href=\"#docker\" aria-label=\"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>Docker</h3>\n<p><strong>개발사</strong>: Docker Inc.<br>\n<strong>타입</strong>: 컨테이너 플랫폼<br>\n<strong>사용 사례</strong>: 애플리케이션 컨테이너화, 마이크로서비스</p>\n<h3 id=\"vagrant\" style=\"position:relative;\"><a href=\"#vagrant\" aria-label=\"vagrant 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>Vagrant</h3>\n<p><strong>개발사</strong>: HashiCorp<br>\n<strong>타입</strong>: 가상 머신 관리 도구<br>\n<strong>사용 사례</strong>: 완전한 가상 머신 환경, 레거시 시스템</p>\n<h3 id=\"dev-containers\" style=\"position:relative;\"><a href=\"#dev-containers\" aria-label=\"dev containers 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>Dev Containers</h3>\n<p><strong>개발사</strong>: Microsoft<br>\n<strong>타입</strong>: VS Code 확장 + Docker<br>\n<strong>사용 사례</strong>: IDE 통합 개발 환경</p>\n<h2 id=\"2-도구-비교\" style=\"position:relative;\"><a href=\"#2-%EB%8F%84%EA%B5%AC-%EB%B9%84%EA%B5%90\" aria-label=\"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>2. 도구 비교</h2>\n<h3 id=\"기본-특징\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%ED%8A%B9%EC%A7%95\" 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>기본 특징</h3>\n<table>\n<thead>\n<tr>\n<th>특징</th>\n<th>Docker</th>\n<th>Vagrant</th>\n<th>Dev Containers</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>가상화 방식</strong></td>\n<td>컨테이너</td>\n<td>가상 머신</td>\n<td>컨테이너</td>\n</tr>\n<tr>\n<td><strong>시작 속도</strong></td>\n<td>빠름 (초 단위)</td>\n<td>느림 (분 단위)</td>\n<td>빠름</td>\n</tr>\n<tr>\n<td><strong>리소스 사용</strong></td>\n<td>적음</td>\n<td>많음</td>\n<td>적음</td>\n</tr>\n<tr>\n<td><strong>호스트 OS</strong></td>\n<td>Linux, macOS, Windows</td>\n<td>모든 OS</td>\n<td>모든 OS</td>\n</tr>\n<tr>\n<td><strong>격리 수준</strong></td>\n<td>프로세스 레벨</td>\n<td>하드웨어 레벨</td>\n<td>프로세스 레벨</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"사용-시나리오\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\" 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>사용 시나리오</h3>\n<p><strong>Docker 추천</strong></p>\n<ul>\n<li>마이크로서비스 아키텍처</li>\n<li>CI/CD 파이프라인</li>\n<li>프로덕션과 유사한 환경</li>\n<li>빠른 시작이 필요한 경우</li>\n</ul>\n<p><strong>Vagrant 추천</strong></p>\n<ul>\n<li>완전한 OS 환경이 필요한 경우</li>\n<li>레거시 시스템 시뮬레이션</li>\n<li>네트워크 설정이 복잡한 경우</li>\n<li>여러 가상 머신이 필요한 경우</li>\n</ul>\n<p><strong>Dev Containers 추천</strong></p>\n<ul>\n<li>VS Code 사용자</li>\n<li>IDE 통합이 중요한 경우</li>\n<li>빠른 프로토타이핑</li>\n<li>개인 프로젝트</li>\n</ul>\n<h2 id=\"3-docker-상세-가이드\" style=\"position:relative;\"><a href=\"#3-docker-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"3 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>3. Docker 상세 가이드</h2>\n<h3 id=\"기본-사용법\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95\" 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>기본 사용법</h3>\n<p><strong>Dockerfile 예시</strong></p>\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> node:18-alpine</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR</span> /app</span>\n\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 install</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE</span> 3000</span>\n\n<span class=\"token instruction\"><span class=\"token keyword\">CMD</span> [<span class=\"token string\">\"npm\"</span>, <span class=\"token string\">\"start\"</span>]</span></code></pre></div>\n<p><strong>docker-compose.yml 예시</strong></p>\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\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> .<span class=\"token punctuation\">:</span>/app\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> NODE_ENV=development\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><span class=\"token number\">15</span>\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> POSTGRES_DB=myapp\n      <span class=\"token punctuation\">-</span> POSTGRES_USER=user\n      <span class=\"token punctuation\">-</span> POSTGRES_PASSWORD=password\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\n<span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n  postgres_data<span class=\"token punctuation\">:</span></code></pre></div>\n<h3 id=\"활용-시나리오\" style=\"position:relative;\"><a href=\"#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\" 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>활용 시나리오</h3>\n<p><strong>로컬 개발 환경</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 환경 시작</span>\n<span class=\"token function\">docker-compose</span> up <span class=\"token parameter variable\">-d</span>\n\n<span class=\"token comment\"># 로그 확인</span>\n<span class=\"token function\">docker-compose</span> logs <span class=\"token parameter variable\">-f</span>\n\n<span class=\"token comment\"># 환경 중지</span>\n<span class=\"token function\">docker-compose</span> down</code></pre></div>\n<p><strong>다중 서비스 구성</strong></p>\n<ul>\n<li>프론트엔드, 백엔드, 데이터베이스</li>\n<li>Redis, RabbitMQ 등 미들웨어</li>\n<li>네트워크 격리 및 통신</li>\n</ul>\n<h2 id=\"4-vagrant-상세-가이드\" style=\"position:relative;\"><a href=\"#4-vagrant-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"4 vagrant 상세 가이드 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. Vagrant 상세 가이드</h2>\n<h3 id=\"기본-사용법-1\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95-1\" aria-label=\"기본 사용법 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>기본 사용법</h3>\n<p><strong>Vagrantfile 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">Vagrant<span class=\"token punctuation\">.</span>configure<span class=\"token punctuation\">(</span><span class=\"token string-literal\"><span class=\"token string\">\"2\"</span></span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">do</span> <span class=\"token operator\">|</span>config<span class=\"token operator\">|</span>\n  config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>box <span class=\"token operator\">=</span> <span class=\"token string-literal\"><span class=\"token string\">\"ubuntu/jammy64\"</span></span>\n  \n  config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>network <span class=\"token string-literal\"><span class=\"token string\">\"private_network\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">ip</span><span class=\"token operator\">:</span> <span class=\"token string-literal\"><span class=\"token string\">\"192.168.33.10\"</span></span>\n  \n  config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>provider <span class=\"token string-literal\"><span class=\"token string\">\"virtualbox\"</span></span> <span class=\"token keyword\">do</span> <span class=\"token operator\">|</span>vb<span class=\"token operator\">|</span>\n    vb<span class=\"token punctuation\">.</span>memory <span class=\"token operator\">=</span> <span class=\"token string-literal\"><span class=\"token string\">\"2048\"</span></span>\n    vb<span class=\"token punctuation\">.</span>cpus <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n  <span class=\"token keyword\">end</span>\n  \n  config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>provision <span class=\"token string-literal\"><span class=\"token string\">\"shell\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">inline</span><span class=\"token operator\">:</span> <span class=\"token string-literal heredoc-string\"><span class=\"token delimiter\"><span class=\"token punctuation\">&lt;&lt;-</span><span class=\"token symbol\">SHELL</span></span><span class=\"token string\">\n    apt-get update\n    apt-get install -y nodejs npm\n    npm install -g pm2\n  </span><span class=\"token delimiter\"><span class=\"token symbol\">SHELL</span></span></span>\n<span class=\"token keyword\">end</span></code></pre></div>\n<h3 id=\"활용-시나리오-1\" style=\"position:relative;\"><a href=\"#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4-1\" aria-label=\"활용 시나리오 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>활용 시나리오</h3>\n<p><strong>복잡한 네트워크 구성</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>define <span class=\"token string-literal\"><span class=\"token string\">\"web\"</span></span> <span class=\"token keyword\">do</span> <span class=\"token operator\">|</span>web<span class=\"token operator\">|</span>\n  web<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>box <span class=\"token operator\">=</span> <span class=\"token string-literal\"><span class=\"token string\">\"ubuntu/jammy64\"</span></span>\n  web<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>network <span class=\"token string-literal\"><span class=\"token string\">\"private_network\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">ip</span><span class=\"token operator\">:</span> <span class=\"token string-literal\"><span class=\"token string\">\"192.168.33.10\"</span></span>\n<span class=\"token keyword\">end</span>\n\nconfig<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>define <span class=\"token string-literal\"><span class=\"token string\">\"db\"</span></span> <span class=\"token keyword\">do</span> <span class=\"token operator\">|</span>db<span class=\"token operator\">|</span>\n  db<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>box <span class=\"token operator\">=</span> <span class=\"token string-literal\"><span class=\"token string\">\"ubuntu/jammy64\"</span></span>\n  db<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>network <span class=\"token string-literal\"><span class=\"token string\">\"private_network\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">ip</span><span class=\"token operator\">:</span> <span class=\"token string-literal\"><span class=\"token string\">\"192.168.33.11\"</span></span>\n<span class=\"token keyword\">end</span></code></pre></div>\n<h2 id=\"5-dev-containers-상세-가이드\" style=\"position:relative;\"><a href=\"#5-dev-containers-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"5 dev containers 상세 가이드 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. Dev Containers 상세 가이드</h2>\n<h3 id=\"기본-설정\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%EC%84%A4%EC%A0%95\" 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>기본 설정</h3>\n<p><strong>.devcontainer/devcontainer.json 예시</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Node.js Development\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"image\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"mcr.microsoft.com/devcontainers/javascript-node:18\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"features\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"ghcr.io/devcontainers/features/docker-in-docker:2\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"customizations\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"vscode\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"extensions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token string\">\"dbaeumer.vscode-eslint\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"esbenp.prettier-vscode\"</span>\n      <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"settings\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token property\">\"editor.formatOnSave\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"forwardPorts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">3000</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"postCreateCommand\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm install\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"활용-시나리오-2\" style=\"position:relative;\"><a href=\"#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4-2\" aria-label=\"활용 시나리오 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>활용 시나리오</h3>\n<p><strong>프로젝트별 환경</strong></p>\n<ul>\n<li>각 프로젝트마다 독립된 컨테이너</li>\n<li>필요한 확장 프로그램 자동 설치</li>\n<li>환경 변수 자동 설정</li>\n</ul>\n<h2 id=\"6-도구별-장단점\" style=\"position:relative;\"><a href=\"#6-%EB%8F%84%EA%B5%AC%EB%B3%84-%EC%9E%A5%EB%8B%A8%EC%A0%90\" 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=\"docker-1\" style=\"position:relative;\"><a href=\"#docker-1\" aria-label=\"docker 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>Docker</h3>\n<p><strong>장점</strong></p>\n<ul>\n<li>빠른 시작 시간</li>\n<li>낮은 리소스 사용</li>\n<li>프로덕션과 유사한 환경</li>\n<li>넓은 커뮤니티</li>\n</ul>\n<p><strong>단점</strong></p>\n<ul>\n<li>Linux 커널 의존성</li>\n<li>복잡한 네트워크 설정</li>\n<li>학습 곡선 존재</li>\n</ul>\n<h3 id=\"vagrant-1\" style=\"position:relative;\"><a href=\"#vagrant-1\" aria-label=\"vagrant 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>Vagrant</h3>\n<p><strong>장점</strong></p>\n<ul>\n<li>완전한 OS 격리</li>\n<li>다양한 프로바이더 지원</li>\n<li>복잡한 네트워크 구성</li>\n<li>레거시 시스템 지원</li>\n</ul>\n<p><strong>단점</strong></p>\n<ul>\n<li>느린 시작 시간</li>\n<li>높은 리소스 사용</li>\n<li>설정이 복잡할 수 있음</li>\n</ul>\n<h3 id=\"dev-containers-1\" style=\"position:relative;\"><a href=\"#dev-containers-1\" aria-label=\"dev containers 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>Dev Containers</h3>\n<p><strong>장점</strong></p>\n<ul>\n<li>VS Code 완전 통합</li>\n<li>빠른 설정</li>\n<li>프로젝트별 환경</li>\n<li>팀 협업 용이</li>\n</ul>\n<p><strong>단점</strong></p>\n<ul>\n<li>VS Code 의존성</li>\n<li>Docker 필요</li>\n<li>제한적인 커스터마이징</li>\n</ul>\n<h2 id=\"7-선택-가이드\" style=\"position:relative;\"><a href=\"#7-%EC%84%A0%ED%83%9D-%EA%B0%80%EC%9D%B4%EB%93%9C\" 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=\"프로젝트-유형별-추천\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%9C%A0%ED%98%95%EB%B3%84-%EC%B6%94%EC%B2%9C\" 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>프로젝트 유형별 추천</h3>\n<p><strong>웹 애플리케이션</strong></p>\n<ul>\n<li>Docker + docker-compose</li>\n<li>빠른 개발 사이클</li>\n<li>프로덕션과 유사</li>\n</ul>\n<p><strong>마이크로서비스</strong></p>\n<ul>\n<li>Docker Compose</li>\n<li>서비스 간 통신</li>\n<li>독립적 스케일링</li>\n</ul>\n<p><strong>레거시 시스템</strong></p>\n<ul>\n<li>Vagrant</li>\n<li>완전한 OS 환경</li>\n<li>복잡한 설정</li>\n</ul>\n<p><strong>개인 프로젝트</strong></p>\n<ul>\n<li>Dev Containers</li>\n<li>빠른 시작</li>\n<li>IDE 통합</li>\n</ul>\n<h3 id=\"팀-규모별-추천\" style=\"position:relative;\"><a href=\"#%ED%8C%80-%EA%B7%9C%EB%AA%A8%EB%B3%84-%EC%B6%94%EC%B2%9C\" 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>팀 규모별 추천</h3>\n<p><strong>소규모 팀 (1-5명)</strong></p>\n<ul>\n<li>Dev Containers 또는 Docker</li>\n<li>간단한 설정</li>\n<li>빠른 온보딩</li>\n</ul>\n<p><strong>중규모 팀 (5-20명)</strong></p>\n<ul>\n<li>Docker Compose</li>\n<li>표준화된 환경</li>\n<li>CI/CD 통합</li>\n</ul>\n<p><strong>대규모 팀 (20명 이상)</strong></p>\n<ul>\n<li>Docker + Kubernetes (로컬)</li>\n<li>복잡한 아키텍처</li>\n<li>프로덕션 유사 환경</li>\n</ul>\n<h2 id=\"8-실무-활용-팁\" style=\"position:relative;\"><a href=\"#8-%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9-%ED%8C%81\" 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=\"환경-변수-관리\" style=\"position:relative;\"><a href=\"#%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EA%B4%80%EB%A6%AC\" 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>환경 변수 관리</h3>\n<p><strong>Docker Compose</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">app</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">env_file</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> .env.development\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> NODE_ENV=development</code></pre></div>\n<p><strong>Vagrant</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">config<span class=\"token punctuation\">.</span>vm<span class=\"token punctuation\">.</span>provision <span class=\"token string-literal\"><span class=\"token string\">\"shell\"</span></span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">env</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token string-literal\"><span class=\"token string\">\"DATABASE_URL\"</span></span> <span class=\"token operator\">=></span> <span class=\"token constant\">ENV</span><span class=\"token punctuation\">[</span><span class=\"token string-literal\"><span class=\"token string\">\"DATABASE_URL\"</span></span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"볼륨-마운트\" style=\"position:relative;\"><a href=\"#%EB%B3%BC%EB%A5%A8-%EB%A7%88%EC%9A%B4%ED%8A%B8\" 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>볼륨 마운트</h3>\n<p><strong>개발 중 코드 동기화</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><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  <span class=\"token comment\"># node_modules는 컨테이너 내부 사용</span></code></pre></div>\n<h3 id=\"네트워크-설정\" style=\"position:relative;\"><a href=\"#%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95\" 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>네트워크 설정</h3>\n<p><strong>서비스 간 통신</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">frontend</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> backend\n  <span class=\"token key atrule\">backend</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> db</code></pre></div>\n<h2 id=\"9-모범-사례\" style=\"position:relative;\"><a href=\"#9-%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\" aria-label=\"9 모범 사례 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. 모범 사례</h2>\n<h3 id=\"dockerfile-최적화\" style=\"position:relative;\"><a href=\"#dockerfile-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"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>Dockerfile 최적화</h3>\n<p><strong>레이어 캐싱 활용</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token comment\"># 의존성 먼저 복사 (변경 빈도 낮음)</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 install</span>\n\n<span class=\"token comment\"># 소스 코드 나중에 복사 (변경 빈도 높음)</span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY</span> . .</span></code></pre></div>\n<p><strong>멀티 스테이지 빌드</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"dockerfile\"><pre class=\"language-dockerfile\"><code class=\"language-dockerfile\"><span class=\"token comment\"># 빌드 스테이지</span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM</span> node:18 <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> . .</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> nginx:alpine</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 /usr/share/nginx/html</span></code></pre></div>\n<h3 id=\"보안-고려사항\" style=\"position:relative;\"><a href=\"#%EB%B3%B4%EC%95%88-%EA%B3%A0%EB%A0%A4%EC%82%AC%ED%95%AD\" 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>보안 고려사항</h3>\n<ul>\n<li>최소 권한 원칙</li>\n<li>비밀번호 하드코딩 금지</li>\n<li>정기적인 이미지 업데이트</li>\n<li>스캔 도구 활용</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq 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>FAQ</h2>\n<p><strong>Q: 어떤 도구를 선택해야 하나요?</strong><br>\nA: 프로젝트 요구사항에 따라 다르다. 빠른 시작이 중요하면 Docker, 완전한 OS 환경이 필요하면 Vagrant, VS Code 사용자면 Dev Containers를 추천한다.</p>\n<p><strong>Q: 여러 도구를 함께 사용할 수 있나요?</strong><br>\nA: 가능하다. 예를 들어, Vagrant로 가상 머신을 만들고 그 안에서 Docker를 실행할 수 있다.</p>\n<p><strong>Q: 성능 차이가 있나요?</strong><br>\nA: Docker와 Dev Containers는 컨테이너 기반으로 빠르고 가볍다. Vagrant는 가상 머신 기반으로 느리고 리소스를 많이 사용한다.</p>\n<p><strong>Q: Windows에서도 사용할 수 있나요?</strong><br>\nA: 모두 Windows를 지원한다. Docker는 WSL2를 사용하며, Vagrant는 VirtualBox나 Hyper-V를 사용한다.</p>\n<p><strong>Q: 팀원들이 쉽게 사용할 수 있나요?</strong><br>\nA: Dev Containers가 가장 사용하기 쉽다. VS Code에서 한 번의 클릭으로 환경을 시작할 수 있다. Docker도 docker-compose만 있으면 간단하다.</p>\n<p><strong>Q: 프로덕션 환경과 동일하게 만들 수 있나요?</strong><br>\nA: Docker를 사용하면 프로덕션과 거의 동일한 환경을 만들 수 있다. 같은 이미지를 사용하면 더욱 일치한다.</p>\n<h2 id=\"개발-환경-구축-후-프로젝트-기회\" style=\"position:relative;\"><a href=\"#%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%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<p>개발 환경 자동화 도구를 활용할 수 있다면, 다양한 프로젝트에서 그 기술을 적용해보자. <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 프로젝트 매칭 플랫폼에서 개발 환경 구축, CI/CD 파이프라인 설정, 컨테이너화 프로젝트 등을 찾을 수 있다. 특히 마이크로서비스 아키텍처, DevOps 구축, 개발 환경 표준화가 필요한 프로젝트에서 Docker, Vagrant, Dev Containers 같은 도구를 바로 활용할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#1-%EC%A3%BC%EC%9A%94-%EB%8F%84%EA%B5%AC-%EA%B0%9C%EC%9A%94\">1. 주요 도구 개요</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#docker\">Docker</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#vagrant\">Vagrant</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#dev-containers\">Dev Containers</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#2-%EB%8F%84%EA%B5%AC-%EB%B9%84%EA%B5%90\">2. 도구 비교</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EA%B8%B0%EB%B3%B8-%ED%8A%B9%EC%A7%95\">기본 특징</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EC%82%AC%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\">사용 시나리오</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#3-docker-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\">3. Docker 상세 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95\">기본 사용법</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\">활용 시나리오</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#4-vagrant-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\">4. Vagrant 상세 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95-1\">기본 사용법</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4-1\">활용 시나리오</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#5-dev-containers-%EC%83%81%EC%84%B8-%EA%B0%80%EC%9D%B4%EB%93%9C\">5. Dev Containers 상세 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EA%B8%B0%EB%B3%B8-%EC%84%A4%EC%A0%95\">기본 설정</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%99%9C%EC%9A%A9-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4-2\">활용 시나리오</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#6-%EB%8F%84%EA%B5%AC%EB%B3%84-%EC%9E%A5%EB%8B%A8%EC%A0%90\">6. 도구별 장단점</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#docker-1\">Docker</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#vagrant-1\">Vagrant</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#dev-containers-1\">Dev Containers</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#7-%EC%84%A0%ED%83%9D-%EA%B0%80%EC%9D%B4%EB%93%9C\">7. 선택 가이드</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%9C%A0%ED%98%95%EB%B3%84-%EC%B6%94%EC%B2%9C\">프로젝트 유형별 추천</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%8C%80-%EA%B7%9C%EB%AA%A8%EB%B3%84-%EC%B6%94%EC%B2%9C\">팀 규모별 추천</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#8-%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9-%ED%8C%81\">8. 실무 활용 팁</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EA%B4%80%EB%A6%AC\">환경 변수 관리</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EB%B3%BC%EB%A5%A8-%EB%A7%88%EC%9A%B4%ED%8A%B8\">볼륨 마운트</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95\">네트워크 설정</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#9-%EB%AA%A8%EB%B2%94-%EC%82%AC%EB%A1%80\">9. 모범 사례</a></p>\n<ul>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#dockerfile-%EC%B5%9C%EC%A0%81%ED%99%94\">Dockerfile 최적화</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EB%B3%B4%EC%95%88-%EA%B3%A0%EB%A0%A4%EC%82%AC%ED%95%AD\">보안 고려사항</a></li>\n</ul>\n</li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#faq\">FAQ</a></li>\n<li><a href=\"/etc/%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EC%9E%90%EB%8F%99%ED%99%94-%EB%8F%84%EA%B5%AC-%EB%AA%A8%EC%9D%8C/#%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\">개발 환경 구축 후 프로젝트 기회</a></li>\n</ul>","wordCount":{"words":584},"fields":{"slug":"/etc/개발-환경-설정-자동화-도구-모음/","image":null,"faq":[{"question":"어떤 도구를 선택해야 하나요?","answer":"프로젝트 요구사항에 따라 다르다. 빠른 시작이 중요하면 Docker, 완전한 OS 환경이 필요하면 Vagrant, VS Code 사용자면 Dev Containers를 추천한다."},{"question":"여러 도구를 함께 사용할 수 있나요?","answer":"가능하다. 예를 들어, Vagrant로 가상 머신을 만들고 그 안에서 Docker를 실행할 수 있다."},{"question":"성능 차이가 있나요?","answer":"Docker와 Dev Containers는 컨테이너 기반으로 빠르고 가볍다. Vagrant는 가상 머신 기반으로 느리고 리소스를 많이 사용한다."},{"question":"Windows에서도 사용할 수 있나요?","answer":"모두 Windows를 지원한다. Docker는 WSL2를 사용하며, Vagrant는 VirtualBox나 Hyper-V를 사용한다."},{"question":"팀원들이 쉽게 사용할 수 있나요?","answer":"Dev Containers가 가장 사용하기 쉽다. VS Code에서 한 번의 클릭으로 환경을 시작할 수 있다. Docker도 docker-compose만 있으면 간단하다."},{"question":"프로덕션 환경과 동일하게 만들 수 있나요?","answer":"Docker를 사용하면 프로덕션과 거의 동일한 환경을 만들 수 있다. 같은 이미지를 사용하면 더욱 일치한다."}]},"frontmatter":{"title":"개발 환경 설정 자동화 도구 모음 - Docker, Vagrant, Dev Containers 완전 가이드","date":"2025년 12월 23일","dateISO":"2025-12-23T06:30:00.000Z","updatedISO":null,"category":"etc","description":"개발 환경 설정을 자동화하는 도구들을 상세히 비교 분석한다. Docker, Vagrant, Dev Containers 등 주요 도구의 특징과 실무 활용법을 다룬다.","tags":["Docker","Vagrant","Dev Containers","개발 환경","자동화","DevOps","컨테이너"]}}},"pageContext":{"slug":"/etc/개발-환경-설정-자동화-도구-모음/","previous":{"fields":{"slug":"/etc/코드-리뷰-체크리스트/"},"frontmatter":{"title":"코드 리뷰 체크리스트 - 품질 보장을 위한 필수 항목","tags":["코드 리뷰","코드 품질","개발 프로세스","품질 보장","베스트 프랙티스","코드 검토"]}},"next":{"fields":{"slug":"/etc/웹사이트-보안-스캔-도구와-취약점-점검-가이드/"},"frontmatter":{"title":"웹사이트 보안 스캔 도구와 취약점 점검 가이드 - 실무에서 바로 쓰는 보안 도구들","tags":["보안","웹 보안","취약점 스캔","OWASP","보안 도구","취약점 점검","보안 테스트"]}}}},"staticQueryHashes":["213619243","3262363727"]}