home > devops > aws > [aws] ec2를 통해 백엔드 api 서버 배포하기 (2)

[aws] ec2를 통해 백엔드 api 서버 배포하기 (2)
devops aws ec2

intro : 백엔드 api 서버를 배포하는 방법에 대해서 알아보자.

이전 글 [aws] ec2를 통해 백엔드 api 서버 배포하기 (1) 과 이어집니다.

EC2 설정하기

이전글에서 인스턴스를 생성하였고, 이번글에서는 EC2가 생성되었다는 가정하에 이어서 글을 작성한다.

Step4. 생성된 EC2 살펴보기

만약 이전글을 보고 EC2 인스턴스를 정상적으로 생성하였다면 다음과 같이 EC2 인스턴스 항목에 아래의 이미지를 확인 할 수 있다.

image1

(시간이 조금 걸릴수도 있다. 보통 5분 내외로 이렇게 생성된 인스턴스 목록이 보인다.)

인스턴스 아이디 항목이 파란색으로 링크가 있는데 그걸 클릭하면 다음과 같은 화면이 보여진다.

image2

(가장 중요한 정보는 퍼블릭 ipv4와, 인스턴스 상태이다.)

퍼블릭 ipv4란?

퍼블릭 ipv4는 EC2 인스턴스가 생성되면서 부여받은 IP 주소이다. 인스턴스에 접근하려면 이 IP 주소로 접근하면 된다.

인스턴스 상태란?

인스턴스 상태는 말그대로 EC2가 어떠한 상태인지를 나타내는데, 만약 실행중 이라고 떠 있다면, 컴퓨터가 정상적으로 실행중임을 뜻한다.

Step5. EC2 접속하기

이제 본격적으로 EC2에 접속할건데, 최상단 우측의 빨간색 박스로 연결 버튼이 있는데 클릭을 해보자.

image3

(연결 버튼을 클릭하자.)

그럼 아래와 같은 이미지가 보이는데, 기본적으로 선택되어 있는 항목은 변경하지 말고, 연결 버튼만 클릭한다. (사실 SSH를 통해 연결하는 방법을 주로 사용하기는 하지만, 기본적인 EC2 인스턴스 연결 방법을 통해 먼저 접속해 보겠다.)

image4

(연결 버튼을 클릭하자.)

그럼 다음과 같이 새창이 생성 되면서 리눅스 화면을 AWS 콘솔 웹에서 확인할 수 있다. 기본적인 명령어 pwd 입력하여 출력결과를 확인해보자.

image5

(셍성된 인스턴스에 pwd 명령어를 입력해보자.)

Step6. 탄력적 IP 연결하기

탄력적 IP가 왜 필요할까?

우리가 위 단계를 통해 인스턴스를 생성하여 할당받은 IP는 임시 IP이다. EC2 인스턴스를 중지시켰다가 다시 실행시키면 IP가 변경되어 있다. 그래서 중지시켰다가 다시 재 실행하여도 변경되지 않는 고정 IP가 필요하다. 이게 바로 탄력적 IP 이다. 인스턴스를 생성하고 나서 필수적으로 설정해야하는 탄력적 IP를 진행해 보도록 하겠다.

image6

(네트워크 및 보안의 탄력적 IP를 클릭하자)

그럼 아래와 같은 페이지로 이동하는데 우측 상단의 주황색 버튼 탄력적 IP 할당을 클릭한다.

image7

(탄력적 IP 할당을 클릭하자.)

이후 페이지에서도 기본값을 변경하지 않고, 할당 버튼을 클릭하자.

image8

(할당 버튼을 클릭하자)

탄력적 IP 주소가 정상적으로 할당된 모습이다.

image9

(탄력적 IP 주소 할당 성공!)

할당된 탄력적 IP 주소를 우리가 만든 인스턴스에 연결을 해볼건데 다음과 같이 탄력적 IP 주소 연결 버튼을 클릭한다.

image10

(인스턴에 탄력적 IP 주소를 연결해보자.)

이때 인스턴스 연결항목에서 내가 탄력적 IP주소와 연결하고자 하는 인스턴스를 반드시 선택하고 연결 버튼을 클릭한다.

image11

(연결하고자 하는 인스턴스를 반드시 선택해야한다.)

이제 스프링부트를 배포하기까지 모든 준비가 끝났다. 준비된 환경에서 스프링부트를 우리가 만든 인스턴스에 배포하고 접속해보자.

백엔드 api-server EC2 인스턴스에 배포하기

Step1. jdk 17 install

