본문 바로가기

프로젝트/오디

[인프라 구축] AWS EC2 백엔드 API 서버 배포

배포(Deployment)

- 다른 사용자들이 인터넷을 통해 사용할 수 있게 만드는 것

- 우리가 개발을 할 때는 localhost로 개발하게 되나, 다른 컴퓨터에서는 접근이 불가하다

 

EC2(Elastic Compute Cloud)란?

- 컴퓨터를 원격으로 접속해 사용하는 서비스

- 서버를 배포하기 위해서는 컴퓨터가 필요하나, 시간적 경제적 비용이 막대하다.

- 따라서 AWS EC2라는 컴퓨터를 빌려 사용하는 것

- 주로 백엔드 서버 배포에 사용

 

EC2 배포

 

- Region 설정

: 리전이란 인프라를 지리적으로 나누어 배포한 데이터 센터

: EC2는 원격으로 컴퓨터를 빌리는 것이다.

: 어디에 있는 컴퓨터를 빌릴 것인가? 에 대한 설정이 region

: 사용자의 위치와 지리적으로 가까울수록 전송 속도가 빠르다

 

ec2 기본 세팅

 

- ec2 대시보드에서 인스턴스 시작을 클릭

 


주요 설정 사항

- 이름 및 태그 : 내가 빌리는 컴퓨터의 이름/ 추후 개발용-배포용 서버 구분 등에 사용

 

- 애플리케이션 및 OS 이미지 : 서버 배포에 가장 가벼운 OS는 ubuntu

 

- 인스턴스 유형 : 빌리려는 컴퓨터의 스펙

 

- 키 페어 : ec2 컴퓨터의 인증 키

- 키 페어 생성

- 유출과 분실에 주의

 

- 네트워크 설정

 

-- 편집을 눌러 세부 설정 가능

 

-- 보안 그룹 설정

--- AWS 클라우드에서의 네트워크 보안

--- EC2에 접속 가능한 그룹을 설정

--- EC2 인스턴스를 하나의 집이라 가정하면 보안그룹은 집 바깥의 쳐진 울타리와 대문이다

 

--- 보안그룹 규칙

---- 인바운드 트래픽 : 외부 > Ec2 인스턴스

---- 아웃바운드 트래픽 : 외부 < Ec2 인스턴스 

 

--- 보안그룹 설정시, IP의 범위와 포트를 설정할 수 있다

 

[인바운드 규칙 예시]

- ssh 22포트 : 원격제어/ 데이터 전송 프로토콜인 ssh의 22번 포트에 대한 요청을 허용하겠다.

- 위치무관 : 요청 IP를 따로 제한하지 않는다

 

> IP와 Port의 개념

더보기

IP : 특정 컴퓨터를 가리키는 주소

ex) 13.250.15.132

 

Port : 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소

ex) 13.250.15.132:3000 > 3000번 포트를 의미

- 한 컴퓨터 내에서 실행되는 여러 프로그램 중 하나

 

-- 잘 알려진 포트(well-known-port)

--- 0-1023번까지는 주요 통신을 위한 규약에 따라 이미 정해놓음

--- 22번(SSH) : 원격 접속을 위한 포트 번호

--- 80번(HTTP) : Http로 통신을 할 때

--- 443번(HTTPS) : Https로 통신을 할 때 사용

 

- 스토리지 세팅(EBS-Elastic Block Storage)

: EC2안에 부착되어 있는 일종의 하드디스크

: 스토리지, 볼륨이라고도 불림

 

- EC2 접속하기

 

-- 퍼블릭 IPv4 주소 : 빌려온 컴퓨터의 주소

-- 인스턴스 상태

   -- 인스턴스 중지 : 일시정지

   -- 인스턴스 종료 : 컴퓨터를 삭제

 

- 보안 그룹

- 모니터링 : 실제 서버를 운영할 때 사용되는 리소스 그래프 표시

 


탄력적 IP 연결하기

-- EC2는 인스턴스를 생성하면 임시적인 IP를 할당 받음

-- 만약 인스턴스를 중지했다 다시 실행하면 새로운 IP를 할당받음

-- 그러나, 고정 IP 할당이 필요할 때가 있다 == 탄력적 IP

 

> 네트워크 및 보안 > 탄력적 IP > 탄력적 IP 주소 할당

 

 

그렇게 되면 탄력적 IP 주소를 할당받게 된다

여기에선 43.203.97.44가 할당되었다.

 

이제 작업 > 탄력적 IP 주소 연결로 들어간 후 인스턴스와 연결해준다

 

다시 인스턴스에 접속해보면 설정한 탄력적 IP주소로 변경되어 있는 모습을 확인가능하다

 

이제 인스턴스를 중지하더라도 IP주소가 변경되지 않는다

우리가 빌린 인스턴스의 IP주소가 탄력적 IP주소로 고정된 것이다.

 


SpringBoot 서버를 배포하기

- jdk 설치하기 : ex) 17버전

sudo apt update && / sudo apt install openjdk-17-jdk -y

 

- 설치 확인 : java -version 

- 17버전이 잘 설치된 것을 알 수 있다

 

- github clone

git clone {repo 주소}

 

-- gitignore에 있는 주요 파일은 직접 vi를 통해 작성

 

- 실행하기

-- clean 설정은 기존에 build된 파일을 삭제하고 새로운 build

./gradlew clean build

 

build > libs 로 접속

cd build
cd libs

 

실행하기

sudo java -jar {jar 파일명}.jar