본문 바로가기

Spring

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

스프링 부트를 사용한 예제 애플리케이션을 AWS를 통해 모노리식에서 MSA로 MSA에서 다시 컨테이너 오케스트레이션으로 개선해나가는 과정을 모두 담은 강의를 출시하게 되었습니다.
강의 과정에서 15개 이상의 서비스를 사용하게 됩니다.
그래서 클라우드 개발자가 아닌 개발자, 학생 분들도 AWS의 폭넓은 지식 쉽고 빠르게 습득할 수 있는 기회가 될 수 있다고 생각합니다!
배너를 누르면 강의로 이동됩니다.

블로그를 통해 구매하시는 분들에게만 10%할인 쿠폰을 증정중입니다.
꼭 아래 쿠폰번호를 입력해 주세요!

16861-259843d6c2d7


 

시작전 참고 사항

  • 기본적으로 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과 문자열이 잘 도착하였다.