앞서 우리는 ec2 인스턴스를 만들어 보고 ssh를 이용하여 서버에 접근하는 방법까지 익혔습니다.

이번 포스트에서는 프로젝트를 해당 서버를 통해서 배포하는 과정을 알아보겠습니다.

해당 과정은 CI/CD가 아님을 미리 알려드립니다.

 

 

1️⃣설정

먼저 우리가 생성했던 서버에서 먼저 설정해야 될 사항들을 설정하겠습니다.

 

-자바11 설치

 

스프링 프로젝트를 띄우기 위해서 우리는 자바11을 설치 하겠습니다. 

 

설치하기 앞서 yum list java*  로 java 설치 가능 리스트 검색을 해줍니다.

java-11-amazon-corretto.x86_64 가 ec2에서 설치할 수 있는 java11 jdk임을 확인할수 있습니다.

* Amazon Corretto 란 무료로 사용할 수 있는 Open Java Development Kit (OpenJDK) 의 프로덕션용 멀티플랫폼 배포판입니다.

 

sudo yum install java-11-amazon-corretto.x86_64 로 설치를 해줍니다. 자바를 설치해줍니다.

 

java -version을 통해서 정상적으로 설치 되었는지 확인해주세요

 

 

 

-타임존 변경

 

date 명령을 치면 현재 한국 시간과 동떨어져있음을 확인할수 있습니다.

sudo rm /etc/localtime

sudo ln -s /usr /share/zoneinfo/Asia/Seoul /etc/localtime

두명령어를 통해서 기존의 시간을 지우고 한국 시간으로 변경해줍니다.

date 명령으로 잘 변경 되어있음을 확인할 수 있습니다.

 

-Hostname 변경

 

ip만으로 어떤 서비스의 서버인지 확인하기 위해서 Hostname을 변경하겠습니다.

sudo vi /etc/hostname 입력 후 원하는 hostname으로 수정해줍니다.

cat /etc/hostname 입력하면 변경한 hostname이 변경된 것을 확인할 수 있습니다.

hostname 명령어를 통해 현재 설정된 hostname을 확인합니다.

hostnamectl set-hostname <변경할 hostname>을 통하여 hostname을 변경해 줍니다.

 

putty를 종료하고 시작하면 hostname이 잘 변경된 것을 확인할수 있습니다.

 

 

2️⃣배포

 

-ec2에 프로젝트 Clone받기

 

먼저 배포하기 전에 프로젝트를 깃을 통해 clone해줍니다.

그렇기 위해서 sudo yum install git 을 통해서 git 을 설치합니다.

 

mkdir ~/app && mkdir ~/app/webservice를 이용하여 git clone으로 프로젝트를 저장할 디렉토리를 만듭니다.

cd ~/app/webservice/ 를 통해서 생성 디렉토리로 이동합니다.

 

git clone <깃허브 repository https 주소> 를 입력하여 프로젝트를 clone해주세요.

 

 

cd 프로젝트명

ll

해당 명령어 들로 잘 복사되었는지 확인합니다.

 

 

 

./gradlew test 로 빌드 테스트를 해줍니다. permission denied가 뜰수 있는데 그럴땐 

chmod + x ./gradlew 을 이용해서 실행 권한을 주고 다시 해보세요.

빌드 테스트 성공

 

 

 

 

-배포 스크립트 만들기

 

매번 배포할 때마다 개발자가 하나하나 이런 명령어를 통해 배포를 진행하는 것은 큰 불편함을 야기합니다.

따라서 쉘 스크립트를 통해서 스크립트만 실행하여 앞의 과정들을 진행해보겠습니다.

 

vim ~/app/webservice/deploy.sh 로 배포를 위한 쉘 스크립트를 먼저 만들어보겠습니다.

#!/bin/bash

REPOSITORY=/home/ec2-user/app/webservice
PROJECT_NAME=dockertest

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git Pull"

git pull

echo "> 프로젝트 build 시작"

./gradlew build

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

cd $REPOSITORY

echo "> build파일 복사"

cp $REPOSITORY/$PROJECT_NAME//build/libs/*.jar $REPOSITORY/

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

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

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

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

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

JAR_NAME=$(ls -tr $REPOSITORY/ | grep '.*[.]jar' | grep -v plain  | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

 

 

 

 

이제 생성한 스크립트에 실행 권한을 추가합니다.

chmod +x ./deploy.sh

 

 

 

./deploy.sh 로 스크립트를 실행해주세요.

vim nohup.out 을 사용해서 nohup.out파일을 열어서 로그를 확인해 봅니다.

nohup.out은 실행되는 애플리케이션에서 출력되는 모든 내용을 가지고 있습니다.

 

인스턴스의 퍼블릭 IPv4 DNS로 외부에서 접속하여 성공적으로 배포됨을 확인하였습니다. 

👀참조

해당 포스팅은 이동욱님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 서적을 인용하였습니다.
스프링 부트와 AWS로 혼자 구현하는 웹 서비스

+ Recent posts