icon안동민 개발노트

다른 호스팅 플랫폼에 배포하기


 Next.js App Router 애플리케이션을 Vercel 외의 다른 호스팅 플랫폼에 배포하는 방법을 알아보겠습니다.

 각 플랫폼의 특징, 배포 과정, 그리고 고려사항을 중심으로 설명하겠습니다.

1. AWS (Amazon Web Services)

 AWS는 다양한 배포 옵션을 제공하며, Next.js App Router 애플리케이션을 위한 주요 옵션은 다음과 같습니다.

 a. AWS Elastic Beanstalk

  1. 배포 과정 :
  • AWS Elastic Beanstalk 환경 생성 (Node.js 플랫폼 선택)
  • next build 실행 후 생성된 .next 폴더, package.json, next.config.js 파일을 포함한 소스 번들 업로드
  • 환경 변수 설정 (NODE_ENV=production 등)
  1. 장점 :
  • 쉬운 스케일링 및 로드 밸런싱
  • 완전 관리형 서비스
  1. 단점 :
  • 서버리스 옵션에 비해 비용이 높을 수 있음

 b. AWS Lambda + API Gateway

  1. 배포 과정 :
  • Serverless Framework 또는 AWS SAM 사용
  • Lambda 함수로 Next.js 서버 래핑
  • API Gateway를 통한 라우팅 설정
  1. 장점 :
  • 서버리스 아키텍처의 이점 (자동 스케일링, 저비용)
  • 세밀한 비용 관리 가능
  1. 단점 :
  • 콜드 스타트 시간
  • 복잡한 설정 과정

 AWS 배포 시 App Router 고려사항

  • 서버 컴포넌트와 클라이언트 컴포넌트의 올바른 처리를 위한 Node.js 환경 설정
  • 동적 라우트 및 API 라우트 처리를 위한 적절한 Lambda 함수 구성

2. Netlify

 Netlify는 정적 사이트 호스팅에 특화되어 있지만, Next.js App Router 애플리케이션도 지원합니다.

  1. 배포 과정 :
  • Netlify 계정에 GitHub 저장소 연결
  • 빌드 명령어 설정 (next build)
  • 환경 변수 구성
  1. 장점 :
  • 간편한 CI/CD 통합
  • 자동 HTTPS 및 CDN 제공
  1. 단점 :
  • 서버 사이드 렌더링(SSR) 지원이 제한적일 수 있음

 Netlify 배포 시 App Router 고려사항

  • 동적 라우트 및 API 라우트를 위한 Netlify Functions 사용
  • 정적 생성(SSG) 페이지에 대한 최적화 설정

3. DigitalOcean App Platform

 DigitalOcean의 App Platform은 Next.js 애플리케이션을 쉽게 배포할 수 있는 PaaS 솔루션입니다.

  1. 배포 과정 :
  • GitHub 저장소 연결
  • Node.js 환경 선택
  • 빌드 및 실행 명령어 설정
  1. 장점 :
  • 간편한 설정 및 관리
  • 자동 스케일링 지원
  1. 단점 :
  • 고급 커스터마이징 옵션이 제한적일 수 있음

 DigitalOcean 배포 시 App Router 고려사항

  • 서버 컴포넌트 렌더링을 위한 적절한 Node.js 버전 선택
  • 환경 변수를 통한 API 라우트 및 동적 라우트 설정

서버리스 vs 전통적 서버 배포

  1. 서버리스 배포 (예 : AWS Lambda, Netlify Functions)
  • 장점 : 자동 스케일링, 저비용, 관리 용이성
  • 단점 : 콜드 스타트 지연, 실행 시간 제한
  1. 전통적 서버 배포 (예 : AWS EC2, DigitalOcean Droplets)
  • 장점 : 완전한 제어, 긴 실행 시간 작업 가능
  • 단점 : 직접적인 서버 관리 필요, 초기 설정 복잡

 App Router를 사용할 때는 서버 컴포넌트의 렌더링을 고려해야 하므로, 서버리스 환경에서의 제약사항을 주의깊게 살펴봐야 합니다.

