TIL

Node 도커 이미지 메모리 용량 줄이는 방법

하얀잔디 2025. 7. 24. 20:22

Node가 한 서버당 약 380메가 정도 먹고있었는데 줄이는 법을 찾았다!!

 

 

 

24일 기준 5G -> 2.5G로 줄었다!

 

 

어떻게했냐?

 

도커 이미지 말떄 빌드  + 실행을 이미지/컨테이너에서 했는데

 

이제는 빌드된 결과물만 가지고 실행해서그럼!!

 

기존 코드 ( 예시)

 

FROM node:18

 

WORKDIR /app

COPY . .

RUN npm install && npm run build

 

CMD ["npm", "start"]

 

->

 

지금 방식: 빌드된 결과물만 가지고 실행

 

 

# --- 빌드 단계 ---
FROM node:18 AS builder

WORKDIR /app
COPY . .
RUN npm install && npm run build

# --- 런타임 단계 ---
FROM node:18-alpine

WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

 

 

왜 메모리가 줄어들었나?

 

1. 불필요한 코드와 라이브러리가 없어짐

  • 예전엔 빌드 도구 (예: webpack, typescript, eslint 등)도 컨테이너에 들어있었어.
  • 이런 도구들은 Node.js가 실행되면서 직접 사용하진 않아도, 메모리를 차지할 수 있음 (특히 일부 메모리 캐시나 preload).
  • 지금은 실행에 꼭 필요한 코드만 존재하니까 가볍지.

2. 개발 의존성(devDependencies) 제거

  • 예전: npm install로 devDependencies도 같이 설치됨
  • 지금: npm install --only=production 또는 NODE_ENV=production 으로 실제 서비스에 필요한 라이브러리만 설치

 

 

➡️ 불필요한 대형 패키지들 (예: webpack, eslint, ts-node)이 빠짐
➡️ → 메모리 점유량 감소