https://aws.amazon.com/ko/ec2/?nc2=h_ql_prod_cp_ec2
Amazon EC2 인스턴스는 서버를 호스팅하는데 사용할 수 있는 가상 서버이다.
매월 최대 750시간까지 12개월 동안 프리 티어 혜택을 사용해볼 수 있다.
한 계정에서의 이야기이다. 한 계정에서 12개월간 프리티어를 사용했다면, 그 이후에는 프리티어의 혜택을 사용해볼 수 없다.
매월 최대 750시간은 한 달 최대 사용 시간 744시간(24 * 31)에서 6시간 부족한 수치이다. 즉 한 개의 인스턴스만 풀로 사용이 가능하다.
프리티어의 최대 용량을 초과하게 되면 프리티어의 인스턴스를 사용하더라도 과금이 이뤄진다. (아주 조금)
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kubeadm이라는 툴을 통해 EC2 환경에 클러스터를 구축해볼 수 있다.

https://spacelift.io/blog/kubernetes-on-aws
프리티어에 클러스터 환경을 구축해볼 수는 있다. 하지만 운영은 불가능하다고 한다. k8s 클러스터가 요구하는 최소 사양을 프리티어로는 만족하지 못한다.
ECR은 어디에서나 컨테이너를 손쉽게 저장, 공유 및 배포할 수 있는 완전관리형 컨테이너 레지스트리이다. ECR을 사용하면 이미지와 아티팩트의 고가용성을 유지하고 안정적으로 배포할 수 있다.
AWS 프리 티어의 일부로서 1년 동안 월 500MB의 스토리지를 무료로 사용할 수 있다.
EKS는 AWS에서 제공하는 완전 관리형 컨테이너 오케스트레이션 서비스로, 사용자가 용이하게 kubernetes 환경을 구축, 운영, 확장할 수 있게 돕는다.
프리티어 정책이 존재하지 않으며, 시간당 0.1 달러이다.
AWS에서 제공하는 확장성이 높고 고가용성의 DNS. 이름에서 알 수 있듯이, Route 53은 인터넷 트래픽을 다양한 AWS 리소스로 라우팅하는데 주로 사용된다.
첫 연결시에 0.5 달러가 과금된다. 이후에는 많은 쿼리를 처리해야하는 경우가 아니라면 추가 과금은 없다. (연결을 끊고 삭제하지 않은 상태로 두면 추가 과금이 일어난다고 한다.)
AWS에서 제공하는 로드 밸런싱 서비스로, EC2 인스턴스, 컨테이너, IP 주소 및 Lambda 함수와 같은 여러 대상에 대한 애플리케이션 트래픽을 자동으로 분배한다.
EC2와 동일하게 매월 750시간의 프리티어 혜택을 사용해볼 수 있다.
사실 로드 밸런싱까지는 필요하지 않은데, 해당 기능을 추가하면 자동으로 SSL 설정이 함께 돼서 편리하다.
https://nextjs.org/docs/pages/building-your-application/deploying
next build 명령어를 통해 빌드 파일을 만들고, next start 명령어를 통해 빌드된 파일을 node 서버 환경에서 실행시킨다. 서버의 실행 덕분에 서버에서 사용할 수 있는 기능들을 활용할 수 있다.
https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile
(vercel에서 제공하는 next를 위한 docker 파일 예제)
Netlify, Vercel, AWS Amplify 등과 같은 플랫폼을 통해 간단하게 배포할 수 있다.
https://www.youtube.com/watch?v=Z6SzB1U544s&t=604s
(AWS Amplify를 통해 배포하는 예제)
하지만 과정에서의 환경 구성을 커스텀하게 처리하기 어렵고, 무엇보다 개발자로서 해볼 수 있는 것들이 적다.
pm2는 자신들을 daemon process manager라고 소개한다. 즉 종료되지 않고 서비스가 지속 실행되어야 하는 경우 pm2를 활용해볼 수 있다. (터미널을 종료하더라도 백그라운드에서 지속 실행되는 형태)
pm2의 특징
pm2를 사용한 배포 플로우
$ pm2 --name ${serviceName} start pnpm -- dev 명령어를 통해 next.js 프로젝트를 백그라운드에서 실행시킨다.하지만 이 방식도 다음과 같은 문제가 존재한다.
때문에 EC2와 ECR을 활용해서 배포하기로 결정하였다.
<workflow에 대한 설명>

실제 EC2, ECR, Route53, ELB 환경을 세팅하는 글들은 너무 많아서 참고한 링크만 남겨둔다.
https://www.youtube.com/watch?v=T2F2Sh6l2sY (EC2, ECR)
https://pnpm.io/docker (pnpm dockerfile)
https://woojin.tistory.com/93 (EC2, ELB를 통한 SSL 설정 및 도메인 연결)
https://velog.io/@mirageoasis/.pem-%ED%8C%8C%EC%9D%BC%EC%9D%84-github-action%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 (pem 파일을 action에서 사용하기)
https://nextjs.org/docs/pages/building-your-application/deploying/static-exports (next 배포 가이드)
https://puterism.com/deploy-next-js-with-ec2/ (EC2를 활용한 next 배포)
https://medium.com/@mudasirhaji/deploying-a-next-js-app-manually-on-aws-ec2-a-step-by-step-guide-58b266ff1c52 (EC2를 활용한 next 배포)
https://medium.com/@jjj3055/github-action%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-ci-cd-%EA%B5%AC%EC%B6%95%EA%B8%B0-f0aa9c1a9c52 (ECR을 활용한 배포 예제)
https://www.youtube.com/watch?v=IwWQG6lEdQQ (pm2 deploy 가이드)
매월 최대 750시간까지 12개월 동안 프리 티어 혜택을 사용해볼수 있는데 동균님 롤 티어는 왜그런가요