brunch

Next.js의 output:standalone

Nextjs의 output: standalone 옵션과 트러블슈팅

by 글러닝

최근 Next.js 프로젝트에 output: standalone 옵션을 추가했습니다.

빌드 크기를 줄여준다는 말에 선뜻 도입했지만 예상치 못한 에러를 해결하느라 진땀 뺀 트러블슈팅 과정과 standalone 옵션에 대해 간단하게 기록합니다.


output: standalone?


https://nextjs.org/docs/app/api-reference/next-config-js/output

Next.js에서 제공하는 빌드 옵션입니다.


This feature helps reduce the size of deployments drastically. Previously, when deploying with Docker you would need to have all files from your package’s dependencies installed to run next start. Starting with Next.js 12, you can leverage Output File Tracing in the .next/ directory to only include the necessary files.


이전에는 어플리케이션을 실행하기 위한 모든 의존성을 포함 했어야 하는데요, 이 옵션을 사용하면 필요한 의존성 파일만 빌드 결과물에 포함 시킬 수 있습니다.


결과적으로 빌드된 도커 이미지 크키가 50% 정도 감소(900MB > 450MB)된 것을 확인할 수 있었습니다 �


하지만 몇 일 뒤, datadog 성능 모니터링이 동작하지 않는걸 확인하고 디버깅을 시작합니다 ..

sticker sticker

(* datadog은 어플리케이션의 성능 측정 자동화, 로깅 등을 도와주는 툴입니다. datadog에 관한 지식이 없어도 글을 읽는데 크게 문제가 없습니다.)


troubleshooting


위에 설명했듯, output: standalone 옵션을 적용하면 사용되는 의존성 파일만 빌드 결과물에 포함 시키는데요, datadog을 어플리케이션에 적용하는 dd-trace 라이브러리가 빌드 결과물에 포함되지 않아 동작하지 않고 있었습니다.


기존에는 next.config.js 파일에 위치하고 있었는데요,

page router를 사용한다면 _document.ts 파일에서

app router를 사용한다면 app/layout.ts 파일에서

dd-trace를 import 하면 실제로 사용하는 라이브러리로 인식되어 정상적으로 빌드 결과물에 포함됩니다.


준비가 성실하지 못해서 짧은 글이 되었네요.
다음주 월요일에는 좀 더 질 높은 글로 뛰어보겠습니다 �






keyword
매거진의 이전글node.js의 OOM — 범인을 찾아서 Part.2