새로운 프로그래밍 언어와 프레임 워크를 시도 할 때마다 호스트 OS에 직접 런타임 (Node.js, Python, Ruby 등)이나 데이터베이스 (PostgreSQL, MySQL)를 설치하지 않습니까? 버젼 경합이나 언인스톨시의 쓰레기 파일에 고민하는 「OS 환경 오염」은, Docker 컨테이너를 활용하면 완전히 과거의 것이 됩니다. 실용적인 로컬 개발 환경의 구축 순서를 핸즈온 형식으로 정리합니다.
왜 호스트 OS에 직접 들어가지 않는가?
안건 A에서는 Python 3.10, 안건 B에서는 Python 3.12가 필요……라고 하는 버전의 충돌은 일상차반사입니다. Docker를 사용하면 애플리케이션 실행 환경과 미들웨어를 별도의 일회용 컨테이너로 격리할 수 있습니다. PC를 신조했을 때도 리포지토리를 클론하고 명령을 1발 두드리는 것만으로 엄청나게 다른 개발 환경이 즉시 재현됩니다.
실천 : 웹 앱 + DB의 최소 구성 compose.yaml
다음은, Node.js 환경과 PostgreSQL 데이타베이스를 연계시키는 표준적인 compose.yaml 의 기술예입니다.
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- DATABASE_URL=postgres://devuser:devpass@db:5432/devdb
depends_on:
- db
db:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_USER: devuser
POSTGRES_PASSWORD: devpass
POSTGRES_DB: devdb
volumes:
- db-data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
db-data:
개발을 원활하게 진행하기 위한 2대 Tips
- 핫 리로드 및 볼륨 마운트: 호스트측 소스 코드 변경을 즉시 반영하기 위해 현재 디렉토리를 컨테이너 내에 바인드 마운트(
.:/app)합니다. 다만, 컨테이너내의node_modules나 가상 환경이 호스트측의 하늘 폴더로 덧쓰기되지 않게, 익명 볼륨으로 보호하는 것이 포인트입니다. - VS Code Dev Containers의 활용: 에디터의 확장 기능 「Dev Containers」를 조합하면, VS Code 자체를 컨테이너내에서 기동해, 컨테이너측의 보완 엔진이나 린터를 호스트와 변함없는 조작감으로 원활하게 이용할 수 있습니다.
깨끗하고 재현성이 높은 개발 기반을 얻고 코드를 작성하는 것에만 집중합시다.

