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

느려도 꾸준히·2023년 11월 15일

01. RDS 구매하고 MySQL 세팅하기

< RDS 구매 >

  1. 미리 가입한 AWS에 로그인 후 RDS를 검색하고 "데이터베이스 생성"을 클릭

  2. "표준생성" 과 "MySQL"을 클릭

  3. 템플릿에서 "프리 티어"를 선택 (요금부과 방지를 위해)

  4. DB 인스턴스 식별자에 원하는 이름 입력

  5. 아이디, 비밀번호를 생성 (DB 접속용으로 사용해야 하니 꼭 기억하기!!)

  6. 연결 -> 추가 연결 구성을 클릭

  7. 퍼블릭 액세스 기능: "예" 선택
    → 이 설정이 되어있어야 우리 컴퓨터에서 AWS RDS 의 MySQL과 연결이 가능하니 꼭 퍼블릭 액세스 설정을 확인해야 한다!!

  8. 추가 구성 > 초기 데이터베이스 이름 입력

  9. 데이터베이스 생성 클릭

< RDS 포트 열기 >

  1. 사용하려는 데이터베이스 클릭

  2. 연결 & 보안 > 보안 > VPC 보안 그룹 의 springboot-db-security 클릭

  3. 보안 그룹 ID클릭 후 인바운드 규칙 편집 클릭

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

< IntelliJ에서 확인 >

  1. 엔드포인트 확인 후 드래그하여 복사

  2. 연결하려는 프로젝트 열고 Database 탭을 클릭

  3. Data Source > MySQL 을 클릭

    • Name: DB 인스턴스 식별자 이름
    • Host: 나의 엔드포인트
    • User: 나의 Username
    • Password: 나의 비밀번호
    • Database: 초기 데이터베이스 이름
    • Test Connection 을 클릭하고, 성공적으로 연결되면 OK 를 클릭
  4. 스프링 부트를 MySQL과 연결하기

    • 스프링 부트 설정의 대부분은 application.properties 에서 관리한다.
spring.datasource.url=jdbc:mysql://나의엔드포인트:3306/shop
spring.datasource.username=나의USERNAME
spring.datasource.password=나의패스워드
spring.jpa.hibernate.ddl-auto=update
  1. 프로젝트를 작동시키고, 등록 후 서버를 내린 다음에 다시 작동시켰을 때 연결되는지확인

.

02. EC2 구매하기

  1. Ubuntu로 20.04 or 22.04를 선택한 후 구매 (t2.micro 1년간 무료)
  • 대상 인스턴스에 마우스 우클릭 > '인스턴스 상태' 를 클릭합니다. 중지 또는 종료 중 하나를 클릭하면 명령을 실행하면 서버 종료
  1. KEY 생성하기를 클릭 후, key를 발급 받기(서버 접속 시, 매우 중요!!!)

  2. 나머지 체크리스트들을 체크 후, Launch instance를 클릭

< AWS EC2에 접속 >

  • SSH(Secure Shell Protocol):
    다른 컴퓨터에 접속할 때 쓰는 프로그램. 다른 것들 보다 보안이 상대적으로 뛰어나다.
    접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능하다. (AWS EC2의 경우, 이미 22번 포트가 열려있다.)
  1. Mac OS: Mac은 ssh가 있어서, 터미널에서 명령어로 바로 접근 가능!
    1. 방금 받은 내 Keypair의 접근 권한을 바꿔주기
      -> sudo chmod 400 받은키페어를끌어다놓기
    1. SSH로 접속하기
      -> ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
      예시)ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20

< 간단한 리눅스 명령어 >

ls: 내 위치의 모든 파일을 보여준다.

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

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

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

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

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

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

sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)

.

03. EC2 준비하고 배포하기

  1. 배포 파일 빌드하기
  • Gradle 을 선택해 Tasks > build > build 를 더블 클릭
  • 좌측 build 폴더 > libs 아래에 .jar 확장자로 끝나는 파일이 생겼으면 빌드에 성공한 것.
  1. (ssh로 접속한)Ubuntu에서 OpenJDK 설치하기 (터미널에 명령어로 접근)
sudo apt-get update
sudo apt-get install openjdk-17-jdk
java -version
  1. Filezilla를 이용해서 배포 파일을 업로드하기
  • 파일질라 실행, 다음과 같이 설정

  • 정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음
    (Host: 내 EC2서버의 ip // User: ubuntu 로 입력)

  • 마우스로 드래그 해서 파일을 업로드/다운로드하면 된다.

    • 왼쪽(본인 컴퓨터)에서 개발 완료된 프로젝트 폴더의 build > libs로 이동
    • 오른쪽(EC2)으로 드래그

  1. 스프링 부트 작동시키기
java -'jar JAR파일명'.jar
  1. AWS에서 80, 8080 포트를 열어주기
  • EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도,
    AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있다.
    -> 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.
  1. 해당 보안그룹을 클릭한 후 Edit inbound rules (인바운드 규칙 편집)를 선택

  2. 두 가지 포트를 추가 (8080포트는 범위가 2가지다.)

  • 80포트: HTTP 접속을 위한 기본포트
  • 8080포트: 스프링 부트 기본포트
  1. 접속해보기
http://'내 public 아이피':8080

.

04. 포트포워딩 & nohup 적용하기

< 포트 번호 없애기 >

  • 지금은 8080 포트에서 웹 서비스가 실행되고 있다.
    그래서 매번 :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
  1. 다시 서비스 시작
java -'jar JAR파일명'.jar
  1. 포트 번호를 떼고 웹 브라우저에서 접속
http://'내 public 아이피'/

< SSH 접속을 끊어도 서버가 계속 돌게 하기 >

  • 현재는 Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있다.원격접속을 끊어도, 서버는 계속 동작하게 해보았다.
  1. 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
1. 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기

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



2. 서버 종료하기 - 강제종료하는 방법

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

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



3. 다시 켜기

# 아래의 명령어로 실행하면 된다
nohup java -jar JAR파일명.jar &
  1. 브라우저에서 다시 접속해보기
http://'내AWS아이피'/

.
.
<참고> https://online.spartacodingclub.kr

0개의 댓글