안녕하세요 팀056 이현석입니다!
저번 시간에 시도했던 AWS 자동배포!! 이전에 준비해야할 여러가지 중 오늘은 EC2와 RDS에 대해 집중적으로
알아 보겠습니다~~
EC2 란?
Amazon Elastic Compute Cloud을 줄여 EC2 라고하는 클라우드 컴퓨팅 서비스 입니다.
사용자가 가상의 컴퓨터를 임대받아 애플리케이션을 배포할 수 있고 이는 하드웨어에 대한 투자 없이 신속하게 개발하고 배포 할 수 있는 환경을 만들어 주었습니다.
주요한 특징을 보고 바로 사용방법에 대해 알아 보겠습니다.
- Auto Scailing을 통한 자동 확장 및 축소
- 사용자가 인스턴스를 완전히 제어 가능
- 리소스 보안과 네트워킹 기능을 지원
- 사용한 만큼 페이 지불
EC2 시작하기
아래 더보기를 클릭해 과정에 따라 설명해 드리겠습니다.
1. AWS로그인 후 EC2 인스턴스 시작하기
1-1. 검색창에 EC2 입력
1-2. 인스턴스 시작 클릭
******매우 중요******
매우 중요한 내용이라 급하게 추가 합니다. 처음 배포하면 바로 인스턴스 생성하고 쭉쭉 진행하지만 나중에 확인 해 보면 오른쪽 위의 '서울'리전 이 아닌 미국 어딘가로 선택되어 있는 경우가 있는데 이러면 물리적으로 멀리 떨 어진 곳에서 컴퓨터를 빌려오기 때문에 속도 측면에서 안 좋다.
어마어마하게 큰 차이는 없지만 굳이 물리적으로 먼 곳보다는 가까운 리전을 이용하는게 좋다.
1-0 오른쪽 위에 서울 리전인지 꼭 확인하기
2. 이름 및 AMI선택
2-1. 구별가능한 이름 작성
2-2. AMI이란?
- 운영체제 및 서비스 전달에 필요한 추가 소프트웨어를 포함하는 읽기 전용 파일 시스템 이미지
2-3. 프리티어 꼭 확인하기 아니면 과금이 많이 생길 수 있습니다.
3. 인스턴스 유형 선택, 키페어 생성
3-1. 인스턴스 유형 프리티어 확인하기!
3-2. 키 페어 생성 하기
4. 키 페어 설정하기
4-1. 키 페어 이름 설정(나중에 크게 식별이 필요하지 않아 EC2이름과 동일하게 함)
4-2. 설정은 기본 값 그대로 하고 생성하기
* 키 페어는 Public Key와 Private Key로 구성되어 Amazon EC2 인스턴스에 연결할 때 ID를 증명하는 데 사용함
* EC2는 인스턴스에 Public Key를 저장하고 사용자는 Private Key를 저장
5.EC2 생성하기
5-1. 인스턴스 시작하기를 누르면 EC2 생성이 완료됨
6.상태 검사 완료 기다리기
6-1. 인스턴스 상태에 초록불이 들어오고 상태검사가 연결중 -> 2/2개 검사로 변할 때 까지 기다리기
6-2. 연결 버튼 누르기
7.인스턴스 연결하기
7-1. 내 컴퓨터에서 우분투 실행, 1번 입력
7-2. 2번 입력
7-3. yes작성 까지 완료하면 내 컴퓨터와 인스턴스는 Key를 가지고 연결된 상태
8.EC2 인스턴스에 연결
8-1. 연결 클릭
8-2. EC2 인스턴스 연결 체크하고 연결
9.실행 중인 EC2 확인
EC2 build 하기
지금부터는 build 과정까지만 코드와 글로 간단하게 설명하겠습니다!
*EC2 인스턴스에 작성하시면 됩니다!
1. 기본적인 코드 작성
sudo apt update
sudo apt install openjdk-11-jre-headless
2.build 진행
./gradlew build
- 로컬 환경에서 문제 없이 실행된다면 바로 build를 진행 하면됩니다
*gradlew 이 있는 파일 위치에서
- 아마 Prermission denied 에러가 나올 것이다.gradlew에 대한 권한을 주려면 다음과 같은 코드가 필요하다.
sudo chmod +x gradlew
- 이제 권한은 주어졌다. 하지만 또다시 에러 발생!!.......
- bad interpreter:no cush file or directory 자세한 내용이 나온 블로그 링크를 코드 아래에 걸어두겠습니다.
sudo apt install dos2unix
dos2unix ./gradlew
- 이제 다시 ./gradlew build를 진행하면 build가 진행되는 모습을 보실 수 있습니다.
- 이 모든 과정은 EC2인스턴스 내에서 그리고 gradlew가 있는 경로에서 진행되었다는 점!
3.EC2 인스턴스에서 서버 실행하기
- 빌드가 완료되었다면 이제 서버 실행이 남았습니다.
- 아래는 실행 코드입니다 천천히 설명 해드릴께요!
java -jar build/libs/{파일 이름}-0.0.1-SNAPSHOT.jar
- build/libs를 통해 {파일 이름}-0.0.1-SNAPSHOT.jar 파일이 있는 곳까지 찾아 들어가 해당 파일을 실행하라는 코드입니다.
- 주의 하실 점은 파일의 위치와 이름이 비슷한 파일을 실행하지 않는 것 입니다.
이상 build와 deploy 과정은 완료되었지만 뭔가 빠졌습니다.... 바로 RDS를 사용하지 않아 현재 h2에 데이터 들이 모두 저장 되어있습니다. 아래에서RDS 연동에 대해 알아 보겠습니다!
RDS란?
Relational Database Serviced을 줄여 RDS 관계형 데이터 베이스 입니다.
관리형,관계형 데이터 베이스로서 사용자 Amazon Aurora, MySQL, MariaDB, Oracle, Microsoft SQL Server, PostgreSQL
의 익숙한 6개의 데이터베이스 엔진을 제공합니다.
마찬가지로 주요한 특징을 알아보고 사용방법에 대해 알아 보겠습니다.
- 데이터베이스 소프트웨어 자동 패치
- 간편한 스토리지 조정
- 자동 백업기능의 활성화 (초 단위로 복원가능)
- 자동 호스트 교체 (하드웨어에 장애가 발생시, 자동으로 교체)
- 데이터베이스 이벤트를 이메일이나 SNS를 통해 받을 수 있음
RDS 시작하기
아래 더보기를 클릭해 과정에 따라 설명해 드리겠습니다.
1. AWS로그인 후 RDS 시작하기
1-1. 검색창에 EC2 입력
1-2. 데이터베이스 생성 클릭
2. 원하는 데이터베이스 선택
2-1. 우리가 사용 할 데이터베이스는 MySQL
3.템플릿 선택,DB식별자 정보 입력
3-1. 우리는 언제나 프리티어를 사용
3-2. 다음은 데이터베이스 사용을 위한 식별자 이름을 작성
3-3. 제약조건에 맞춰 비밀번호를 작성
***나중에 데이터베이스 연동에 필요한 식별자 이기 때문에 따로 메모장에 작성***
4.퍼블릭 엑세스와 데이터베이스 포트 설정
4-1. 퍼블릭엑세스를 '예'로 변경
- 데이터베이스를 호스팅하는 VPC 외부의 EC2 인스턴스 및 기타 리소스가 여기에 연결 허용
4-2. 기본으로 설정 되어있는 3306 포트는 다른 곳에서 사용 될 수 있기 때문에 사용하지 않을 것 같은 포드 입력
5. 초기 데이터 베이스 이름 입력
5-1. 이름을 지정하지 않으면 RDS에서 데이터베이스를 생성하지 않음
***나중에 입력할 일이 있으니 메모하기***
***데이터 베이스 생성 생성하기 클릭***
6. 생성된 데이터베이스 엔드포인트 가져오기
6-1. 내가 생성한 데이터베이스의 엔드포인트를 복사
7.데이터베이스 연결 테스트
7-1. 내 컴퓨터의 CMD창에서 진행
7-2. 위의 경로처럼 MySQL의 Bin까지 들어가야한다.
7-3. 'mysql -u {마스터 이름} --host {엔드 포인트 주소} -P {포트 번호} -p'을 입력
- {마스터 이름} = 3-2의 마스터 사용자 이름 'admin' ({}는 전부 제거해서 입력)
- {엔드 포인트 주소} = 6-1에서 복사한 주소
- {포트 번호} = 4-2의 작성한 포트번호13306
7-4 실행하면 C:\Program~~~> 가 mysql> 변하게 되는데 이곳에 아래 코드 입력하고 test가 나오는지 확인하기
show databases;
서버환경설정
- 서버의 환경 설정을 통해 생성한 RDS 인스턴스에 접속하고, 클라우드 데이터베이스를 사용가능하게 만들기
- 여기부터는 간단한 코드와 글로만 설명드리겠습니다!
1.apllication-server.yml 파일 생성과 설정
//EC2 서버에서 작성
nano src/main/resources/application-server.yml
//application-server.yml 내부에 아래 코드 작성
spring:
jpa:
hibernate:
ddl-auto: create # (1) 스키마 자동 생성
show-sql: true # (2) SQL 쿼리 출력
properties:
hibernate:
format_sql: true # (3) SQL pretty print
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
password: ${DB_PASSWORD} # (4)
url: ${DB_URL} # (5)
username: ${DB_USER} # (6)
(4). 3-3의 비밀번호 작성
(5). 6-1의 엔드 포인트 작성
(6). 5-1의 초기 데이터베이스 이름 작성
RDS와 EC2의 연결준비가 완료 되었고 EC2 서버의 gradlew이 있는 경로로 돌아와 다시 빌드하고 배포하면 됩니다!
마무리
이상 RDS와 EC2의 연결은 마무리 되었습니다.
하지만 아직 shell script로 서버를 항상 열어두는 것에 대해서는 포스팅 하지 않았습니다.
이에 대해서는 추가로 포스팅을 진행하도록 하겠습니다~~ 감사합니다!!
'[ BE ] 기술' 카테고리의 다른 글
[BE-기술] 자기참조를 활용한 계층형 카테고리 구현 (0) | 2022.10.10 |
---|---|
[BE-기술] Spring Data JPA와 QueryDSL (0) | 2022.10.08 |
[BE-기술] 401(Unauthorized)과 403(Forbidden) (2) | 2022.10.08 |
[BE-기술] 채식쇼핑몰 '채식이들' 프로젝트 백엔드 개발 설계 후기 (0) | 2022.10.06 |
[BE-기술] Spring Data JPA의 DB 초기화 (0) | 2022.10.02 |