2025-09-30 15:07 리액트 넥스트


📘 Next.js AWS EC2 최종 배포 핸드북 (t3.micro 기준)

이 가이드는 t3.micro 인스턴스를 사용하여 Next.js 애플리케이션을 AWS EC2에 배포하고, PM2와 Nginx로 안정적인 프로덕션 서비스를 구축하는 A to Z 과정을 안내합니다.

Part 1: AWS EC2 인프라 준비

서버를 생성하고, 보안 설정을 하며, 향후 발생할 문제를 미리 방지하기 위해 디스크 용량을 넉넉하게 설정합니다.

  1. EC2 인스턴스 생성

    • AMI: Ubuntu Server (최신 LTS 버전 추천)

    • 인스턴스 유형: t3.micro

      • (참고): t3.microt2.micro보다 CPU 성능이 더 좋고 안정적이며, 비용은 비슷하거나 저렴합니다. AWS 프리티어에 포함되어 있어 월 750시간 무료 사용이 가능합니다.
    • 키 페어: .pem 키를 생성하고 절대 잃어버리지 않도록 안전한 곳에 보관하세요.

  2. 스토리지(디스크) 설정

    • 기본값인 8GB는 장기적으로 부족합니다. 처음부터 20GB로 설정하는 것을 강력히 추천합니다. (AWS 프리티어는 30GB까지 무료)
  3. 네트워크 (보안 그룹) 설정

    **[인바운드 규칙 편집]**에서 꼭 필요한 포트만 허용하여 서버 보안을 강화합니다.

유형프로토콜포트 범위소스설명
SSHTCP22내 IP서버 원격 접속용
HTTPTCP80위치 무관일반 웹 접속용
HTTPSTCP443위치 무관보안 웹 접속용
사용자 지정 TCPTCP3000위치 무관Next.js 테스트용

Part 2: EC2 서버 접속 및 기본 환경 설정

서버에 접속하여 프로젝트를 실행할 수 있는 기본 환경을 구축합니다.

  1. SSH로 서버 접속

    .pem 키가 있는 폴더에서 터미널을 열고 아래 명령어를 실행하세요.

    Bash

    # .pem 파일 권한 변경 (최초 1회)
    chmod 400 your-key-name.pem
    
    # 서버 접속
    ssh -i "your-key-name.pem" ubuntu@<EC2_퍼블릭_IP>
    
  2. 서버 업데이트 및 Node.js 설치

    Bash

    # 패키지 목록 최신화
    sudo apt update && sudo apt upgrade -y
    
    # NVM(Node Version Manager) 설치
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    source ~/.bashrc
    
    # Node.js LTS 버전 설치
    nvm install --lts
    

Part 3: Private GitHub 저장소 연동

EC2 서버가 GitHub Private 저장소에 안전하게 접근할 수 있도록 SSH 키를 설정합니다.

  1. EC2에서 SSH 키 생성 (모든 질문에 Enter)

    Bash

    ssh-keygen -t ed25519 -C "your_github_email@example.com"
    
  2. GitHub에 EC2 공개키 등록

    • 아래 명령어로 공개키를 복사합니다.

      Bash

      cat ~/.ssh/id_ed25519.pub
      
    • GitHub SettingsSSH and GPG keysNew SSH key에 복사한 키를 붙여넣습니다.

  3. 프로젝트 클론 (반드시 SSH 주소 사용)

    Bash

    git clone git@github.com:your-username/your-repo.git
    
    • 처음 연결 시 (yes/no) 질문이 나오면 yes를 입력하세요.

Part 4: 메모리 부족 문제 해결 (스왑 영구 설정)

t3.micro도 RAM은 1GB로 npm run build 시 메모리가 부족할 수 있습니다. 디스크의 일부를 가상 메모리로 사용하고, 이 설정이 서버 재부팅 후에도 유지되도록 설정합니다.

Bash

# 1. 2GB 크기의 스왑 파일 생성
sudo fallocate -l 2G /swapfile

# 2. 파일 권한 설정 (보안)
sudo chmod 600 /swapfile

# 3. 스왑 공간으로 포맷
sudo mkswap /swapfile

# 4. 스왑 활성화
sudo swapon /swapfile

# 5. 재부팅 후에도 스왑이 항상 유지되도록 fstab 파일에 설정 추가
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

# 6. 설정 확인 (Swap 항목에 2.0G가 보이는지 확인)
free -h

Part 5: Next.js 프로젝트 배포

이제 메모리 걱정 없이 프로젝트를 빌드하고 실행할 준비를 합니다.

Bash

# 프로젝트 폴더로 이동
cd your-repo

# 의존성 패키지 설치
npm install

# 프로덕션 빌드 실행
npm run build

Part 6: PM2를 이용한 무중단 서비스 운영 🚀

PM2를 사용하여 앱을 안정적으로, 그리고 서버 성능을 최대로 활용하여 운영합니다.

  1. PM2 설치

    Bash

    npm install pm2 -g
    
  2. ecosystem.config.js 설정 파일 생성

    프로젝트 루트에 아래 내용으로 ecosystem.config.js 파일을 생성합니다.

    JavaScript

    module.exports = {
      apps: [
        {
          name: 'WSHP-front',      // 관리할 앱 이름
          script: 'npm',            // 실행할 명령어
          args: 'start',            // 명령어의 인자
          exec_mode: 'cluster',     // 클러스터 모드로 CPU 모두 사용
          instances: 'max',         // CPU 코어 수만큼 앱 실행
          autorestart: true,        // 앱 종료 시 자동 재시작
          watch: false,             // 프로덕션 환경에서는 false
          env: {
            NODE_ENV: 'production',
          },
        },
      ],
    };
    
  3. PM2 실행 및 자동 시작 설정

    Bash

    # 설정 파일로 앱 시작
    pm2 start ecosystem.config.js
    
    # 서버 재부팅 시 PM2 자동 시작 설정
    pm2 startup
    # 위 명령 실행 후 나오는 결과 명령어를 복사/붙여넣기하여 실행
    pm2 save
    

Part 7: Nginx 리버스 프록시 설정 (선택사항이지만 강력 추천)

사용자가 http://your-ip와 같이 포트 번호 없이 접속할 수 있도록 Nginx를 설정합니다.

  1. Nginx 설치 및 설정

    Bash

    # Nginx 설치
    sudo apt install nginx -y
    
    # 설정 파일 생성 및 편집
    sudo nano /etc/nginx/sites-available/your-project
    
  2. 설정 파일 내용 붙여넣기

    server_name을 본인의 IP 주소 또는 도메인으로 변경하세요.

    Nginx

    server {
        listen 80;
        server_name <EC2_퍼블릭_IP_주소>;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    
  3. 설정 활성화 및 재시작

    Bash

    # 설정 파일 활성화 링크 생성
    sudo ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled/
    
    # 기존 기본 설정 삭제
    sudo rm /etc/nginx/sites-enabled/default
    
    # Nginx 재시작
    sudo systemctl restart nginx
    

이제 모든 설정이 완료되었습니다. 이 핸드북만 따라 하면 누구나 안정적인 Next.js 서비스를 EC2에 배포할 수 있습니다! 축하합니다! 🎉