10분 안에 끝내는 Amplify 배포: NextJS를 Amplify로 배포하기

amplify
amplify

안녕하세요. 독자님들. 이번 아티클에서는 제가 즐겨 사용하는 NextJS 13을 Amplify에 배포하는 과정을 적어보려 합니다. 물론 NextJS 12라고 해서 크게 다를거는 없으니 천천히 따라하시면 금방 배포하실 수 있을거예요.


1) Amplify Hosting 시작하기

Amplify main
Amplify 메인

제일 간단한 챕터입니다. '시작하기' 버튼을 클릭해주세요.

Amplipy start hosting
Amplify 호스팅 시작하기

원하시는 형상관리 툴을 선택하고 '계속'을 눌러주세요.

Choose repository
레파지토리 선택

레파지토리를 선택해주세요.

2) 환경변수 및 빌드 설정하기

만약, 독자님들의 제품이 nextauth를 활용한 인증 관리, 그리고 데이터베이스 통신 등의 기능이 있어서 환경 변수가 있다면 무턱대고 '다음'을 누르지 마세요. 물론 만약 '다음'을 눌렀더라도 수정은 가능합니다.

먼저 환경변수를 살펴볼게요.

a) 환경 변수 설정하기

Environment variant
환경 변수 설정

환경 변수는 '고급 설정'을 클릭하여 확장해서 설정할 수 있습니다. 제품에 필요한 환경변수 값을 추가해주세요.

환경 변수는 추 후 빌드 설정에서 별도의 세팅이 필요합니다. 저는 다음과 같은 환경 변수를 추가했다고 가정하겠습니다:

DATABASE_URL=example-db.com
DATABASE_USER=example-user
DATABASE_PASSWORD=example-password
NEXTAUTH_URL=https://dirtycoders.net
NEXTAUTH_URL_INTERNAL=https://dirtycoders.net
NEXTAUTH_URL_SECRET=secret-dt
<p dir="ltr"><span>.env.production</span></p>

자. 이제 독자님들의 .env.production 에 맞게 환경 변수 설정을 해주세요.

모두 설정이 되셨다면 빌드 설정 챕터로 넘어갑시다.

b) 빌드 설정 하기

빌드 설정

기본적인 빌드 설정은 위와 같을거예요. 저는 npm 을 사용하기에 다음과 같이 변경해줬습니다:

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci # <-- changed
    build:
      commands:
        - npm run build # <-- changed
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
      - .next/cache/**/* # <-- changed

<– changed 문구가 있는 곳이 변경되었습니다. 하단에 cache.paths 에 추가된 .next/cached 경로도 함께 추가해주세요. 이는 nextjs 캐시를 사용하기 위함입니다.

그리고 조금 더 수정할게요. 지금 상태로 빌드를 하게 되면 환경 변수를 읽을 수가 없 습니다. 환경 변수를 참조하려면 다음과 같이 설정해주세요.

💡

b) 빌드 설정하기에서 설정된 .env.production 를 기준으로 작성하겠습니다.

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - env | grep -e DATABASE_URL -e DATABASE_USER -e DATABASE_PASSWORD -e NEXTAUTH_SECRET -e NEXTAUTH_URL -e NEXTAUTH_URL_INTERNAL >> .env.production # <-- changed
        - cat .env.production # <-- changed
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
      - .next/cache/**/*
<p dir="ltr"><span>환경 변수를 읽도록 수정된 amplify.yml</span></p>

npm run build - env | grep -e DATABASE_URL -e DATABASE_USER -e DATABASE_PASSWORD -e NEXTAUTH_SECRET -e NEXTAUTH_URL -e NEXTAUTH_URL_INTERNAL >> .env.production 가 추가되었습니다. 이것은 환경 변수에 설정된 값을 node가 읽을 수 있도록 .env.production 파일을 생성하고 빌드 하게 합니다.

그리고 cat .env.production 을 추가했는데요. 해당 행은 나중에 빌드에러가 발생하였을 때 환경 변수 체크 디버깅 용으로 추가한 것이니 패스해도 됩니다. 😉

이제 남은건 '다음'만 눌러주시면 됩니다. 😁

축하합니다. 🎉🎉

이제 남은건 배포가 될 때까지 기다리는 것 뿐이예요. 만약 도메인 네임 서비스를 사용하시고 싶으시다면 Route53을 통해서 도메인을 구매하고 Amplify 에 연결하시면 됩니다.

Q1) 빌드에서 에러가 발생했어요.

괜찮아요. 로그는 모든걸 알려줍니다.

  1. Amplify 사이드 바에 모든 앱 하단에 있는 독자님의 앱으로 이동합니다.
  2. X 라고 표시된 빌드 에러를 클릭하세요.
  3. 로그를 다운로드해주세요.
  4. 다운로드 된 로그를 통해서 어떤 에러가 발생했는지 알 수 있습니다.

간혹, !!! Build failed 라던지, Non-Zero Exit Code detected 같은 원인을 유추하기 어려운 에러가 발생하기도 합니다. 이럴 때는 amplify.yml 에서 로그를 찍어가며 디버깅을 할 수도 있습니다.

Q2) 배포된 주소로 접속하니 Application error가 발생했어요.

Application error: a server-side exception has occurred (see the server logs for more information). 라는 에러가 발생하셨나요?

걱정하지 마세요. 로그를 확인하면 대강적인 내용을 유추해볼 수 있습니다. 다음 과정을 따라해주세요.

  1. AWS에서 Cloud watch를 검색합니다.
Cloud Watch
  1. 그리고 /aws/amplify/ 로 시작하는 로그를 클릭하고 로그를 확인해봅니다.

로그 확인해보시고 문제를 해결하시면 됩니다. 👍


마치며

함께 읽으면 좋은 글

벌써 NextJs 14가 나온다고?: NextJs 14 버전 소식
안녕하세요 독자님들. 현재 국내 웹 프레임 워크 중 가장 많이 사용되는 NextJs의 새로운 버전이 나왔습니다. NextJs 14 버전에서는 어떤 변화가 있는지 같이 알아보도록 합시다. 🚀🚀 Turbocharged 컴파일러의 등장 NextJs 13 버전부터 로컬 개발 성능의 향상에 주력해왔습니다. 이를 위해 next dev와 NextJs의 다른 부분들을 재작성하는 작업을 진행했습니다. 그러나 접근 방식을 변경하여 더
모달, 다이어로그 어떤 차이일까?: Modal vs Dialog
모달과 다이어로그, 이 두 용어는 사용자 인터페이스를 설계하거나 개발할 때 자주 마주치는 용어입니다. 그렇다면 이 둘은 어떤 차이가 있을까요? 이 문서는 그 차이점과 각각 어떻게 활용되는지에 대해 설명하고자 합니다. 목차 모달 (Modal)의 정의와 특징 요약 * 모달은 사용자의 주의를 끌기 위해 현재 화면 위에 새로운 작은 창이나 뷰를 올리는 UI