섹션 9 - "빌드 전용" 컨테이너 ~ 모듈 요약

1. 빌드 전용 컨테이너 만들기

🔹 개발 vs 프로덕션 환경 비교

구분
개발 (Development)
프로덕션 (Production)

실행 방식

npm start

npm run build + 정적 서버

특징

라이브 리로드, Node 서버 필요

최적화된 JS/CSS만 필요, Node 불필요

필요 요소

개발 서버 (React Dev Server)

정적 파일 제공 서버 (ex. nginx)


🔹 React 배포 흐름 요약

  1. React 앱은 개발/배포 환경에 따라 실행 방식이 다름

  2. npm run build/build 폴더 생성

  3. 개발 서버 Dockerfile과는 별도로 배포용 Dockerfile.prod 필요


2. Dockerfile.prod 구성

FROM node:14-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
  • 실행 서버 없이 빌드 전용

  • CMD, EXPOSE 없음 → 오직 빌드만 수행


3. 멀티 스테이지 빌드 소개

🔹 개념

  • 하나의 Dockerfile에 여러 FROM 단계 정의 가능

  • 빌드 결과를 다음 스테이지에서 재사용

  • 최종 이미지는 가볍고 보안성 높음

🔹 필요성

목적
설명

최적화

중간 산출물 제거

보안

개발 도구 제거

경량화

빌드와 실행 환경 분리

관리

하나의 Dockerfile로 빌드+배포 모두 수행


4. 멀티 스테이지 Dockerfile 예시


5. -target 옵션 이해하기

🔹 개념

  • 멀티 스테이지에서 특정 단계만 빌드 가능

🔹 예시

🔹 활용 상황

상황
활용

CI 테스트

✅ 빌드 단계만 사용

유닛 테스트용 이미지

✅ 특정 스테이지만 사용

전체 배포

❌ 전체 빌드 필요


6. React 앱 이미지 빌드 및 Docker Hub 푸시

  • 빌드 경로 지정: f, 태그 지정: t, 빌드 대상: ./frontend


7. React 앱 ECS 배포 흐름

🔹 문제: 프론트 & 백엔드 모두 포트 80 사용 불가 (ECS 태스크 충돌)

🔹 해결:

  • React 프론트엔드를 별도 태스크/서비스로 배포

  • 각 서비스 별로 로드 밸런서 설정

🔹 요청 주소 문제 해결

  • React 앱은 브라우저에서 실행되므로 localhost 사용 불가

  • 환경변수로 주소 분기 처리 필요


8. 환경 변수 주입

  • Docker 컨테이너 내부에서 React 앱은 process.env 직접 접근 불가

  • .env.production 파일 활용하거나 빌드 시 환경변수 지정 필요

  • 변수 이름은 반드시 REACT_APP_ prefix 필요


9. 정리 요약표

항목
설명

빌드 방식

npm run build로 정적 리소스 생성

배포 방식

nginx 정적 서버에서 제공

Dockerfile.prod

멀티 스테이지 (Node → nginx)

--target

특정 스테이지만 빌드할 때 사용

환경변수

.env.production로 주입 필요

ECS 구성

프론트/백엔드 각자 서비스 + ALB 필요


10. 클라우드 확장 전략

🔹 클라우드별 원리는 동일

  • Docker 기반 배포는 GCP, Azure, Oracle Cloud 등에도 적용 가능

  • EC2 직접 설치 or 관리형 서비스(ECS/GKE) 모두 지원

🔹 전략 요약

방식
설명

자체 설치

EC2 등 리눅스에 수동 배포, 유연성 ↑

관리형

ECS, GKE 등 자동화 환경, 확장성 ↑

💡 Dockerfile과 Compose 기반 설정은 모든 클라우드 플랫폼에 이식 가능

Last updated