Containers
개요
컨테이너는 앱을 실행에 필요한 모든 것(코드, 라이브러리, 시스템 도구)과 함께 하나의 이식 가능한 묶음으로 패키징합니다. 그 묶음은 노트북에서든, 테스트 서버에서든, 클라우드에서든 똑같이 실행되어, 고전적인 "내 컴퓨터에서는 되는데" 문제를 없애줍니다. 가장 널리 쓰이는 빌드 도구는 Docker입니다.
강점
- 어디서나 일관된 환경 — 한 번 빌드하면 어디서든 실행.
- 런타임, OS 패키지, 의존성에 대한 완전한 제어.
- 일단 실행되면 콜드 스타트 없음. 꾸준한 트래픽에 적합.
- 클라우드 제공업체 간 이식 가능하여 강한 종속을 피함.
- 장기 실행 프로세스를 포함해 어떤 언어나 프레임워크든 지원.
트레이드오프
- 베이스 이미지, 업데이트, 리소스 사이징 등 직접 관리할 것이 더 많음.
- 오케스트레이터(예: Kubernetes)를 추가하지 않으면 확장이 자동이 아니며, 그 자체로 상당한 복잡성을 더함.
- 실행 중인 컨테이너는 유휴 상태에서도 비용이 듦.
- 이미지가 클수록 빌드와 배포가 느려짐.
- 이미지의 보안 패치는 직접 책임져야 함.
언제 쓰면 좋은가
일관되고 완전히 제어되는 환경이 필요할 때 컨테이너를 선택하세요. 특정 시스템 의존성이 있는 앱, 장기 실행 서비스, 백그라운드 워커, 또는 서버리스와 엣지 함수의 한계를 넘어서는 모든 것에 적합합니다.
바이브 코딩 적합성
컨테이너는 AI 주도 대상으로 강력합니다. Dockerfile은 그저 레시피이고, 에이전트는 레시피 작성에 능하기 때문입니다. AI에게 Dockerfile, .dockerignore, 배포 명령을 생성하게 한 뒤, 빌드 오류를 다시 읽어주며 반복하면 됩니다. 팁: 작은 베이스 이미지(예: alpine이나 slim 변형)와 멀티 스테이지 빌드를 요청하세요. 이렇게 하면 이미지가 가벼워지고, 빌드가 빨라지며, 공격 표면이 작아집니다. Fly.io, Google Cloud Run, Railway 같은 플랫폼은 명령 한 번으로 컨테이너를 배포할 수 있습니다.
# Dockerfile — multi-stage Node app
FROM node:20-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
CMD ["node", "server.js"]
# 로컬에서 빌드하고 실행
docker build -t my-app .
docker run -p 3000:3000 my-app