Next.js Standalone 빌드 환경에서 pino-pretty 로그 출력 트러블슈팅: pnpm, transport, outputFileTracingIncludes 분석
🤖 AI 추천
Next.js 프로젝트에서 서버 측 로깅 라이브러리(pino)를 사용하고, 특히 standalone 빌드 환경에서 발생하는 로그 출력 문제를 해결하고자 하는 프론트엔드 개발자, 백엔드 개발자, DevOps 엔지니어에게 이 글을 추천합니다. pnpm 환경에서의 패키지 관리, Next.js의 빌드 아키텍처, 그리고 로깅 시스템의 내부 동작 원리를 이해하는 데 도움이 될 것입니다.
🔖 주요 키워드

핵심 기술
이 글은 Next.js의 standalone 빌드 환경에서 pino
와 pino-pretty
라이브러리를 사용하여 서버 측 로그를 올바르게 출력하기 위한 트러블슈팅 과정을 상세히 다룹니다. pnpm
의 심볼릭 링크 특성, pino
의 transport
옵션, 그리고 Next.js의 outputFileTracingIncludes
설정이 문제 해결의 핵심 요소입니다.
기술적 세부사항
- 문제 정의: Next.js standalone 빌드 환경에서
pino-pretty
를transport
옵션으로 설정 시unable to determine transport target for "pino-pretty"
오류 발생. - 로깅 라이브러리 선정: Node.js 진영에서 많이 사용되는
pino
와pino-pretty
라이브러리 사용 결정. - 초기 설정 시도:
pino-pretty
를dependencies
로 이동,import
구문으로 직접 가져오기 시도 등. pino-pretty
의 CommonJS:pino-pretty
가 CommonJS 형태로 작성되어 있어target
에 문자열'pino-pretty'
를 사용하는 것이 공식적으로 권장됨을 확인.- Standalone 빌드의 동작 방식: Next.js standalone 빌드는 프로덕션 배포에 필요한 최소한의 파일만 복사하며, 사용하지 않는 모듈은 트리쉐이킹되어 포함되지 않음.
outputFileTracingIncludes
활용:.next/standalone/node_modules
에pino-pretty
모듈이 누락되어 발생하는 문제를 해결하기 위해outputFileTracingIncludes
설정을 통해 명시적으로 포함.- 종속성 문제 발생:
pino-pretty
의 내부 종속성인colorette
모듈을 찾지 못하는uncaughtException
오류 발생. pnpm
의 심볼릭 링크:pnpm
은 패키지를 글로벌 store에 저장하고 심볼릭 링크로 연결하는 구조를 가지며, 이는 standalone 빌드 시 종속성 추적에 영향을 미침.node-linker=hoisted
설정:pnpm
의node-linker
설정을hoisted
로 변경하여 심볼릭 링크 대신 flat한 구조로node_modules
를 구성, 이를 통해 종속성 추적 문제를 해결.outputFileTracingIncludes
복잡성:hoisted
모드 사용 시 모든 하위 종속성을 명시적으로outputFileTracingIncludes
에 포함시켜야 하는 어려움.- @vercel/nft와 정적 참조: Next.js standalone 빌드의
@vercel/nft
라이브러리가import
,require
구문의 '정적 참조'만 추적 가능하며,pino
내부의 모듈 해석 방식이 동적 참조로 작동하여 추적되지 않음을 분석.
개발 임팩트
이 트러블슈팅 과정을 통해 Next.js standalone 빌드 환경에서 발생할 수 있는 복잡한 로깅 문제를 해결하는 실질적인 방법을 습득할 수 있습니다. 또한, Node.js 모듈 시스템, pnpm
의 패키지 관리 방식, Next.js 빌드 파이프라인에 대한 깊이 있는 이해를 얻게 되어 향후 유사한 문제 발생 시 효과적으로 대처할 수 있는 능력을 향상시킬 수 있습니다.
커뮤니티 반응
(본문에서 직접적으로 외부 커뮤니티 반응에 대한 언급은 없으나, 로깅 라이브러리 및 Next.js standalone 빌드 관련 이슈는 개발자 커뮤니티에서 자주 논의되는 주제입니다.)
📚 관련 자료
next.js
Next.js 프레임워크의 공식 GitHub 저장소로, standalone 빌드 기능 및 관련 설정, 빌드 아키텍처에 대한 깊이 있는 이해를 제공합니다. 본문에서 다루는 `outputFileTracingIncludes` 설정이 Next.js의 핵심 기능입니다.
관련도: 95%
pino
Node.js 환경에서 고성능 로깅을 제공하는 pino 라이브러리의 공식 GitHub 저장소입니다. 본문에서 문제 해결의 중심이 되는 로깅 라이브러리이며, `transport` 옵션의 동작 방식 및 내부 구현에 대한 이해를 도울 수 있습니다.
관련도: 90%
pnpm
효율적인 패키지 관리 도구인 pnpm의 공식 GitHub 저장소입니다. 본문에서 중요한 문제의 원인으로 지목된 심볼릭 링크 기반의 패키지 관리 방식과 `node-linker` 설정을 이해하는 데 필요한 정보를 제공합니다.
관련도: 85%