개발 공부 기록/03. AWS

AWS EC2 서버에 프로젝트를 배포해보자.

박세류 2023. 11. 26. 15:54
EC2서버에 git에서 clone해온 프로젝트 파일이 잘 되어있음을 확인한 후 시작한다.

 

gradlew 파일은 그레이들이 설치되지 않는 환경이라도 그레이들을 쓸 수 있도록 지원해 주는 Wrapper 파일이다.

 

1. 배포 스크립트 만들기

작성한 코드를 실제 서버에 반영하는 것을 배포라고 한다.

 

배포과정을 하나하나 하는건 불편하다. 그러므로 쉘 스크립트로 작성해 실행하면 자동으로 진행되게끔 구성해 보겠다.

 

vim ~/deploy.sh


#! /bin/bash

REPOSITORY=/home/ec2-user/app/step1 
// 쉘에서는 $ 변수명으로 변수를 사용할 수 있다. 변수로 지정한것임.

PROJECT_NAME= fr-springboot

cd $REPOSITORY/$PROJECT_NAME/
// 프로젝트 파일로 이동 

echo "> Git Pull"
// pull로 최신 내용 가져옴

git pull

echo "> 프로젝트 Build 시작"

./gradlew build
// gradlew로 build 수행함

echo "> step1 디렉토리로 이동"

cd $REPOSITORY

echo "> Build 파일 복사"

cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY
// build 결과물인 jar 파일을 복사해 jar파일을 모아둔 위치로 붙여넣기함.


echo "> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
// 기존에 수행중인 스프링 부트 애플리케이션 종료 하기 위해 찾음

echo "현재 구동 중인 애플리케이션pid: $CURRENT_PID"

if [ -z "$CURRNET_PID" ]; then
		echo " > 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
	echo "> kill -15 $CURRENT_PID"
	kill -15 $CURRENT_PID
	sleep 5
fi

echo "> 새 애플리케이션 배포"

JAR_NAME=$(ls -tr $REPOSITORY/ |grep jar | tail -n 1)
// 새로 실행할 jar 파일명을 찾음, tail로 제일 최신꺼 찾는다.

echo "> JAR Name: $JAR_NAME"


nohup java -jar \
		-Dspring.config.loaction=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \
        $REPOSITORY/$JAR_NAME 2>&1 &
// nohup으로 jar파일 실행한다.

 

이후 ./deploy.sh로 쉘스크립트를 실행시켜준다.

 

cat  nohup.out

 

이처럼 잘 실행 되었다면 오케이!

 

2. RDS에도 접근해보자

1. build.gradle에 의존성 추가

compile('org.mariadb.jdbc:mariadb-java-client')

 

 

Caused by: java.sql.SQLException: Unknown database 'aws-springboot2-webservice-rds'

만약 이런 에러가 난다면?

db이름이 틀렸을 확률이 매우 높다..

properties 파일에 spring.datasource.url 의 부분 database 이름을 aws_springboot2_webservice 와 같이 언더바로 바꿔주면 해결될 가능성이 높다.. (엄청난 삽질 끝에 알아낸 사실)

728x90