[배포] Next.js EC2로 배포하기

2023.01.01(월)

이전에 Vercel로 배포를 완료했었는데 왜 AWS로 다시 배포를 하는가 ?

그 이유는 내 공부에 있다. AWS는 그동안 백엔드 분들이 S3에 올려주세요 ~ 라는 한마디만으로 단지 build하고 빌드 파일을 S3에 올리면 그게 끝이였다.

하지만 Next.js로 개발을 시작했던 헬핏 프로젝트에서 이 방법으로 진행했을때 Routing 관련해서 많은 오류가 발생한다는 점을 깨닫게 되었다.

Next.js는 SSR로 구성되기 때문에 S3 배포보단 EC2 배포가 더 맞았다.

AWS에 대해 무서움과 거부감이 조금은 존재했었기에 비교적 간편하고 Next.js 개발진들이 만든 배포 프로그램인 Vercel로 배포를 진행했었다.

Vercel 배포에 아직까지 큰 단점은 느끼지 못하고 있지만 향후 내가 일하게 될 회사에서 Vercel을 사용하지 않을 확률이 굉장히 높고 AWS를 사용할 확률이 매우 높았기 때문에 AWS로도 배포를 해보고 싶었다.

사실 AWS로의 배포방식은 정말 다양하고 많은 블로그에서 다루고 있음에도 그걸 그대로 따라하다보면 오류가 많이 발생하는 파트인것 같다.

나는 다음과 같은 방식으로 진행해보았다.

💡 인스턴스의 생성

Ubuntu 서버를 빌렸고 다른건 건들이지 않고 인스턴스를 시작했다 내가 건들인건 딱 하나 바로 KeyPair이다.

1

이런식으로 키페어를 생성해주고 생성된 KeyPair는 별도의 폴더에 넣어놓는다.

2

💡 인스턴스 연결

다음으로는 인스턴스를 연결해줘야 하는데

3

ssh 로 시작되는 저 코드를 붙여서 터미널에 붙여 넣고 인스턴스를 연결해주면 된다.

4

만약 이런 에러가 발생한다면 위에 따로 표시해둔 chmod400 코드를 복사해서 붙여넣어주면 된다.

💡 Node Npm 설치

성공적으로 연결되었다면 nvm을 설치해주자

nvm 설치하기

🕹 $ node -v로 node 버전을 확인할 수 있다.

$ sudo apt-get update

이전에 실패했던 원인이 프로젝트와 EC2의 노드 버전이 다르기 때문에 오류가 발생할 수 있었을 것 같아 현재 내 프로젝트의 노드 버전인 18.16.0 버전을 설치해서 노드 버전을 맞춰주려했다.

따라서 node 버전별 선택적 설치를 위한 nvm을 설치할 필요가 있었다.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

nvm을 설치했다면 터미널 자체를 재시작하거나 아래의 명령어로 nvm을 실행시켜 준다.

source ~/.bashrc

그뒤 내가 원하는 node를 설치해주자

nvm install 18.16.0

4

$ nvm install --lts

💡인바운드 규칙 설정

그 뒤에는 보안 탭에 들어가 인바운드 규칙을 아래와 같이 변경해준다.

인바운드규칙

💡클론 및 빌드

다음으로 프로젝트를 클론해준다. git repository에서 https를 복제한뒤 아래와 같이 클론해준다.

6

다음 next.js를 설치한 뒤

7

다음과 같이 빌드하고 시작한다.

8

💡완료

완료

끝 !

이후엔 반드시 서버 종료를 해주는 걸 권한다. 어디서 과금이 될지 모르니…

💡결론

AWS에 관련해서 너무 많은 걱정을 해서 그런지 생각보다는.. 어렵지 않았…아니다.. 많이 어려웠다. 정말 많이 삽질을 했고 아직도 모르는게 산더미다. 지금처럼 규모가 작은 프로젝트나 개인 프로젝트에서는 Vercel 배포가 간편함과 배포속도 및 배포 작업에 있어서 더 많은 장점을 가져다주는 것 같다. AWS 배포는 이번 한번으로 만족하지는 않는다. 프로젝트를 완료하면 AWS를 통한 배포와 Vercel을 통한 배포중 성능면에서 ? 어떤 점이 다를지 비교해보는 시간을 가져보고 싶다.