콘텐츠로 이동

빌드 산출물 / 실행 방식 차이

Next.js와 Node.js(Express)는 모두 Node.js 런타임 위에서 동작하지만,
운영 관점에서는 “무엇을 실행 대상으로 삼는가”가 근본적으로 다르다.

Express는 일반적으로 엔트리 스크립트(app.js 등)를 실행하는 구조인 반면,
Next.js는 빌드 결과물을 전제로 실행되는 애플리케이션이다.

이 차이로 인해 배포, 롤백, 환경 변수 반영 방식에서 운영 기준이 달라진다.


1. Node.js(Express) 실행 흐름 (일반적인 경우)

  • 빌드 과정은 선택 사항
    • 필요 시 TypeScript transpile, bundling 등을 수행할 수 있음
  • 런타임은 특정 JS 엔트리 파일을 기준으로 동작
pm2 start app.js

Express의 경우, 빌드 산출물은 런타임의 “입력물”이지
실행 계약(contract) 자체는 아니다.


2. Next.js 실행 흐름 (운영 모드 기준)

  • 빌드 단계 필수
  • 런타임은 소스가 아닌 빌드 결과물(.next/)에 강하게 종속
npm run build
pm2 start ecosystem.config.cjs --env production --update-env

위 예시는 운영 표준 기준으로 단순화한 흐름이며,
실제 실행 정의는 ecosystem.config.cjs 에서 관리함.

  • .next/ 디렉토리는:
    • 페이지 렌더링 정보
    • 서버/클라이언트 번들
    • 정적 자산 메타데이터 를 포함한 실행에 필요한 산출물 집합

운영 모드(next start)에서는
빌드 산출물이 없거나 불완전할 경우 정상 실행이 불가능하다.


3. 운영 관점 요약

항목 Express Next.js
빌드 단계 선택적 필수 (운영 모드 기준)
실행 기준 JS 엔트리 파일 빌드 산출물
런타임-빌드 결합도 낮음 높음
배포 실패 주요 원인 코드/의존성 빌드 누락·불일치

4. 운영 기준선 (Baseline)

  • Next.js는 빌드 결과물을 실행 계약으로 간주한다
  • 배포 시:
    • npm run build 성공 여부
    • .next/ 산출물 완전성 을 반드시 검증한다
  • Express 서버와 동일한 방식의 “소스 교체 배포”를 적용하지 않는다