본문 바로가기

Spring

[JMeter] 10분만에 EC2에 Spring Boot 프로젝트 배포 및 RDS(Postgres) 연결 정리

반응형

시작전 참고 사항

  • 기본적으로 spring 프로젝트의 개발 및 테스트가 끝났다고 가정하고 진행함
  • docker, nginx 등 부가 프로그램은 사용하지 않음
  • ssl 인증서 적용하지 않음

위 생략된 내용들은 해당 블로그 다른 글들에 작성되어있음

진행 순서

  • EC2 인스턴스 생성
  • RDS 인스턴스 생성
  • EC2, RDS 보안 설정
  • EC2에 ssh 접속하여 Java,postgres 설치
  • EC2에서 RDS 접속하여 DB 생성
  • Spring Boot DB연결 설정 및 빌드 및 Jar파일 생성
  • EC2에 scp 명령어로 Jar파일 전송 및 실행
  • postman으로 접속 확인

 


 

EC2 인스턴스 생성 (같은 내용의 작성된 글로 대체함)

https://kanoos-stu.tistory.com/29

 

[AWS-EC2] EC2 인스턴스 생성 - Ubuntu

EC2(Elastic Compute Cloud) Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어..

kanoos-stu.tistory.com

 

(선택) https://kanoos-stu.tistory.com/52

 

SSH 간편하게 접속하기 (with EC2)

문제 EC2를 사용하게 된다면 SSH접속을 자주 하게 될것이다. 그런데 여기서 SSH명령어의 길이가 길어 외우는건 불가능하여 매번 복붙 또는 history에서 가져와야하는데, 이 일도 어떤 경우에선 번거

kanoos-stu.tistory.com


RDS 인스턴스 생성

Spring boot에서 연결할 DB 생성

* rds의 프리티어는 마리아DB, Mysql 에서만 사용가능함

 데이터베이스 생성 화면에서 중요한 입력 내용

  • DB 인스턴스 식별자 - 고유한 인스턴스 이름
  • 마스터 사용자 이름 - DB접근 시 사용되는 마스터 유저 이름
  • 마스터 암호 - DB접근 시 사용되는 마스터 유저 암호

 

  • 스토리지 유형 
    • 범용 SSD - 스토리지 크기에 따라 IOPS(초당 입출력 성능)이 정해진다. 가성비가 좋으므로 많이 사용
    • 프러비저닝된 IOPS SSD - IOPS와 SSD를 각각 할당할 수 있다. 최소 3000IOPS 이며 성능은 좋지만 가격이 비싸다.
    • 마그네틱 - 권장되지 않음.
  • 할당된 스토리지 - DB에 할당될 용량, 1GiB당 3IOPS가 제공되며 최대 3000IOPS까지 할당가능. (용량이 클 수록 성능이 좋아짐)
  • 스토리지 자동 조정 활성화 - 체크 시 할당된 스토리지 용량이 가득 찰 경우 최대 스토리지 임계값까지 오토스케일링된다.

 

  • 다중 AZ 배포 - 복제본 인스턴스를 생성해 주 인스턴스가 장애가 발생하면 자동으로 복제본을 통해 장애 조치, 비용이 약 2배가 된다.

 

  • 퍼블릭 액세스 - '예' 선택 시 VPC 외부에서도 해당 RDS에 접근이 가능, 같은 VPC의 EC2에서만 접근할 경우 '아니오' 선택

EC2 보안 설정

클라이언트에서 REST API 요청을 보낼 EC2 포트 개방 설정 진행

 

생성된 ec2 인스턴스의 보안 탭

보안 그룹 클릭

 

보안 그룹의 인바운드 규칙

인바운드 규칙 편집 클릭

 

인바운드 규칙 편집 화면

우측 하단의 규칙 추가

  • 포트 범위 - 규칙을 설정할 포트 번호, Spring Boot의 서버 포트 번호 입력
  • 소스 - 접근을 허용할 ip입력, Anywhere-IPv4 선택 시 모든 ip 접근 허용

 

