본문 바로가기

백앤드 개발/Spring boot 기반 롤 전적 사이트 개발

[Spring 프로젝트] 스프링부트 jar 배포 (EC2, RDS, 고정 IP, FileZila)

배포 환경

  • 프로젝트: Java 17, Spring boot 3.16
  • AWS EC2 (Amazon linux) , RDS (MYSQL)
  • 고정 IP 사용 (과금 요소)
  • CI/CD 인프라 구축이 아닌 단순 EC2 배포
  • putty 를 통한 원격 서버 접속
  • Git 방식이 아닌 FileZila를 통한 파일 전송

 

1. EC2 생성

1.1. 인스턴스 생성

  • AMI: Amazon Linux
  • 인스턴스 유형: t2.micro (프리티어)

1.2 인바운드 규칙 설정

외부에서 EC2 로 접근할 때 사용되는 방화벽 규칙 설정

 유형  프로토콜  포트범위  소스
 사용자 지정 TCP  TCP  8080  0.0.0.0/0 
 Anywhere-IPv4
 SSH  TCP  22  내 IP
 HTTP  TCP  80  0.0.0.0/0 
 Anywhere-IPv4
 HTTPS  TCP  443  0.0.0.0/0 
 Anywhere-IPv4

 

순서대로

  • 스프링 부트 기반 서버 8080 포트로 배포할 것이므로 누구나 접속할 수 있도록 설정
  • 데이터 전송 및 원격 제어에 사용되는 SSH 프로토콜. 보안을 위해 내 IP 에서만 접근할 수 있도록 설정
  • HTTP, HTTPS 의 경우 누구나 접속할 수 있도록 설정

 

2. 고정 IP 적용

EC2 의 경우 인스턴스가 재실행 될 떄마다 IP 가 변경

고정 IP 가 필요하다면 탄력적 IP 사용을 권장

단 과금 요소 이기 때문에 필요한 만큼만 생성하는 것을 권장 (대략 한달에 3천원)

 

2.1. 탄력적 IP 할당

콘솔에서 탄력적 IP 클릭 후 탄력적 IP 주소 할당 클릭

 

2.2 인스턴스 선택 및 연결

탄력적 IP 선택 후 작업 - 탄력적 IP 주소 연결 - 인스턴스 선택 후 연결

 

3. RDS 설정

3.1. RDS 데이터베이스 생성

  • 엔진 유형: MYSQL
  • 템플릿: 프리티어
  • 설정: 식별자, 사용자 이름, 암호 등을 적절히 설정
  • 스토리지 자동 조절: 스토리지 자동 조정 비활성화 (DB 스토리지 동적 지원, 과금요소)
  • 컴퓨팅 리소스: EC2 컴퓨팅 리소스에 연결 안함 (EC2 - RDS 분리)
  • 퍼블릭 엑세스: 예 (아니오시, 설정된 보안 그룹 외 외부에서  접근 불가, MYSQL 워크브렌치에서 접근 불가)
  • 데이터베이스 인증 옵션: 암호 인증 
  • 초기 데이터 베이스 이름: DB명 기입
  • 백업: 자동 백업 해제 및 스냅샷 생성 방지 (과금 요소)

3.2. 인바운드 규칙 설정

 유형  프로토콜  포트범위  소스
 MYSQL/Aurora  TCP  3306  내 IP
 MYSQL/Aurora  TCP  3306  EC2 prIvate IP

 

순서대로

  • 로컬 MYSQL 워크브렌치에서 접근할 수 있도록 설정
  • 추후 배포할 EC2 에서 DB에 접근할 수 있도록 설정

3.3. 스프링 부트 RDS 관련 설정

## application.properties

## AWS-RDS(MYSQL) 관련 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://엔드포인트:3306/demo?serverTimezone=UTC&useSSL=false
spring.datasource.username= DB 생성시 설정한 사용자 이름
spring.datasource.password= DB 생성시 설정한 마스터 암호

 

4. JAR 파일 배포 (by FileZila)

4.1. JAR 파일 생성

오른쪽 상단 gradle(코끼리) 버튼 - build 버튼 클릭 - clean, bootjar 차례로 클릭

clean: 빌드 과정에서 생성된 파일 제거, 초기화

bootjar: Spring Boot 애플리케이션을 실행 가능한 JAR 파일 생성

 

4.2. FileZila 설치 및 원격 서버 파일 전송

FileZila 설치 후 원격 서버로 jar 파일 복사

자세한 과정은 다음 링크를 참고

https://app-developer.tistory.com/entry/AWS-EC2-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-FileZilla-FTP-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0

 

