클라우드/AWS

(AWS)EC2,S3,RDS 기본 설정법.

acid7937 2023. 2. 3. 18:14

 

서버를 구동하기 위해서는 반드시 서버를 구동할수 있는 컴퓨터가 필요할 것이다. 유명 대기업들은 자체 서버실을 운영하며 본인 회사의 서버를 자체적으로 관리하고 있다. 하지만 규모가 작은 기업은 위의 사진과 같은 서버실을 따로 운영하는게 부담일수도 있다.

 

대안 으로 사용할수 있는게 클라우드 컴퓨팅이며 유명한 기업의 플랫폼들은 대표적으로 AWS, Azure, Firebase 등이 있다.

우리는 이중 가장 유명한 AWS(Amazon Web Services)에 대하여 알아볼 것이다.

 

앞서 이번 실습에서 진행할 단계는 로그인을 하고 토큰을 받는것 까지 진행해 볼것이다.

 

제목처럼 우리는 3가지의 기능을 학습하여야 한다.

 

 

 

EC2 (Amazon Elastic Compute Cloud)

EC2는 원격으로 제어 할수 있는 컴퓨터 한대를 빌리는 것이다.

혹시 N드라이브 혹은 구글드라이브를 사용해 본적이 있는가? 개념은 조금 다르지만 EC2는 저장 공간뿐만이 아닌 컴퓨터를 빌린다고 생각하면 쉽다. 어렵게 생각할게 전혀 없다.

EC2에서 E가 Elastic의 약어인데 EC2를 사용하면 성능, 용량, 갯수(인스턴스), 운영체제 등을 직접 설정하여 비용관리를 손쉽게 할수가 있다.(피씨방 요금제랑 비슷하다고 생각하자 사용한 만큼 돈 내면 된다)

 

 

AMI (amazon machine image)

우리는 서버 컴퓨터 한대를 인스턴스라고 부른다. 인스턴스를 생성하기 위해서는 운영체제를 선택해야 하는데,

인스턴스를 만드는건 간단하다. 운영체제를 직접 설정하고 용량과 사용목적에 맞는 네트워크 설정등을 생성하면 끝이다

 

 

설정을 다하고 인스턴스 시작을 하면 생성할수가 있다.

 

본인이 만든 인스턴스를 확인할수 있게 된다.

항목에 있는 인스턴스 ID를 눌러주게 되면

 

 

이처럼 인스턴스 요약을 볼수 있는데 연결 버튼을 눌러주자.

 

여기서 연결을 눌러주면 EC2를 사용할수 있게 된다.

 

실행 초기 화면이다 아무것도 안보이며 터미널 처럼 명령어를 기입하는 방식으로 구동하면 된다.

 

 

본인 EC2는 AWS리눅스 이다.

sudo apt update 와 sudo apt install openjdk-11-jre-headless 를 입력하여 자바를 설치해 주자.

 

선택창이 나오면 Y를 눌러주자(나는 이미 설치해서 안뜸)

 

이후 사용법은 전부 같다 다들 깃 사용법을 알것이라 생각하여 깃 사용법은 따로 올리지 않겠다.

git clone 하여 빌드와 실행을 하면

./gradlew build

java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar

 

 

퍼블릭 IPv4 DNS 주소로 접속하면 아래 출력을 확인할수 있다.

 

 

 

Amazon Simple Storage Service(Amazon S3)

AWS에서 제공하는 클라우드 스토리지 서비스다. S3는 뛰어난 안정성으로 인기가 좋은데 내구성이 좋아서 데이터를 분실할 기회가 매우 낮다고 한다.

이걸로 우리는 정적 웹사이트를 만들어 볼꺼다.

 

정적은 우리가 파일을 받을때 파일 그대로의 내용을 받는게 정적이다.

반대로 동적은 우리가 파일을 받을때 실시간으로 추가 계산이 이뤄진다음에 받는것이 동적인데.

 

예시로 정적은 지금 여러분이 보고 있는 블로그 같은 게시판이며 동적은 네이버 실시간 검색 혹은 SNS를 예시로 들수 있다.

 

정적 웹페이지를 만들기 위해서는 4단계가 필요하다.

 

1.빌드

2.버킷 생성.

3.업로드

4.정책 생성.

 

간단하게 요약하면 우리의 빌드 파일을 로컬에서 생성한뒤에 S3에 올리는게 전부다. 알아보자.

 

먼저 처음 하는 사람들은 아래 절차를 입력해라.

 

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
# Ubuntu
sudo apt update
sudo apt install wget

# macOS
brew update
brew install wget
nvm install 16

 

nvm과 node js. 를 설치하였다.

 

당연히 먼저 개발을 마친 파일이 있어야 될것이다. 개발된 파일을 S3에 올리는 거라 없다면 진행이 불가하다.

 

 

cd client 입력하여 진입후에

npm install 를 사용하여 의존성 주입을 해야된다.

 

.env파일에 React_APP_API_URL=(퍼블릭 IPv4 DNS 주소):8080 를 입력한다.

 

 

 

npm run build를 하면 빌드 파일이 생성이 되며

 

 

버킷을 만들어 주고

 

업로드에 들어간뒤 (들어가기전에 속성에서 정적 웹 사이트 호스팅' 옵션을 활성화 하자)

엔드포인트 주소를 기억하자

 

 

여기에 드레그해서 던지면 된다.

 

권한에 들어가서 위 처럼 만들어 준다.

 

 

정책 생성기에 들어가고

 

Actions는 get Objects 선택

ARN은 위에 사진보면 내꺼 ARN이 있는데

arn:aws:s3:::be-7-acid7937/* 를 입력 하면 된다. 본인꺼 입력하자.

 

그후 나온 코드를 정책에다 붙여넣고 저장하면 된다.

 

아까 기억하라고 했던 엔드포인트를 들어가면 위 처럼 내가 만든 창이 보일것이다.

 

 

RDS(Relational Database Service)

마지막으로 관계형 DB연결을 해줘야 한다.

 

DB 생성을 눌러주고

 

my SQL 선택 하고 아래 사진처럼 따라하자.

RDS 인스턴스 클래스는 t2.micro

 

포트 번호 노출을 방지하려는 목적으로 13306번으로 지정

 

이러면 RDS 인스턴스 생성이 되었고

 

EC2 인스턴스의 터미널에서 application.properties 파일 설정을 해야한다.

 

 

  1. spring.datasource.url 변수에서 {}부분에는 AWS RDS '엔드포인트 주소:포트'가 들어가야 한다.
  2. spring.datasource.username 변수에는 AWS RDS Mysql 마스터 사용자 이름을 넣는다.
  3. spring.datasource.password 변수에는 AWS RDS Mysql 마스터 암호를 넣는다.
  4. config.domain 에는 AWS S3 Endpoint 주소를 넣고 해당 부분에는 꼭 앞에 http:// 가 포함되어야 한다.

그 다음 빌드 클린과 재빌드를 한다.

 

 

java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar 으로 다시 실행하면

 

DB 접근이 가능해져 로그인 기능을 구현할수 있게 된다.