기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
서버 측 렌더링 애플리케이션 문제 해결
Amplify Hosting 컴퓨팅으로 SSR 앱을 배포할 때 예기치 않은 문제가 발생하는 경우 다음 문제 해결 주제를 검토하세요. 여기에서 문제에 대한 해결 방법이 보이지 않는 경우 Amplify Hosting GitHub Issues 리포지토리의 SSR 웹 컴퓨팅 문제 해결 가이드를
주제
프레임워크 어댑터를 사용하는 데 도움이 필요
프레임워크 어댑터를 사용하는 SSR 앱을 배포하는 데 문제가 있는 경우 섹션을 참조하세요모든 SSR 프레임워크에 오픈 소스 어댑터 사용.
엣지 API 경로로 인해 Next.js 빌드가 실패함
현재 Amplify는 Next.js 엣지 API 라우팅을 지원하지 않습니다. Amplify로 앱을 호스팅할 때는 엣지APIs가 아닌 미들웨어를 사용해야 합니다.
앱에 온디맨드 증분 정적 재생성이 작동하지 않음
버전 12.2.0부터 Next.js는 증분 정적 재생성(ISR)을 지원하여 특정 페이지에 대한 Next.js 캐시를 수동으로 제거합니다. 그러나 Amplify는 현재 온디맨드를 지원하지 않습니다ISR. 앱이 Next.js 온디맨드 재검증을 사용하는 경우, 앱을 Amplify에 배포하면 이 기능이 작동하지 않습니다.
애플리케이션의 빌드 출력이 허용되는 최대 크기를 초과함
현재 Amplify가 SSR 앱에 지원하는 최대 빌드 출력 크기는 220MB입니다. 앱의 빌드 출력 크기가 허용되는 최대 크기를 초과한다는 오류 메시지가 표시되면 이를 줄이기 위한 조치를 취해야 합니다.
앱의 빌드 출력 크기를 줄이려면 앱의 빌드 아티팩트를 검사하여 업데이트하거나 제거할 대규모 종속성을 식별할 수 있습니다. 먼저 빌드 아티팩트를 로컬 컴퓨터에 다운로드합니다. 그런 다음 디렉터리의 크기를 확인합니다. 예를 들어 node_modules
디렉터리에는 Next.js 서버 런타임 파일에서 참조하는 @swc
및 @esbuild
같은 바이너리가 포함될 수 있습니다. 런타임에는 이러한 바이너리가 필요하지 않으므로 빌드 후 삭제할 수 있습니다.
다음 지침에 따라 앱의 빌드 출력을 다운로드하고 AWS Command Line Interface ()를 사용하여 디렉터리의 크기를 검사합니다CLI.
Next.js 앱의 빌드 출력을 다운로드하고 검사하려면
-
터미널 창을 열고 다음 명령을 실행합니다. 앱 ID, 브랜치 이름 및 작업 ID를 자신의 정보로 변경합니다. 작업 ID에는 조사 중인 실패한 빌드의 빌드 번호를 사용합니다.
aws amplify get-job --app-id
abcd1234
--branch-namemain
--job-id2
-
터미널 출력의 ,
job
,steps
stepName: "BUILD"
섹션에서 미리 서명된 아티팩트URL를 찾습니다. 다음 예제 출력에서는 URL가 빨간색으로 강조 표시됩니다."job": { "summary": { "jobArn": "arn:aws:amplify:us-west-2:111122223333:apps/abcd1234/main/jobs/0000000002", "jobId": "2", "commitId": "HEAD", "commitTime": "2024-02-08T21:54:42.398000+00:00", "startTime": "2024-02-08T21:54:42.674000+00:00", "status": "SUCCEED", "endTime": "2024-02-08T22:03:58.071000+00:00" }, "steps": [ { "stepName": "BUILD", "startTime": "2024-02-08T21:54:42.693000+00:00", "status": "SUCCEED", "endTime": "2024-02-08T22:03:30.897000+00:00", "logUrl":
"https://aws-amplify-prod-us-west-2-artifacts.s3.us-west-2.amazonaws.com/abcd1234/main/0000000002/BUILD/log.txt?X-Amz-Security-Token=IQoJb3JpZ2luX2V...Example
-
를 복사URL하여 브라우저 창에 붙여 넣습니다.
artifacts.zip
파일이 로컬 컴퓨터에 다운로드됩니다. 이 파일이 빌드 출력입니다. -
du
디스크 사용량 명령을 실행하여 디렉터리의 크기를 검사합니다. 다음 예제 명령은compute
및static
디렉터리의 크기를 반환합니다.du -csh compute static
다음은
compute
및static
디렉터리의 크기 정보가 포함된 출력의 예입니다.29M compute 3.8M static 33M total
-
compute
디렉터리를 열고node_modules
폴더를 찾습니다. 폴더 크기를 줄이기 위해 업데이트하거나 제거할 수 있는 파일의 종속성을 검토합니다. -
앱에 런타임에 필요하지 않은 바이너리가 포함된 경우 빌드 후 앱의
amplify.yml
파일에서 빌드 섹션에 다음 명령을 추가하여 해당 바이너리를 삭제합니다.- rm -f node_modules/@swc/core-linux-x64-gnu/swc.linux-x64-gnu.node - rm -f node_modules/@swc/core-linux-x64-musl/swc.linux-x64-musl.node
다음은 프로덕션 빌드를 실행한 후 이러한 명령이 추가된
amplify.yml
파일의 빌드 명령 섹션의 예입니다.frontend: phases: build: commands: -npm run build // After running a production build, delete the files - rm -f node_modules/@swc/core-linux-x64-gnu/swc.linux-x64-gnu.node - rm -f node_modules/@swc/core-linux-x64-musl/swc.linux-x64-musl.node
메모리 부족 오류로 인해 빌드가 실패함
Next.js를 통해 빌드 아티팩트를 캐시하여 후속 빌드의 성능을 개선할 수 있습니다. 또한 Amplify의 AWS CodeBuild 컨테이너는 후속 빌드 성능을 개선하기 위해 사용자를 대신하여이 캐시를 압축하고 Amazon S3에 업로드합니다. 이로 인해 메모리 부족 오류가 발생하면 빌드가 실패할 수 있습니다.
빌드 단계에서 앱이 메모리 제한을 초과하지 않도록 하려면 다음 작업을 수행합니다. 먼저 빌드 설정의 cache.paths 섹션에서 .next/cache/**/*
를 삭제합니다. 그런 다음, 빌드 설정 파일에서 NODE_OPTIONS
환경 변수를 제거합니다. 대신 Amplify 콘솔에서 NODE_OPTIONS
환경 변수를 설정하여 노드 최대 메모리 제한을 정의합니다. Amplify 콘솔을 사용하여 환경 변수를 설정하는 방법에 대한 자세한 내용은 환경 변수 설정을 참조하십시오.
이러한 변경을 수행한 후 빌드를 다시 시도합니다. 빌드가 성공하면 빌드 설정 파일의 cache.paths 섹션에 .next/cache/**/*
를 다시 추가합니다.
빌드 성능을 개선하기 위한 Next.js 캐시 구성AWS CodeBuild
애플리케이션의 HTTP 응답 크기가 너무 큼
현재 Amplify가 웹 컴퓨팅 플랫폼을 사용하는 Next.js 12 이상 앱에 지원하는 최대 응답 크기는 5.72MB입니다. 이 한도를 초과하는 응답은 콘텐츠가 없는 504 오류를 클라이언트에 반환합니다.
컴퓨팅 앱의 시작 시간을 로컬에서 측정하려면 어떻게 해야 하나요?
다음 지침에 따라 Next.js 12 이상 컴퓨팅 앱의 로컬 초기화/시작 시간을 결정합니다. 앱의 성능을 로컬에서 Amplify Hosting과 비교하고 결과를 사용하여 앱의 성능을 개선할 수 있습니다.
Next.js Compute 앱의 초기화 시간을 로컬에서 측정하려면
-
앱의
next.config.js
파일을 열고 다음과standalone
같이output
옵션을 로 설정합니다.** @type {import('next').NextConfig} */ const nextConfig = { // Other options output: "standalone", }; module.exports = nextConfig;
-
터미널 창을 열고 다음 명령을 실행하여 앱을 빌드합니다.
next build
-
다음 명령을 실행하여
.next/static
폴더를에 복사합니다.next/standalone/.next/static
.cp -r .next/static .next/standalone/.next/static
-
다음 명령을 실행하여
public
폴더를에 복사합니다.next/standalone/public
.cp -r public .next/standalone/public
-
다음 명령을 실행하여 Next.js 서버를 시작합니다.
node .next/standalone/server.js
-
5단계에서 명령을 실행하고 서버를 시작하는 데 걸리는 시간을 기록해 둡니다. 서버가 포트에서 수신 대기 중인 경우 다음 메시지를 인쇄해야 합니다.
Listening on port 3000
-
6단계에서 서버를 시작한 후 다른 모듈을 로드하는 데 걸리는 시간을 기록해 둡니다. 예를 들어와 같은 라이브러리를 로드하는 데 10~12초
bugsnag
가 걸립니다. 로드되면 확인 메시지가 표시됩니다[bugsnag] loaded
. 6단계와 7단계의 기간을 함께 추가합니다. 이 결과는 Compute 앱의 로컬 초기화/시작 시간입니다.