AWS EC2 인스턴스 FileZilla (FTP 클라이언트) 연결하기

이번에는 AWS EC2 인스턴스 FileZilla 연결하는 방법에 대해서 설명하도록 하겠습니다. FileZilla란? FileZilla 는 FileZilla Client 및 FileZilla Server로 구성된 무료 소프트웨어 , 교차 플랫폼 FTP 응용 프로그램

app-developer.tistory.com

 

4.3. 원격 서버 배포

$ sudo yum update # 패키지 업데이트

$ sudo yum install java-17-amazon-corretto # amazon linux java 17 설치
$ java -version # java 버전 확인

$ sudo yum install java # java cli 다운
$ java -jar [.jar 파일명] # jar 파일 실행
  • putty 등을 활용해 원격 서버에 접속 후 프로젝트를 실행
  • Amazon linux 기준의 명령어이며 운영체제에 따라 다를 수 있음

 

4.4 원격 서버 백그라운드 배포 (ubuntu) - 2024.01.19 업데이트

$ sudo apt update # 패키지 업데이트
$ sudo apt install openjdk-17-jdk # java 17 설치

$ nohup java -jar [.jar 파일명] # jar 파일 백그라운드 실행

$ pgrep java # 프로세스 pid 출력
$ pgrep kill -15 [PID] # 해당 프로세스 종료
  • Amazon linux 가 아닌 ubuntu 명령어

 

5. 마주한 오류

5.1. Could not find mysql:mysql-connector-java

//build.gradle

// MYSQL 8.0.31 이전 설정
// runtimeOnly 'mysql:mysql-connector-java'

// MYSQL 8.0.31 이후 설정
runtimeOnly 'com.mysql:mysql-connector-j'

MYSQL 8.0.31 버전부터 build.grade 변경

참조: https://velog.io/@yiseull/Could-not-find-mysqlmysql-connector-java-%ED%95%B4%EA%B2%B0

 

5.2. Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago.

  • jdbc로 MySQL DB와 연결과정에서 발생
  • RDS 인바운드 규칙 확인

참조: https://breakcoding.tistory.com/392

 

5.3. template might not exist or might not be accessible by any of the configured Template Resolvers

## application.properties

# 변경 전
#spring.thymeleaf.prefix=file:src/main/resources/templates/

# 변경 후
spring.thymeleaf.prefix=classpath:/templates/

템플릿 경로 접두사 변경으로 템플릿 찾지 못하는 문제 해결

참조: https://okky.kr/questions/1344991

 

6. 참조

https://lucas-owner.tistory.com/44

 

[AWS] EC2 생성 - Spring Boot 배포(1)

목표 AWS EC2 인스턴스 생성 후 EC2 내부에서 Spring Boot 서버를 실행 하는것이 최종 목표입니다. CI/CD 인프라 시스템을 구축하는것이 아닙니다. (단순 EC2 단일 배포) - 배포시 유의할 부분 고정 IP 주소

lucas-owner.tistory.com

https://lucas-owner.tistory.com/45

 

[AWS] RDS 생성 - (EC2 연결, SpringBoot 배포)(2)

목표 - 지난번에 배포했던 AWS EC2와 RDS 생성/연결 하는것을 진행 해보자. DB는 MySQL 5.7.34 버전을 사용할 예정이다. 마찬가지로 프리티어(무료)를 사용할 예정이고, EC2 연결 및 Local 에서 연결 Test 까

lucas-owner.tistory.com

 

https://velog.io/@jonghyun3668/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-EC2-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

 

SpringBoot 프로젝트 EC2 배포하기

깃헙에 있는 프로젝트를 AWS EC2에 git clone을 통해 내려받아 jar 파일 빌드를 해보겠습니다.(EC2 인스턴스는 우분투로 진행합니다. 또한 따로 배포 시스템을 구축하지 않고 수동으로 배포하는것만

velog.io

4-03 서버 접속 설정 - 점프 투 스프링부트 (wikidocs.net)

 

4-03 서버 접속 설정

AWS 서버에 접속하기 위해서는 고정IP와 방화벽 해제가 필요하다. 이번장에서는 고정IP를 생성하는 방법과 방화벽을 해제하는 방법에 대해서 알아보자. [TOC] ## 고정 …

wikidocs.net

https://velog.io/@u-nij/Spring-Boot-AWS-RDS-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

Spring Boot + AWS RDS (MySQL) 연동하기

Spring Boot + AWS RDS를 연동하고, 시간 및 언어 설정을 하는 과정입니다.

velog.io