개발/AWS

AWS EC2 배포 가이드 정리

Jinoo.keem 2025. 11. 30. 20:52
728x90

EC2 (Elastic Compute Cloud)

ec2는 하나의 컴퓨터를 의미한다.

 

서버를 배포하기 위해선 컴퓨터가 필요 > but. 내 컴퓨터로 서버를 배포하면 24시간 동안 켜놔야하고 보안적 위험도 있기 때문에 AWS EC2라는 컴퓨터를 빌려서 사용한다. (로깅, 오토스케일링, 로드밸런싱 등의 부가기능은 덤~)


현업?

백엔드서버 배포는 주로 EC2에 서버를 배포에서 사용한다.

프론트엔드?

프론트 배포할때도 EC2를 사용할 수 있지만, 주로 Vercel, netilfy, AWS S3를 사용해서 배포한다.


처음해야되는 것

리전(Region) 선택하기

인프라를 지리적으로 나누어 배포한 각각의 데이터 센터를 의미.

리전의 특징

1. 각 리전은 고유한 이름(고유한 값)을 갖고있다.

2. 리전을 선택하는 기준은 애플리케이션의 주된 사용자들의 위치와 지리적으로 가까운 리전을 선택하는것이 유리.

3. 자주하는 실수 : 각 리전마다 EC2를 따로 관리하기 하기때문에. 생성한 EC2를 잘 기억하자.

 

인스턴스 시작 (EC2 컴퓨터 빌리기)

1. 이름 및 태그 입력하기  
2. Quick Start 서버를 배포할때 필수요소만 들어있는 ubuntu 선택
3. 인스턴스 유형 AWS인스턴스 == EC2에서 빌리는 컴퓨터 1대.
인스턴스 유형 == 컴퓨터 사양.
지금은 프리티어를 사용중이기 때문에 t3.micro를 사용할 예정이고 소규모 서비스에서는 충분히 돌아간다.
4. 키 페어(로그인) 키 페어 생성 - 이름 작성, RSA(default), .pem(default)
5. 네트워크 설정 VPC(default),
보안그룹 = AWS 클라우드에서의 네트워크 보안을 의미

EC2 바깥의 보안규칙 (인바운드 트래픽 : 외부에서 EC2인스턴스로 보내는 트래픽),
(아웃바운드 트래픽 : EC2 인스턴스에서 외부로 나가는 트래픽) 에서 어떤 트래픽만 허용할지 선택할 수 있다.
보안그룹을 설정할 때는 허용할 IP범위와 포트(port)를 설정할 수 있다.
보안그룹 이름 : 알아보기 쉽게 수정
인바운드 보안그룹 규칙 - ssh 22번포트 위치무관(defalut) > 제한을 걸고자 하면 사용자지정 IP를 설정하면 된다.
개발에 원활하도록 규칙 추가 > 유형 > http (default 설정 : 80번 포트) 
6. 스토리지 구성 EC2의 저장공간 EBS(Elastic Block Storage), 조금 더 포괄적인 용어로는 스토리지(Storage), 볼륨(Volume) 이라고 부른다.
프리티어는 30기가까지 무료 제공한다. 나머지 세팅은 default
7. 인스턴스 시작  

 

[인스턴스 대시보드]-[인스턴스 상태] 에 대한 설명

1. 인스턴스 중지 : 시스템 종료

2. 인스턴스 시작 : 시스템 시작

3. 인스턴스 재부팅

4. 인스턴스 최대절전모드

5. 인스턴스 종료 : 인스턴스 삭제

 

인스턴스 연결 클릭 > EC2 ubuntu CLI 실행 완료!


탄력적 IP 연결하기 (네트워크 및 보안 탭)

이유 : EC2 인스턴스를 생성하면 임시적인 IP를 할당받는다. 인스턴스를 중지시켰다가 다시 실행시키면 IP가 바뀌는데, 바뀌지않는 고정 IP를 할당받아야 한다. == 이게 탄력적 IP(EC2가 재실행되도 바뀌지않는 고정IP)이다.

1. 네트워크 및 보안 탭 > 탄력적 IP > 탄력적 IP 주소 할당 > 기본값으로 할당버튼 클릭 > 탄력적 IP 주소 생성 완료

2. 할당된 IPv4주소 클릭 > 원하는 인스턴스 선택 > 연결하면 해당 인스턴스에 탄력적 IP주소가 할당된다.

만약 탄력적 IP주소를 삭제하고자 하면 [작업]-[탄력적 IP주소 릴리스]를 선택하면 된다.

탄력적 IP주소 릴리스

 

Express서버를 EC2에 배포하기

1. Node.js 설치

$ sudo su
$ apt-get update && /
apt-get install -y ca-certificates curl gnupg && /
mkdir -p /etc/apt/keyrings && /
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nod
NODE_MAJOR=20 && /
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro 
apt-get update && /
apt-get install nodejs -y

 

2. 설치확인

$ node -v

 

3. Github으로부터 Express 프로젝트 Clone

git clone '깃허브주소'
cd '프로젝트이름'
npm i // 의존성 설치

 

4. .env 직접만들기

.env 파일은 Git으로 버전관리를 하지 않기때문에 별도로 EC2 인스턴스에 올려주어야한다.

vi .env // .env 파일 만들기

VITE_UNKNOWN_API = xxx
:wq // w: 저장, q: 종료

 5. pm2 설치해서 서버 실행시키기

PM2는 Node.js 애플리케이션을 위한 프로세스 관리 도구이다.

더보기

PM2

주요 기능

1. 백그라운드 실행

터미널을 종료해도 서버가 계속 실행된다.

2. 자동 재시작

서버에 오류가 발생하거나 크래시가 나면 자동으로 다시 실행시켜준다.

3. 서버 재부팅 시 자동 실행

EC2 인스턴스를 재시작해도 PM2가 자동으로 애플리케이션을 다시 시작한다.

4. 로그 관리

애플리케이션의 로그를 자동으로 기록하고 관리한다.

5. 모니터링

실행 중인 애플리케이션의 상태(CPU, 메모리 사용량 등)를 확인할 수 있다.

6. 무중단 배포

코드를 업데이트할 때 서버를 중단하지 않고 새 버전으로 전환할 수 있다.

7. 클러스터 모드

여러 개의 프로세스를 동시에 실행하여 성능을 향상시킬 수 있다.

사용 예시

일반 실행: node app.js (터미널 종료 시 서버 중단) PM2 실행: pm2 start app.js (터미널 종료해도 서버 계속 실행)

$ sudo npm i -g pm2
$ sudo pm2 start app.js

 

비용나가지 않게 EC2 종료하기 (중요!)

1. EC2 인스턴스 종료

2. 탄력적 IP릴리스 (연결 해제 후 - 릴리스)