정적 내보내기(Static Export) 옵션

 Next.js App Router에서도 정적 내보내기를 사용할 수 있습니다.

  1. next.config.js 설정
module.exports = {
   output: 'export',
}
  1.  next build 실행 후 out 디렉토리에 정적 파일 생성

  2.  장점 :

  • 간단한 호스팅 (any static file hosting service)
  • 빠른 로딩 시간
  1. 단점 :
  • 서버 사이드 렌더링(SSR) 및 API 라우트 사용 불가
  • 동적 라우트에 제한

 App Router와 정적 내보내기

  • 정적 내보내기 시 서버 컴포넌트는 빌드 시점에 렌더링됩니다.
  • 동적 라우트는 generateStaticParams 함수를 통해 사전 렌더링해야 합니다.

6장 데이터 페칭 전략과의 연관성

 배포 방식은 6장에서 다룬 데이터 페칭 전략과 밀접하게 연관됩니다.

  1. 서버 사이드 렌더링(SSR) : 전통적 서버 또는 서버리스 환경에서 지원
  2. 정적 사이트 생성(SSG) : 모든 플랫폼에서 지원, 특히 정적 호스팅에 적합
  3. 증분 정적 재생성(ISR) : 일부 플랫폼에서 제한적 지원
  4. 클라이언트 사이드 데이터 페칭 : 모든 플랫폼에서 지원, 그러나 SEO 고려 필요

 선택한 배포 플랫폼에 따라 적절한 데이터 페칭 전략을 선택해야 합니다.

실습 : Next.js App Router 애플리케이션을 AWS Elastic Beanstalk에 배포하기

 목표 : Next.js App Router 애플리케이션을 AWS Elastic Beanstalk에 배포합니다.

 단계

  1. AWS 계정 설정
  • AWS 계정이 없다면 생성합니다.
  • IAM 사용자를 생성하고 필요한 권한을 부여합니다.
  1. 프로젝트 준비
  • Next.js App Router 프로젝트를 생성합니다.
  • next build를 실행하여 프로젝트를 빌드합니다.
  1. Elastic Beanstalk 환경 설정
  • AWS Management Console에서 Elastic Beanstalk 서비스로 이동합니다.
  • "Create a new environment"를 선택합니다.
  • Node.js 플랫폼을 선택합니다.
  1. 배포 패키지 생성
  • .ebignore 파일을 생성하고 불필요한 파일/폴더를 제외합니다.
  • 프로젝트 루트에 .npmrc 파일을 생성하고 unsafe-perm=true를 추가합니다.
  1. package.json 수정
{
   "scripts": {
      "start": "next start -p $PORT"
   }
}
  1. 환경 변수 설정
  • Elastic Beanstalk 콘솔에서 환경 변수를 설정합니다 (예 : NODE_ENV=production).
  1. 배포
  • AWS CLI를 사용하여 애플리케이션을 배포합니다.
eb init
eb create
eb deploy
  1. 확인 및 문제 해결
  • Elastic Beanstalk 콘솔에서 배포 상태를 확인합니다.
  • 로그를 확인하여 오류가 있는지 점검합니다.
  1. 라우팅 및 서버 컴포넌트 확인
  • 모든 라우트가 올바르게 작동하는지 확인합니다.
  • 서버 컴포넌트가 예상대로 렌더링되는지 테스트합니다.
  1. 성능 최적화
  • CloudFront를 사용하여 CDN을 설정합니다.
  • 필요한 경우 Auto Scaling 설정을 조정합니다.

 이 실습을 통해 Next.js App Router 애플리케이션을 AWS Elastic Beanstalk에 성공적으로 배포하고, 실제 프로덕션 환경에서의 동작을 경험할 수 있습니다. 이는 확장 가능하고 관리하기 쉬운 배포 방식을 학습하는 데 도움이 됩니다.