* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.
* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.
1. Docker의 개념 및 사용 이유
배경 및 개념

- Docker란?
- Docker는 애플리케이션과 그 실행에 필요한 라이브러리, 설정, 의존성 등을 하나의 단위(컨테이너)로 패키징하여 어느 환경에서도 일관되게 실행할 수 있도록 해주는 플랫폼입니다.
사용 이유
환경 일관성 확보:
- 개발, 테스트, 운영 등 각 환경마다 발생할 수 있는 설정 및 의존성 불일치를 해소합니다.
빠른 배포 및 확장:
- 경량화된 컨테이너를 통해 서버 자원을 효율적으로 사용하며, 수평적 확장이 용이합니다.
효율적인 의존성 관리:
- 필요한 라이브러리와 패키지를 이미지 내에 명시함으로써 개발자와 운영자가 동일한 실행 환경을 공유할 수 있습니다.
2. 웹 개발 파이프라인 내 Docker의 역할
파이프라인 단계 및 Docker 활용
코드 작성 및 Dockerfile 작성
-
개발자가 애플리케이션 코드를 작성한 후, 실행 환경을 정의하는 Dockerfile을 작성합니다.
-
예시: Node.js 애플리케이션의 경우, Node.js 공식 이미지를 기반으로 필요한 모듈을 설치하도록 명시합니다.
이미지 빌드
- docker build 명령어를 사용하여 Dockerfile에 정의된 내용을 바탕으로 애플리케이션 이미지를 생성합니다.
컨테이너 실행 및 테스트
- 빌드된 이미지를 기반으로 docker run 명령어로 컨테이너를 생성하고, 애플리케이션이 정상 동작하는지 검증합니다.
멀티 컨테이너 구성 (Docker Compose 활용)
- 웹 서버, 데이터베이스, 캐시 등 여러 서비스가 필요할 경우, Docker Compose를 사용해 각 컨테이너 간 네트워킹과 의존성을 YAML 파일로 관리합니다.
CI/CD 파이프라인 통합
-
코드 변경 시 자동으로 이미지를 빌드, 테스트, 배포하는 파이프라인에 Docker를 포함시켜 일관된 환경을 유지합니다.
-
이러한 단계들은 개발부터 배포까지의 전 과정에서 환경 차이로 인한 문제를 최소화하고, 개발자와 운영팀 간의 소통을 원활하게 합니다.
번외 - 웹 개발 파이프라인?