RDS 보안 설정

EC2에서 postgres에 연결할 RDS의 5432 포트 개방 설정 진행

생성한 DB 선택 화면

생성된 DB 인스턴스 화면에서 VPC보안 그룹 클릭

RDS 인스턴스의 인바운드 규칙 탭

인바운드 규칙 편집 클릭

인바운드 규칙 수정 화면

  • 유형 - 자신이 생성한 DB의 기본 포트 또는 사용자 지정 TCP 선택하여 포트 범위 직접 입력
  • 소스 - 사용자 지정 후 EC2의 보안 그룹 지정

EC2 인스턴스의 보안 탭의 보안 그룹 몇


EC2에 ssh 접속하여 Java,postgres 설치

Spring Boot Jar 파일을 실행시키기 위해 Java, Spring Boot에서 DB 연결을 위해 postgres 설치 진행

ec2에 ssh 접속

$ ssh -i [pem파일경로] [ec2-user계정명]@[ec2 instance의 public IP 또는 public DNS]

 

자바 설치

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get install openjdk-11-jdk

 

자바 설치 확인

# 자바 설치 확인
$ java -version
openjdk 11.0.14 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

# 자바 컴파일러 설치 확인
$ javac -version
javac 11.0.14

 

postgres 설치

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update
sudo apt-get -y install postgresql

https://www.postgresql.org/download/linux/ubuntu/

 

PostgreSQL: Linux downloads (Ubuntu)

Linux downloads (Ubuntu) PostgreSQL is available in all Ubuntu versions by default. However, Ubuntu "snapshots" a specific version of PostgreSQL that is then supported throughout the lifetime of that Ubuntu version. Other versions of PostgreSQL are availab

www.postgresql.org

 

postgres 설치 확인

$ psql --version

psql (PostgreSQL) 14.2 (Ubuntu 14.2-1.pgdg20.04+1)

EC2에서 RDS 접속하여 DB 생성

EC2에서 RDS접속하여Spring boot에서 연결할 DB 생성

 

$ sudo -i -u postgres

 

EC2 에서 postgres 계정으로 변경 

postgres$ psql \
   --host=<DB instance endpoint> \
   --port=<port> \
   --username=<master username> \
   --password

 

postgres 계정에서 RDS Postgres 접속

postgres=> create database <database name>;

 


Spring Boot DB연결 설정 및 빌드 및 Jar파일 생성

Spring Boot에서 연결할 DB 엔드포인트 및 유저 정보, 비밀번호 설정 및 배포할 Jar파일 생성 진행

#application.yml

spring:
	datasource:
      url: jdbc:postgresql://<RDS Endpoint>/<database name>
      username: <master user name>
      password: <master user password>
      driver-class-name: org.postgresql.Driver

 

배포할 Spring 프로젝트 appllication.yml 파일에 연결할 DB 정보 입력

 

# 해당 spring 프로젝트 폴더
$ ./gradlew clean build --exclude-task test

 

빌드 및 Jar파일 생성

 

/build/libs 폴더에 jar 파일 생성 확인


EC2에 scp 명령어로 Jar파일 전송 및 실행

$ scp -i [pem파일경로] [jar 파일 경로] ubuntu@[ec2 instance의 public DNS]:~/[파일 받을 EC2 경로]

로컬에서 해당 명령어로 EC2에 jar파일 전송

EC2 인스턴스에 jar파일이 전송되었는지 확인

jar파일이 잘 전송되었는지 확인

 

$ java -jar <jar파일.jar>

 

서버 구동


postman으로 연결 상태 확인

요청은 EC2의 Public IP 주로와 SpringBoot에 기존에 작성한 /health_check GET 요청을 보냈고

정상적으로 응답 코드 200과 문자열이 잘 도착하였다.

반응형