본문 바로가기
Infra/AWS

Next.js를 AWS EC2에 배포하는 방법: 초보자를 위한 쉬운 가이드

by joy_95 2024. 9. 20.

처음부터 직접 해보는 AWS EC2 배포

저는 이전 회사에서 이미 구축된 인프라 위에서 Next.js 프로젝트를 운영했습니다. Github Action 덕분에 버튼 한번 클릭으로 손쉽게 배포할 수 있었죠. 하지만 정작 제가 배포 중인 환경인 AWS EC2나 Docker에 대해선 잘 알지 못했습니다. 서버가 어떤 방식으로 돌아가고, 어떻게 배포가 진행되는지 궁금했습니다.

 

그리고 최근 이직을 준비하면서 프론트엔드 채용공고를 살펴보니, AWS 인프라 경험을 요구하는 회사들이 많다는 것을 알게 되었습니다. 경력이 쌓일수록 프론트엔드 개발자도 인프라와 CI/CD까지 이해하고 다룰 수 있어야 경쟁력을 갖출 수 있다는 생각이 들었습니다.

 

그래서 오늘은 직접 EC2를 활용해 Next.js 프로젝트를 배포하는 과정을 포스팅하며, 인프라와 배포 환경에 대해 좀더 깊이 이해해 보려고 합니다.

AWS EC2란?
AWS는 클라우드 서비스로, EC2(Elastic Compute Cloud)라는 제품을 통해 가상 서버를 제공합니다. 쉽게 말해 물리적인 서버를 직접 구매하고 세팅하는 온프레미스 방식 대신, 필요한 스펙에 맞춰 온라인에서 서버를 대여할 수 있는 서비스입니다. 이를 통해 서버 관리에 대한 부담을 줄이고, 필요한 만큼 유연하게 확장하거나 축소할 수 있습니다.

 

EC2 인스턴스 생성하기

AWS 계정 생성 및 인스턴스 시작

먼저, 배포할 Next.js 프로젝트를 Github에 업로드하고, AWS 회원가입을 진행합니다. 이 과정에서 root 사용자와 IAM이라는 용어가 등장하는데요. 일반적으로 실제 프로덕션 환경에서는 IAM를 통해 권한을 설정한 후 사용하게 됩니다.

IAM이란?
root 사용자는 AWS 계정을 생성한 최초의 사용자로, 모든 권한에 접근할 수 있습니다. 하지만 보안상 root 사용자의 권한을 제한적으로 사용하는 것이 좋습니다. 그래서 필요한 권한만 부여한 IAM 사용자를 생성해 사용하는 것이 일반적입니다. IAM(Identiry and Access Management)는 AWS에서 사용자의 접근 권한을 관리하는 서비스입니다.

 

그 다음 Region을 서울로 설정합니다. 이렇게 하면 서울에 위치한 데이터센터에서 가상 서버를 빌릴 수 있어 요청시 더 빠른 응답을 받을 수 있습니다. 이제 EC2 서비스로 이동해 인스턴스 시작 버튼을 눌러 서버 생성을 시작합니다.

 

 

애플리케이션 및 OS 이미지 | 인스턴스 유형

인스턴스의 name 설정 후, 대여할 컴퓨터의 운영체제를 선택해야 합니다. 이를 AMI(Amazon Machine Image)라고 부르며, 인스턴스의 템플릿 역할을 합니다. AMI는 운영체제뿐만 아니라 기본적으로 설치된 소프트웨어와 설정을 포함할 수 있어 미리 구성된 환경을 빠르게 설정할 수 있습니다.

 

저는 프리티어에서 지원하는 Ubuntu AMI를 선택했습니다.

Ubuntu Server 24.04 LTS (HVM),EBS General Purpose (SSD) Volume Type

- Ubuntu는 리눅스 배포판으로 서버 운영체제로 사용됨.

- Ubuntu Server 24.04로 장기 지원 버전(LTS)

 

