이번 포스트에서는 자바스크립트 앱을 도커 컨테이너로 배포하는 최적화 방법에 대해 알아보겠습니다. 도커는 애플리케이션을 컨테이너로 실행하기 위한 오픈소스 플랫폼이며, 애플리케이션의 배포 및 실행을 간단하게 관리할 수 있도록 지원합니다.
1. 앱의 종속성 관리하기
도커 컨테이너를 사용하여 앱을 배포할 때, 앱이 의존하는 라이브러리 및 패키지들을 정확하게 관리하는 것이 중요합니다. 이를 위해 package.json
파일을 사용하여 앱의 종속성을 명시하고, 도커 이미지 빌드 과정에서 패키지들을 설치하는 스크립트를 작성하는 것이 좋습니다.
...
COPY package.json .
RUN npm install
...
위의 예시에서는 package.json
파일을 현재 디렉토리로 복사한 후 npm install
명령어를 통해 패키지들을 설치하고 있습니다.
2. 멀티스테이지 빌드를 활용하기
도커 빌드 과정에서는 여러 단계의 이미지를 생성할 수 있는 멀티스테이지 빌드를 활용하여 불필요한 종속성을 제거하고 앱의 용량을 최적화할 수 있습니다. 불필요한 빌드 도구나 개발용 패키지는 최종 이미지에 포함되지 않도록 조치해야 합니다.
# 빌드 단계
FROM node:14 as builder
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
# 실행 단계
FROM nginx:latest
COPY --from=builder /app/build /usr/share/nginx/html
위의 예시에서는 먼저 builder
라는 이름의 이미지를 생성하여 빌드 과정을 수행하고, 그 다음 nginx
를 기반으로한 최종 이미지를 생성하여 실행 단계에서 필요한 파일들만 포함시키고 있습니다.
3. 캐시 활용하기
도커 빌드 과정에서 캐시를 적절히 활용하여 이미지 빌드 시간과 용량을 최적화할 수 있습니다. 주요 종속성을 먼저 설치하고, 그 다음 변경되지 않는 파일들을 복사하는 방식으로 도커 이미지를 빌드하면, 변경사항이 없을 경우에는 이전에 캐시된 이미지를 사용하여 빌드를 더 빠르게 수행할 수 있습니다.
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
위의 예시에서는 package.json
및 package-lock.json
파일을 먼저 복사하고 패키지를 설치한 후, 변경되지 않는 파일들을 복사하는 방식으로 캐시를 활용하고 있습니다.
4. 환경별 설정 분리하기
자바스크립트 앱의 경우, 개발 환경(development), 테스트 환경(test), 운영 환경(production) 등 각각 다른 설정이 필요할 수 있습니다. 도커 컨테이너를 사용하여 앱을 배포할 때에는 이러한 설정들을 분리하여 관리하는 것이 좋습니다.
# 개발 환경
FROM node:14 as development
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
# 운영 환경
FROM nginx:latest as production
COPY --from=development /app/build /usr/share/nginx/html
위의 예시에서는 development
환경에는 npm run start
명령어를 사용하여 개발 서버를 실행하고, production
환경에는 빌드한 파일들을 nginx에 복사하여 정적 파일 서버로 사용하는 방식으로 환경별로 다른 설정을 분리하였습니다.
이상으로 자바스크립트 앱을 도커 컨테이너로 배포할 때의 최적화 방법에 대해 알아보았습니다. 도커를 사용하면 앱을 보다 쉽고 효율적으로 배포할 수 있으며, 위에서 소개한 방법들을 참고하여 앱의 배포 과정을 최적화할 수 있습니다.