1. EC2 배포
(1) 배포(Deployment)란?
"기능 구현이 끝났으니 배포를 해보자!" 이때, 배포란 무엇일까? 배포(Deployment)란 쉽게 말해 다른 사용자들이 인터넷을 통해 서비스를 이용할 수 있게 하는 것을 의미한다. 프로젝트의 기능 구현과 테스트는 주로 localhost라는 주소를 통해 이루어진다. 하지만 이 localhost는 다른 컴퓨터에서는 접근이 불가능한 로컬 주소이다. 따라서 배포를 통해 도메인(ex. https://www.naver.com/)나 IP(ex. 124.16.2.1)와 같이 고유의 주소를 부여받아 다른 컴퓨터의 접근을 가능하게 한다.
(2) EC2(Elastic Compute Cloud)란?
EC2란 쉽게 말해 다른 컴퓨터를 빌려 원격으로 접속해 서비스를 사용하도록 돕는 것이다.
서버를 배포하기 위해서는 기본적으로 컴퓨터가 필요하다. 물론 내가 가지고 있는 로컬 컴퓨터를 통해 서버를 배포할 수도 있겠지만 내 컴퓨터를 24시간동안 켜놔야하고 메모리 용량도 많이 차지할 것이다. 이러한 불편함때문에 아마존 웹 서비스(AWS)와 같은 곳에서는 배포용 컴퓨터를 빌려주는 클라우드 컴퓨팅 서비스를 제공하고, 대표적인 서비스가 EC2인 것이다.
현업에서도 백엔드 서버를 배포할 때 AWS EC2를 아주 많이 사용한다. 그러나 프론트엔드의 경우 vercel, netlify 또는 AWS S3를 사용해 주로 배포한다.
2. EC2 세팅
(1) 리전(Region) 선택하기
AWS에 로그인한 뒤 EC2를 시작하기에 앞서 우선적으로 리전(Region)을 먼저 선택해야 한다.
리전(Region)이란 지역별 데이터 센터이다. 전세계적으로 다양한 Region을 보유하고 있는데, 배포할 서비스의 사용자들의 위치와 지리적으로 가까운 리전을 선택하는 것이 속도 면에서 유리하기에 한국 유저들은 주로 아시아 태평양(서울)을 선택한다.
(2) EC2 기본 설정 - Launch an instance
1️⃣ 이름 및 태그 - EC2 이름 설정하는 곳 ex) facebook-server
2️⃣ 애플리케이션 및 OS 이미지 (Amazon Machine Image) - OS(운영체제)를 선택하는 단계 일반적으로 용량과 성능을 많이 차지하지 않는 가벼운 Ubuntu를 많이 사용한다.
3️⃣ 인스턴스 유형 - 컴퓨터 사양 (프리 티어에 해당하는 t2.micro를 사용하자!)
- 인스턴스란?
- AWS EC2에서 빌려주는 컴퓨터 1대를 의미한다.
4️⃣ 키 페어(로그인) - EC2 컴퓨터에 접근할 때 사용하는 비밀번호 설정하기. 기본적으로 RSA와 .pem을 선택 후 키 페어를 생성한다. 키 페어 생성 후 다운 받은 파일은 잃어버리지 말고 잘 보관하자!!
5️⃣ 네트워크 설정
- 보안 그룹 (Security Group)이란?
- AWS 클라우드에서의 네트워크 보안을 의미한다.
- EC2 인스턴스를 집이라고 생각한다면, 보안 그룹은 집 바깥 쪽에 쳐져 있는 울타리와 대문이라고 생각하면 된다.
- 배포된 EC2 인스턴스에 사용자가 접근하려고 할 때 지정된 보안 규칙에 따라 트래픽의 허용이 결정된다.
- 보안 규칙에는 인바운드 트래픽(외부에서 EC2 인스턴스로 보내는 트래픽)과 아웃바운드 트래픽(EC2 인스턴스에서 외부로 나가는 트래픽)이 있다.
- 보안그룹 설정하기
- 자세한 인바운드, 아웃바운드 규칙 설정은 네트워크 및 보안 - 보안그룹에서 설정할 수 있다!!
6️⃣ 스토리지 구성 - EC2의 하드디스크, EBS 설정하기 (가성비 좋은 gp3 사용하자!)
3. EC2 접속 후 배포하기
1️⃣ 생성된 인스턴스 정보 해석하기
- 세부정보
- 퍼블릭 Ipv4 주소 : EC2 인스턴스가 생성되며 부여받은 IP 주소
- 인스턴스 상태
- 실행중 : 컴퓨터가 켜져 있다.
- 중지 : 컴퓨터를 잠시 꺼둔다. 단, 탄력적 IP가 설정되어 있지 않은 경우 재시작시 새로운 IP 주소가 할당된다.
- 재부팅 : 컴퓨터 재시작.
- 종료 : 컴퓨터를 아예 삭제시킨다. (한 번 종료하면 도중에 취소할 수 없으니 조심하자!!)
- 모니터링
- EC2 인스턴스가 정상적으로 작동하고 있는지, 성능을 향상시켜주어야 하는 건 아닌지 지표를 통해 파악할 수 있다.
- 보안
- 보안 그룹 설정 정보를 확인할 수 있다.
- 네트워크
- IP주소를 확인할 수 있다.
- 스토리지
- 스토리지 정보를 확인할 수 있다.
2️⃣ EC2에 접속하기 (아래와 같이 AWS 사이트에서 접속할 수도 있고, 다운 받은 key-~.pem 파일을 통해 터미널을 통해 접속할 수 있다)
3️⃣ Spring Boot 배포하기
## 1. JDK 설치
sudo apt update && /
sudo apt install openjdk-17-jdk -y # JDK 17버전 사용
java -version # 확인하기
## 2. git clone 후 서버 실행시키기
git clone {저장소url} # 배포할 프로젝트 저장소 클론
git status # 배포할 브랜치 확인하기
./gradlew build # 빌드 실행 (완료되면 build/libs/ 안에 jar 파일이 생긴다)
nohup java -jar {프로젝트명}-1.0-SNAPSHOT.jar > output.log 2>&1 & # 무중단 배포
## 3. 포트 확인
lsof -i :8080 # 서버에 배포된 포트들 살펴보기
kill -9 {포트 넘버} # 포트 강제 종료
4. 추가적인 내용들
- IP란?
- 네트워크 상에서 특정 컴퓨터를 가리키는 주소
- 예를 들어, naver.com 서비스도 IP 주소를 가지고 있다.
- Port란?
- 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소이다.
- 예를 들어 13.250.15.132:3000에서 :3000 부분이 포트 번호를 의미한다.
- 자주 사용되는 포트 번호들
- 22번 (SSH, Secure Shell Protocol) : 원격 접속을 위한 포트 번호
- 80번 (HTTP) : HTT로 통신을 할 때 사용
- 443번 (HTTPS) : HTTPS로 통신을 할 때 사용
- 탄력적 IP 설정하기
- 탄력적 IP의 필요성
- EC2 인스턴스를 생성하면 IP를 할당받는데, 이 IP는 임시적인 IP이다. EC2 인스턴스를 중지시켰다가 다시 실행시키면 IP가 바뀌어있기에 중지시켰다가 다시 실행시켜도 바뀌지 않는 고정 IP를 할당 받아야한다.
- '네트워크 및 보안 - 탄력적 IP - 탄력적 IP 주소 할당'을 통해 탄력적 IP를 할당할 수 있다.
- 탄력적 IP의 필요성
- 비용 나가지 않게 EC2 깔끔하게 종료하기
- 인스턴스 상태 - 인스턴스 종료 버튼을 눌러 EC2 인스턴스 종료하기
- 탄력적 IP 릴리스하기
'Backend > 인프라' 카테고리의 다른 글
[Linux] 배포 쉘 스크립트 작성하기 & 가상 메모리 기법 적용하기 (0) | 2024.08.18 |
---|