1. 개념 이해
-
웹 애플리케이션은 개발부터 배포, 운영까지 여러 단계의 작업을 필요로 합니다.
-
이러한 복잡한 과정을 일관되게 관리하고 자동화하기 위해 웹 개발 파이프라인이라는 개념이 도입되었습니다.
-
이는 개발자가 작성한 코드가 최종 사용자에게 전달되기까지의 전 과정을 체계적으로 연결한 '작업 흐름'입니다.
2. 웹 개발 파이프라인의 개념
- 웹 개발 파이프라인은 소스 코드 관리, 빌드, 테스트, 배포, 모니터링 등의 단계들을 하나의 자동화된 프로세스로 연결하여, 애플리케이션이 안정적이고 일관되게 개발 및 운영될 수 있도록 하는 체계입니다.
버전 관리:
- Git과 같은 도구를 사용해 소스 코드를 관리하고, 변경 사항을 기록합니다.
자동화 빌드:
- 코드를 컴파일하거나 패키징하는 과정을 자동화하여, 반복적인 수동 작업을 줄입니다.
테스트:
- 유닛 테스트, 통합 테스트 등 자동화된 테스트를 통해 코드의 안정성을 검증합니다.
배포:
- CI/CD 도구(Jenkins, GitLab CI, GitHub Actions 등)를 활용해 스테이징 및 운영 환경에 자동으로 배포합니다.
모니터링:
- 배포 후 애플리케이션의 성능, 로그, 오류 등을 실시간으로 모니터링하여 문제를 신속하게 파악합니다.
- 이러한 각 단계가 연속적으로 실행됨으로써, 개발-배포 사이클의 효율성과 품질을 높일 수 있습니다.
3. 단계별 구성 및 실행 가능한 방안
3.1 코드 커밋 및 버전 관리
실행 방안:
- Git과 같은 버전 관리 시스템을 통해 소스 코드를 관리하고, 브랜치 전략(예: Git Flow)을 도입합니다.
효과:
3.2 자동화 빌드
실행 방안:
- Dockerfile이나 빌드 스크립트를 작성하여 애플리케이션 이미지를 생성합니다.
- 빌드 도구(예: Maven, Gradle, Webpack 등)를 사용해 코드 컴파일 및 번들링 작업을 자동화합니다.
효과:
- 일관된 빌드 결과물을 생성, 환경 차이로 인한 오류 감소
3.3 자동화 테스트
실행 방안:
- 유닛 테스트, 통합 테스트, E2E 테스트를 자동화하여 CI 서버에서 실행되도록 설정합니다.
- 코드 커밋 시 자동으로 테스트를 실행하여 문제를 조기에 발견합니다.
효과:
3.4 배포 자동화 (CI/CD)
실행 방안:
- CI/CD 도구(Jenkins, GitLab CI, GitHub Actions 등)를 사용해 빌드, 테스트, 배포를 자동화합니다.
- 스테이징 환경과 운영 환경에 대한 배포 전략(예: 롤링 업데이트, 블루/그린 배포)을 마련합니다.
효과:
- 반복적인 배포 작업의 자동화, 신속한 피드백 및 배포 속도 향상
3.5 모니터링 및 피드백
실행 방안:
- 배포된 애플리케이션에 대해 모니터링 도구(예: Prometheus, Grafana, ELK 스택 등)를 적용합니다.
- 로그, 성능, 사용자 피드백 등을 실시간으로 분석하여 문제 발생 시 즉각 대응합니다.
효과:
- 운영 환경에서 발생하는 문제를 빠르게 인지하고 수정
4. 기대 효과
개발 효율성 향상:
- 자동화된 프로세스로 개발자는 코딩에 집중할 수 있으며, 반복 작업 부담이 줄어듭니다.
품질 보증:
- 지속적인 테스트와 모니터링을 통해 오류를 사전에 발견하고 개선할 수 있습니다.
일관성 있는 배포:
- 동일한 빌드 및 배포 과정을 반복함으로써, 개발, 테스트, 운영 환경 간의 불일치 문제를 최소화합니다.
3. Docker의 컨테이너와 이미지
개념 정리
이미지(Image):
- 애플리케이션 실행에 필요한 모든 구성 요소(코드, 라이브러리, 설정 등)를 포함하는 읽기 전용 템플릿입니다.
컨테이너(Container):
- 이미지를 실행한 상태로, 독립적인 프로세스로서 격리된 환경 내에서 애플리케이션이 동작합니다.
주요 특징
경량화:
- 컨테이너는 전체 운영체제를 포함하지 않고 필요한 부분만 패키징하여, VM보다 빠르게 실행되고 리소스 사용이 효율적입니다.
격리성:
- 각 컨테이너는 서로 독립적으로 실행되므로, 한 컨테이너의 변경이 다른 컨테이너에 영향을 주지 않습니다.
이식성:
- 이미지를 통해 개발환경에서 그대로 운영환경으로 이전할 수 있어 "내 컴퓨터에서는 잘 되는데" 문제를 해결합니다.
4. Windows 환경에서 Docker 설치 및 사용 방법
Windows에서 Docker 설치 전 준비 사항
시스템 요구 사항:
Windows 10 Pro, Enterprise 또는 Windows 11 (WSL2 지원 권장)
- 만약 Home 에디션을 사용 중이라면, Docker Desktop의 WSL2 백엔드를 활용하거나 Docker Toolbox를 고려합니다.
설치 및 설정 단계
Docker Desktop 다운로드
- Docker 공식 다운로드 페이지에서 Windows용 Docker Desktop 설치 파일을 다운로드합니다.
설치 진행
- 다운로드한 설치 파일을 실행하고, 설치 마법사의 안내에 따라 설치를 진행합니다.
설치 과정에서 WSL2 백엔드를 활성화하는 옵션이 있다면 선택합니다.
설치 확인
- 설치 완료 후, Docker Desktop을 실행하여 설정 및 초기 구성을 마칩니다.
- 커맨드 프롬프트나 PowerShell에서 docker --version 명령어를 입력해 설치가 정상적으로 이루어졌는지 확인합니다.
간단한 테스트 실행
- docker run hello-world 명령어를 실행하여 Docker가 정상적으로 컨테이너를 실행하는지 테스트합니다.
- 이 명령어는 Docker Hub에서 테스트용 이미지를 다운로드해 간단한 메시지를 출력합니다.
Windows에서 Docker 사용 예시
Dockerfile 작성 및 이미지 빌드 예시 (Node.js 애플리케이션):
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
이미지 빌드 및 컨테이너 실행:
복사
docker build -t my-node-app .
복사
docker run -p 3000:3000 my-node-app
- 이와 같이 Windows 환경에서도 Docker Desktop을 통해 손쉽게 Docker를 설치하고, Dockerfile 작성부터 이미지 빌드, 컨테이너 실행까지 일련의 웹 개발 파이프라인을 구성할 수 있습니다.
5. 기대 효과 및 검증 절차
기대 효과
일관된 실행 환경:
- 개발부터 운영까지 동일한 이미지를 사용하므로 환경 차이로 인한 오류가 크게 줄어듭니다.
효율적 배포:
- 컨테이너 기반의 배포로 빠르고 안정적인 애플리케이션 배포가 가능해집니다.
리소스 최적화:
- 경량화된 컨테이너를 통해 리소스 사용을 최소화하며, 확장성이 우수합니다.