
간단한 사이드프로젝트를 S3에 배포하였다.
그런데 완성시켜놓고 보니 너무 단순한가 싶어서 기능을 확장시키기로 했다.
기능구현을 위해 서버와 DB가 필요했다. Next.js의 Route Handler와 AWS RDS를 사용하기로 결정했다. 또한 구매한 도메인으로 요청을 연결하기 위해 Nginx와 Route53을 사용하였다.

(1) 클라이언트: example.net으로 요청을 보냄
(2) Route53: 해당 도메인을 EC2의 공인 IP로 연결
(3) NginX: 요청을 받아 localhost:3000(Next.js 서버)로 전달
(4) PM2가 관리하는 Next.js앱 : 요청을 처리하고 결과를 반환
(5) RDS : Next.js API Routes를 통해 DB 요청
1. EC2 인스턴스 생성
key.pem 파일 다운로드2. SSH 연결
key.pem 파일로 인증하여 SSH로 EC2 서버에 접근할 수 있다.ssh -i "key.pem" ubuntu@ec2-12-34-56-789.ap-northeast-2.compute.amazonaws.com3. nvm, pm2, nginx, git 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bashnvm install --ltsnpm i -g pm2sudo apt-get install nginxsudo apt-get install git4. git clone & pm2 start
sudo systemctl start nginx
sudo vi /etc/nginx/conf.d/project.conf
server {
server_name 도메인;
location / {
proxy_pass http://127.0.0.1:3000/;
}
}
sudo apt update
sudo apt install python3 python3-venv libaugeas0
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
sudo certbot --nginx
발급된 인증서의 유효기간은 sudo certbot certificates로 확인할 수 있으며, sudo certbot renew 명령어로 인증서를 갱신할 수 있다. 이 때 --dry-run 옵션을 붙이면 갱신 테스트도 가능하다.
여기까지 설정하면 EC2 서버에 3000번 포트로 띄워진 next.js 애플리케이션을, nginx를 통해 설정한 도메인으로 접근할 수 있다.