랠릿에 Next.js standalone 옵션 적용하기
·2023.09.18 22:00
Next.js의 standalone 옵션을 적용하여 랠릿의 Docker 이미지 크기를 줄이고 배포 시간을 단축했다.
인프랩의 채용 서비스인 **랠릿(Rallit)**은 기존에 약 4.67GB에 달하는 무거운 Docker 이미지를 사용해 왔습니다. 이를 해결하기 위해 Next.js의 standalone 옵션을 도입하여 배포 환경에 필요한 최소한의 코드만 추출하는 최적화를 진행했습니다.
standalone 옵션을 적용하면 빌드 결과물로 /standalone 폴더가 생성되며, 이를 통해 Docker 이미지 사이즈를 획기적으로 줄이고 Amazon ECR로의 push/pull 시간을 단축하여 전체적인 배포 속도를 개선할 수 있습니다.
주요 구현 사항은 다음과 같습니다:
- 모노레포 대응: Next.js v12 환경의 모노레포에서 발생하는 경로 문제를
outputFileTracingRoot옵션으로 해결했습니다. - 사전 로드 모듈 설정:
dd-trace,pino-logger등 실행 전 로드가 필요한 모듈을Dockerfile의NODE_OPTIONS를 통해preload.js로 처리했습니다. - 정적 파일 관리: standalone 빌드 시 제외되는
/static및/public폴더를 별도로 복사하여 서비스 운영에 필요한 자원을 확보했습니다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.