RDS, EC2 로 배포하기

박영준·2023년 7월 13일
0

배포

목록 보기
2/3

1. 위치 설정하기

서울 로 체크되어있는지 확인하자.

2. RDS 구매하기

1)

AWS 사이트 에서 RDS 를 검색해서 들어간다

2) 데이터베이스 생성

(1) '데이터베이스 생성' 을 누른다

(2) 설정 체크하기

프리 티어 로 반드시 체크해주자.

해당 설정들은 IntelliJ 에서 DB 와 연결 시
해당 정보들을 입력해서 연결해야 하므로, 기억 또는 메모해두자.

가용 영역은 옵션 중 아무거나 선택해도 무방하다.

추가 구성을 눌러보면 다음 항목이 뜬다

초기 데이터베이스 이름 을 입력해야한다.
해당 이름은 IntelliJ 에서 DB 와 연결 시 입력해줘야 하므로, 기억 또는 메모해두자.

해당 설정들로 데이터베이스를 생성해준다.

3. RDS 포트 열기

'인바운드 규칙 편집' 을 통해, RDS 포트를 열 수 있다.

1)

데이터베이스가 생성돼있는데, 상태는 약 5분정도 기다리면 '사용 가능'으로 변한다.

생성한 데이터베이스로 들어간다.

2)

3)

보안 그룹 ID 로 들어간다

4)

인바운드 규칙 편집을 누른다.

5)

소스 > 위치 무관 클릭해서 > 0.0.0.0/0 생성 확인 후 > 규칙 저장 클릭

4. IntelliJ 에서 확인하기

1)

생성해둔 데이터베이스로 들어가서 엔드포인트 를 복사한다.

2) DB 와 연결하기

(1)

(2)

MySQL 로 들어간다.

(3)

Name : 'DB 인스턴스 식별자' 에 적은 것을 입력하면 된다

Host : 생성한 데이터베이스로 들어가서, '엔드포인트' 를 복사해서 붙여넣으면 된다

User : '마스터 사용자 이름' 에 적은 것을 입력하면 된다

Password : '마스터 암호' 에 적은 것을 입력하면 된다

Database : '초기 데이터베이스 이름' 에 적은 것을 입력하면 된다

모두 입력 후, TEST Connection 으로 입력한 정보가 일치하는지(DB 와 정상 연결이 되는지) 확인하고, OK 를 눌러준다.

(4) application.properties

application.properties 로 들어가 아래 코드를 넣어준다.

spring.datasource.url=jdbc:mysql://엔드포인트:3306/초기 데이터베이스 이름
spring.datasource.username=마스터 사용자 이름
spring.datasource.password=마스터 암호

spring.jpa.hibernate.ddl-auto=update

만약, 로컬 환경에서 이미 DB 와 연결해 데이터를 넣었더라도
다음과 같이 아래에 추가로 DB가 생성된다.

위는 로컬에서 연결된 DB
아래는 AWS에서 생성한 DB 와 연결된 것

(5) 연결 확인

아래의 SQL 쿼리문을 입력해, 테이블을 정상적으로 조회할 수 있는지 확인하자.

select * from 엔티티명;

정상적으로 연결돼있다면, 해당 컬럼을 확인할 수 있다.

5. EC2 구매 및 접속하기

AWS EC2 서버를 구매하고, 해당 서버에서 컴퓨터를 실행시키기 위한 운영체제(OS)인 Ubuntu 를 설치하면 된다.
(Ubuntu 외에도 여러 개의 OS 가 존재한다.)

1) AWS EC2 서버 구매

(1)

AWS EC2 서버 로 들어간다.
EC2 로 검색해서 들어가도 무방하다.

(2)

인스턴스 시작을 누른다.

(3)

원하는 이름을 입력한다.

Ubuntu 를 사용할 것이므로, Ubuntu 를 선택해주고
이 중 '프리 티어' 를 선택해준다.

(4)

새롭게 키 페어를 생성해준다.

(5)

인스턴스 시작으로 인스턴스를 생성해준다.

(6)

인스턴스가 생성돼있는 것을 확인할 수 있다.

단, 무료 기간(1년) 후 결제가 되므로 그 전에
해당 인스턴스를 중지 or 종료해주자.

2) EC2 접속하기

주의!
Window 의 경우, SSH 가 없으므로 반드시 Git Bash 를 사용해줘야 한다.

(1)

Git Bash 에 해당 명령어를 입력해주자.

ssh -i 받은키페어를끌어다놓기 ubuntu@퍼블릭 IPv4 주소

퍼블릭 IPv4 주소 는 생성해둔 인스턴스로 들어가서 > '퍼블릭 IPv4 주소'를 의미한다.

(2)

Key fingerprint 관련 메시지가 나올 경우, Yes를 입력해준다.