그리고 해당 AMI를 선택하면 인스턴스 유형이 t2.micro로 잡히게 되는데 1개의 vCPU와 1GB 메모리를 제공해 가벼운 작업을 수행할 수 있습니다. 소규모 애플리케이션이나 테스트하기에 적합한 인스턴스입니다.

키 페어

키 페어는 인스턴스에 안전하게 접속하기 위한 인증 수단입니다. public key와 private key로 구성되며 RSA는 이러한 키를 생성하는 알고리즘 중 하나입니다. 생성한 키 페어 중 private key는 .pem 파일로 저장되며 SSH 접속 시 이 파일을 사용해서 EC2 인스턴스에 안전하게 로그인할 수 있습니다.

 

EC2 인스턴스에 SSH로 연결할 때, .pem 파일이 저장된 위치에서 접속해야 하므로 파일이 어디에 있는지 잘 파악해두어야 합니다. 또한 private key가 외부로 유출되지 않도록 주의가 필요하며 안전하게 보관하는 것이 매우 중요합니다.

 

네트워크 설정

네트워크 설정 단계에서는 인스턴스에 접근할 수 있는 보안 그룹을 지정합니다. 보안 그룹은 인스턴스에 대한 인바운드와 아웃바운드 트래픽을 제어하는 역할을 합니다. 기본 제공되는 설정을 사용하거나, 직접 선택할 수도 있습니다.

 

간단한 설정을 위해 아래 3가치 체크박스를 선택할 수 있습니다.

  •  SSH : 서버에 원격 접속하기 위해 사용됩니다. 보안을 강화하기 위해, 내 IP 주소에서만 접근 가능하도록 설정하는 것이 좋습니다.
  • HTTP/HTTPS : 브라우저 요청시 웹사이트에 접근할 수 있게 하는 프로토콜 입니다. 모든 IP 주소에서 접근할 수 있도록 설정해야 웹 트래픽을 정상적으로 받을 수 있습니다.

 

인스턴스 생성

인스턴스를 생성하면 아래와 같이 목록에 추가됩니다.  AWS에서 나만의 가상 컴퓨터를 한대 대여한 것입니다. 인스턴스는 웹 서버로 활용하거나, 다양한 애플리케이션을 실행할 수 있는 환경을 제공합니다. 이제 Next.js 웹 프로젝트를 인스턴스에 올려보도록 하겠습니다.

 

 

인스턴스 연결

우선 인스턴스 ID 클릭> 연결 > SSH 클라이언트로 접근하여 아래 순서로 터미널에서 명령해줍니다. 이때 아까 생성한 키 페어 파일은 pem이 있는 위치에서 명령해야합니다.

 

터미널에서 SSH 연결에 성공하면 아래와 같은 메세지가 뜹니다.

 

그럼 SSH 프로토콜을 통해 가상 컴퓨터와 연결이 완료된 것이죠.

 

웹 서버 컴퓨터 세팅하기

이제 이 컴퓨터에 프로젝트가 실행될 수 있도록 apt 업데이트와 필요한 패키지를 설치해야합니다. 아래 명령어들로 node, npm, yarn을 설치합니다.

 

1. 운영체제에서 사용 가능한 소프트웨어 패키지 목록 업데이트

sudo apt-get update

 

2. node.js, npm 설치

sudo apt install nodejs
sudo apt install npm

 

3. 버전 최신화

sudo npm cache clean --force
sudo npm install -g n
sudo n stable
sudo npm install -g npm

 

4. yarn 설치

sudo npm install -g yarn

 

5. 레포지토리 클론 후 패키지 설치

그리고 github에 있는 레포지토리를 클론합니다.

git clone [레포주소]

 

 

해당 레포 디렉토리로 위치를 이동한 다음 package를 설치하고 build 후 start 해줍니다.

yarn
yarn build
yarn start

 

그리고 http로 dns 주소로 접근하면 완료!

 

참고

https://velog.io/@yoondengo/AWS-EC2-인스턴스에-Next.js-프로젝트-올려보기

반응형