배포 환경
- 프로젝트: 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 파일 복사
자세한 과정은 다음 링크를 참고
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
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
'백앤드 개발 > Spring boot 기반 롤 전적 사이트 개발' 카테고리의 다른 글
[Spring 프로젝트] 전적검색 구현 (1) | 2024.01.08 |
---|---|
[Spring 프로젝트] 라이엇 API 분석 (1) | 2024.01.08 |
[Spring 프로젝트] 프로젝트 설계 3일차 기능 명세서 (2) | 2023.12.06 |
[Spring 프로젝트] 프로젝트 설계 2일차 테이블 설계 (0) | 2023.11.16 |
[Spring 프로젝트] 프로젝트 설계 1일차 (0) | 2023.11.10 |