SSH(Secure Shell Protocol)

  • 다른 컴퓨터에 접속할 때 쓰는 프로그램
  • 다른 것들 보다 보안이 상대적으로 뛰어나다
  • 접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능 (AWS EC2 의 경우, 이미 22번 포트가 열려있다)

리눅스 명령어 모음
ls: 내 위치의 모든 파일을 보여준다.

pwd: 내 위치(폴더의 경로)를 알려준다.

mkdir: 내 위치 아래에 폴더를 하나 만든다.

cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.

cd .. : 나를 상위 폴더로 이동시킨다.

cp -r [복사할 것][붙여넣기 할 것]: 복사 붙여넣기

rm -rf [지울 것]: 지우기

sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.

sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)

6. EC2 준비 및 배포하기

1) 배포 파일 빌드하기

(1)

IntelliJ > Gradle > Task > build > build 를 클릭해준다.

(2)

build 가 정상적으로 완료된다면,
프로젝트 폴더 > build > libs 에 jar 파일이 생긴 것을 확인 할 수 있다.

'clean' 을 클릭하면, build 해둔 .jar 파일을 모두 제거할 수 있다.

2)

전에 켜둔 Git Bash 창을 다시 띄워서, 아래 명령어를 입력해준다.
(ssh로 접속한) Ubuntu에서 OpenJDK 설치한 후, 버전을 확인하는 명령어다. (반드시 17v)

sudo apt-get update
sudo apt-get install openjdk-17-jdk
java -version

3) Filezilla 로 업로드

(1)

Filezilla 를 실행시키고, 빨간 상자로 표시한 부분(사이트 관리자 열기)을 누른다.

(2)

(3)

내 컴퓨터에 있는 프로젝트 폴더 > build > libs > jar 파일 하나를 오른쪽으로 끌어서 옮기기
(plan.jar 파일은 옮길 필요 없다)

4) SpringBoot 작동시키기

Git Bash 에 해당 명령어를 입력해준다.

java -jar JAR파일명.jar

아래 코드로 작동시킬 경우, 작동시키면서도 터미널을 종료해도 해당 서버가 꺼지지 않는다.

nohup java -jar JAR파일명.jar &

5) AWS에서 80, 8080 포트를 열어주기

EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도,
AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있도록 하기 위함이다.

(1)

인스턴스 > 보안 > 보안 그룹

(2)

인바운드 규칙 편집 > 80, 8080 포트를 열어주기

80포트: HTTP 접속을 위한 기본포트
8080포트: 스프링 부트 기본포트

7. 접속해보기

1)

http://퍼블릭 IPv4 주소:8080

주소창에 다음 URL 를 입력해서, 정상적으로 접속이 되는지 확인한다.

2)

Whitelabel Error Page 문구가 뜨게 되는데,
이는 index.html 을 만들지 않았기 때문에 띄울 수 있는 페이지가 없어서 나타는 것이다.


추가 Tip

1. 포트 번호 없애기

매번 :8080 이라고 뒤에 붙여줘야 하는데, HTTP 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 된다.
이는 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하면 가능하다.

1) 터미널에서 ctrl + c

띄워둔 터미널에서 새롭게 설정을 적용하기 전,
돌아가고 있던 서비스는 일단 꺼둔다

2) 포트포워딩 룰을 입력

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

2. 원격 접속 종료 후, 서버는 계속 돌아가도록

Git bash 또는 맥의 터미널을 종료하면 (= SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않게 된다.
그러나 아래 명령어를 사용하면 SSH 접속을 끊어도 서버가 계속 돌게 할 수 있다.

// 아래의 명령어로 실행하면 된다
nohup java -jar JAR파일명.jar &

3. pid 확인

// 1. 해당 명령어를 통해, EC2 로 접속 후
ssh -i 받은키페어를끌어다놓기 ubuntu@퍼블릭 IPv4 주소

// 2. 아래 명령어로 미리 pid 값(프로세스 번호)을 본다
ps -ef | grep java

// 3. 예시 : 그럼 다음과 같이 나온다
ubuntu    159076       1  0 Aug31 ?        00:02:00 java -jar toogo-0.0.1-SNAPSHOT.jar
ubuntu    161358  161347  0 01:32 pts/2    00:00:00 grep --color=auto java

4. 서버 강제 종료하기

// 아래 명령어로 특정 프로세스를 죽인다
kill -9 pid값

// 예시
kill -9 1338

5. 다시 켜기

// 아래의 명령어로 실행하면 된다
nohup java -jar JAR파일명.jar &
  • 해당 명령어를 입력하면, 이런 메시지가 나오는데 nohup: ignoring input and appending output to 'nohup.out'
    • nohup으로 수행되는 프로세스는 stdout 결과가 nohup.out 파일에 저장된다는 뜻이다.

참고: AWS - EC2, RDS를 활용하여 배포하기

profile
개발자로 거듭나기!

0개의 댓글