가장 먼저 다음 명령어를 우리가 생성한 EC2 ubuntu에 입력하여 jdk를 설치한다. jdk를 17 버전으로 설치하는 이유는 우리가 배포할 스프링부트의 버전이 3.0 이상의 버전이기 때문이다. 다음 프로젝트를 예시로 배포하길 추천한다. (본인이 만든 프로젝트를 배포해 봐도 됩니다.)

// 1번 명령어
sudo apt update 
// 2번 명령어
sudo apt install openjdk-17-jdk -y

다음 명령어로 jdk가 정상 설치되었는지 확인한다.

// 자바 버전이 아래와 같이 출력된다.
java --version

// openjdk 17.0.13 2024-10-15
// OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu124.04)
// OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu124.04, mixed mode, sharing)

Step2. sample 프로젝트 git clone

jdk 설치가 완료되었다면, git 명령어를 통해 프로젝트를 설치해보자.

// EC2 배포 테스트를 위한 sample 프로젝트이다.
git clone https://github.com/sbi1024/api-server-ec2.git

Step3. sample 프로젝트 build 하기

git 명령어로 다운받은 프로젝트를 api 폴더로 이동하여 build를 진행한다.

// api-server-ec2 폴더로 이동
cd api-server-ec2
// 혹시 빌드된 파일이 있다면 지우고, 빌드한다.
./gradlew clean build

// 만약 권한문제가 발생한다면 다음과 같은 명령어를 실행한다.
chmod +x gradlew

image12

(다음과 같이 화면에서 실행된다. 시간이 조금 걸리는거 같다.)

Step4. sample 프로젝트 build 파일 실행하기

먼저 build된 파일이 존재하는 위치로 이동해야 하는데, 다음과 같은 위치에 build 된 파일이 존재한다. ~/api/build/libs/ 아래 이미지에서도 확인 할 수 있고, 정상적으로 폴더를 이동하였으면 build된 2개의 파일이 존재하는데 SNOPSHOT.jar 파일을 실행한다. (plain은 안정화된 단계에서 주로 사용하고, snapshot은 개발 및 테스트 단계에서 사용한다.)

// build 된 파일이 존재하는 폴더로 이동
cd ~/api-server-ec2/build/libs
// 빌드된 SNAPSHOT.jar 파일 실행
sudo java -jar api-server-ec2-0.0.1-SNAPSHOT.jar 

image13

(java -jar 명령어를 통해 실행하려면 폴더를 이동해야한다.)

위 명령어를 통해 정상적으로 실행하였다면 다음과 같이 출력된다. 인텔리제이에서 백엔드 서버를 개발하였을때 자주보던 출력문구들이다.

image14

(80 포트로 잘 실행된 것을 알 수 있다.)

80 포트로 실행된 것을 확인하였으면, 본인의 ipv4 주소로 브라우저에 입력하여 접속해보자. 80포트이기때문에 ip주소값만 브라우저에 입력하여도 정상적으로 접근이 된다.

image15

(이미지의 문구를 정확히 확인하였다면 정상적으로 배포가 되었음을 알 수 있다.)

EC2 종료하기

지금까지 EC2 인스턴스를 설정하고 생성하여 스프링부트를 배포하고 접속까지 해보았다. 이제 우리가 만든 인스턴스를 종료하는 방법을 알아보자.

EC2 인스턴스 종료하기

인스턴스를 종료하는건 생성하는거보다 간단하다. EC2 인스턴스 항목에서 인스턴스 상태를 인스턴스 종료(삭제) 를 클릭한다.

image16

(삭제 버튼 클릭)

여기서도 종료(삭제) 버튼을 클릭한다.

image17

(종료(삭제) 버튼 클릭)

인스턴스는 위 단계로 종료(삭제)가 되지만, 아직 탄력적 IP주소를 릴리즈 하지 않았다. 아래의 단계를 거쳐서 탄력적 IP 주소도 릴리즈 하자.

EC2에 연결하였었던 탄력적 IP 주소 릴리즈

작업버튼을 클릭하고, 탄력적 IP 주소 릴리즈 버튼 클릭하자

image18

(탄력적 IP 주소 릴리즈 버튼 클릭!)

묻지도 따지지도 말고 릴리즈 버튼을 클릭하자.

image19

(릴리즈 버튼 클릭!)

위 두개의 단계를 거치면 AWS를 통해 실행하고 있는 그 어떤것도 없기 때문에 비용이 나가지 않게된다. (프리티어라고 해서 무조건적으로 무료로 제공해주는건 아니다. 제한사항이 존재한다.)

다음으로

이렇게 하여 ec2를 통해 백엔드 api 서버 배포하기가 마무리 되었다. 다음으로는 도메인 연결하기 (Route53)에 대해서 학습할 예정이다.

다음 글 : [aws] ec2 인스턴스에 도메인(route53) 구매해서 연결하기 (feat. ec2)