Build
빌드
소스 코드를 실행 가능한 형태로 변환하는 과정. 컴파일, 패키징 포함.
빌드
소스 코드를 실행 가능한 형태로 변환하는 과정. 컴파일, 패키징 포함.
빌드(Build)는 소스 코드를 실행 가능한 소프트웨어 아티팩트로 변환하는 과정입니다. 컴파일, 링킹, 의존성 해결, 테스트 실행, 패키징 등 여러 단계를 포함하며, 현대 소프트웨어 개발에서 자동화의 핵심입니다.
빌드 과정은 언어와 플랫폼에 따라 다릅니다. Java는 컴파일 후 JAR/WAR로 패키징, JavaScript는 번들링과 트랜스파일링, Go는 정적 바이너리 생성, Python은 wheel 패키지를 만듭니다. 컨테이너 환경에서는 Docker 이미지가 최종 아티팩트입니다.
빌드 도구는 의존성 관리와 빌드 자동화를 담당합니다. Maven/Gradle(Java), npm/yarn(JavaScript), pip/poetry(Python), cargo(Rust) 등 언어별 도구가 있고, Bazel, Make 같은 범용 도구도 있습니다.
실무에서 빌드는 CI/CD 파이프라인의 시작점입니다. 코드 푸시마다 자동으로 빌드하고 테스트하며, 성공 시 아티팩트를 저장소에 푸시합니다. 빌드 시간 최적화, 캐싱, 병렬 빌드는 개발자 생산성에 직접적인 영향을 미칩니다.
# Dockerfile - 멀티스테이지 빌드 예제
# 1단계: 빌드 환경
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
# 의존성 설치 (캐시 활용을 위해 별도 레이어)
RUN npm ci --only=production
COPY . .
RUN npm run build
# 2단계: 프로덕션 환경 (최소 이미지)
FROM node:20-alpine AS production
# 보안: 비루트 사용자
RUN addgroup -g 1001 -S nodejs && \
adduser -S nextjs -u 1001
WORKDIR /app
# 빌드 아티팩트만 복사
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
CMD ["node", "dist/server.js"]
시니어: "빌드 시간이 8분인데, PR마다 기다리기 너무 길어요. 병렬 빌드랑 캐시 적용해서 3분 이내로 줄여봅시다."
주니어: "Docker 레이어 캐시가 자꾸 깨지는 것 같아요."
시니어: "COPY 순서 문제일 거예요. 변경 빈도 낮은 건 먼저 복사하고, package.json 따로 복사해서 npm install 캐시 활용하세요."
면접관: "Docker 멀티스테이지 빌드의 장점은 무엇인가요?"
지원자: "빌드 환경과 런타임 환경을 분리할 수 있습니다. 빌드에 필요한 도구들은 최종 이미지에 포함되지 않아 이미지 크기가 작아지고, 공격 표면도 줄어들어 보안상 이점이 있습니다."
리뷰어: "npm install 대신 npm ci 쓰면 lock 파일 기준으로 설치해서 더 결정적(deterministic)인 빌드가 됩니다."
개발자: "맞아요, CI 환경에서는 npm ci가 더 적합하네요. 로컬 개발용 Dockerfile과 분리하겠습니다."