와 드디어 며칠을 계속 시도한 끝에 드디어 EC2에 jar 파일을 수동 배포하였다!!!!!
작성한 API도 잘 돌아가는 것을 확인하고 나니, 서버 관련 첫 걸음을 내딛은 것 같아서 벅찼다.
사실 시험기간이었지만 EC2 배포를 무조건 하고 싶어서 붙들고 있었는데, 보람이 있었다.
잊어버리기 전에 그 과정을 후다닥 기록하고자 한다.
Spring boot 파일을 EC2 인스턴스에 배포하는 방법
Spring boot 프로젝트를 통해 API를 짜고 나면, 이를 항시 구동중인 서버 위에 배포해야 누구든 접근해서 해당 기능을 사용할 수 있다. 즉 내가 짠 API를 세상에 내놓기 위해서는 배포가 필요한 것이다.
이를 위해서는 프로젝트 파일을 빌드한 후, 그 결과로 생긴 jar 파일을 서버에서 java -jar 명령어로 RUN 해줘야 한다.
배포하는 방법에는 아래 두 가지가 있으며, 지금은 1번째 방법으로 배포를 진행해봤다.
(두번째 방법으로도 해봤는데, build할 때 너무 시간이 오래 걸리면서 진행이 계속 멈춰있는 문제가 있어서 나중에 다시 시도해봐야 겠다)
Method 1 | Method 2 | |
Local | 로컬에서 build해서 jar 파일 생성 | 로컬에서 github repository에 프로젝트를 올리기 |
EC2 | 인스턴스에 그대로 복붙 → RUN | 인스턴스에서 clone → build해서 jar 파일 생성 → RUN |
1 EC2 인스턴스 생성
(1) 인스턴스 생성
(2) 보안 그룹 설정
2 EC2 인스턴스 환경 설정
서버도 하나의 client이다!
따라서 서버에서 어떠한 빌드 파일을 실행하려면, 해당 파일을 실행하기 위한 환경을 로컬에서처럼 설정해줘야 한다.
내가 실행하려는 프로젝트는 spring boot & MySQL을 이용하기 때문에, jdk와 mysql을 EC2에 설치해줘야 한다.
1. jdk 설치
나는 sdk 11을 이용하는 프로젝트를 실행할 것이므로, jdk 11을 설치했다.
완료 후, java -version 했을 때 설치한 버전이 잘 나오면 성공!
$ apt-get update
$ apt-get install openjdk-11-jdk
2. MySQL 설치
완료 후, mysql --version 했을 때 버전이 잘 나오면 성공!
$ apt-get update $ apt-get install mysql-server
3. MySQL 환경 설정
(1) MySQL 접속
$ mysql -u root -p
$ (비밀번호 입력)
(2) 사용자 생성
- 모든 ip에서 접속 가능한 범용 사용자 만들기
$ create user '사용자명'@'%' identified by '비밀번호' ;
$ create user 'admin'@'%' identified my 'test1234';
- 일반적인 사용자 만들기
$ create user '사용자명'@'ip주소' identified by '비밀번호' ;
(3) 사용자에게 권한 부여
$ grant all privileges on db명.table명 to '사용자명'@'%' ;
(4) 사용자 목록 확인
사용자 목록은 'mysql' 이름의 database의 'user' 이름의 테이블안에 저장되어 있다.
$ select user, host from mysql.user ;
(5) 모든 외부 ip에서 해당 mysql에 접속 허용하기
이 과정은 mysql> 에서 나와서 ubuntu에서 진행한다. (설정 파일을 변경해야 하므로 sudo su 이후 진행)
3 dataSource 설정
application.yml 파일에서 데이터베이스 관련 설정을 해준다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{database endpoint}:3306/{database name}?zeroDateTimeBehavior=convertToNull & useLegacyDatetimeCode=false
username: {username}
password: {password}
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
hibernate:
ddl-auto: update
defer-datasource-initialization: true
4 로컬에서 빌드하기
1. spring boot 프로젝트에서 gradlew 파일이 있는 위치까지 이동
터미널 상에서 이동하면 된다
2. build
빌드가 완료되고 나면, build 폴더 아래에 libs/myproject-0.0.1-SNAPSHOT.jar 파일이 생성된다.
./gradlew build -x test
※ 이미 한 번 이상 build 했던 경우 : ./gradlew clean build
※ textApplication은 빌드에서 제외하기 : -x test
3. 로컬의 jar 파일을 EC2로 복붙
$ scp ./build/libs/myproject-0.0.1-SNAPSHOT.jar {호스트명}:/home/ubuntu
※ 호스트명 : ubuntu@{퍼블릭 ip} or 간소화된 호스트명 (.ssh에 등록해놓은 경우)
5 EC2에서 jar 파일 실행하기
1. 그냥 실행
$ java -jar myproject-0.0.1-SNAPSHOT.jar
2. 무중단 실행
$ nohup java -jar myproject-0.0.1-SNAPSHOT.jar &
3. 배포 결과 확인
http://{Elastic IP}/{port번호} 로 접속해보면 서버가 잘 돌아가는지 확인 가능!
ex ) http://123.45.6.78/3001
'Cloud | CICD > Deploy' 카테고리의 다른 글
[Cors] Cors 에러 삽질 기록 (0) | 2023.03.07 |
---|---|
[Deploy] 배포된 EC2에서 Google Login이 안되는 문제 해결 (0) | 2023.03.02 |
[Deploy] EC2에서 Redis 사용하기 (0) | 2023.03.02 |
[Deploy] Github Actions + Docker + EC2 자동 배포 #2 | Docker 설정 (0) | 2023.02.28 |
[Deploy] Github Actions + Docker + EC2 자동 배포 #1 | EC2 설정 (0) | 2023.02.16 |