지금까지는 배포 환경을 구성하였는데 이제 이들을 조합해 실제 서비스를 배포할 것이다.
+먼저 프로젝트가 깃허브에 올라가 있어야 한다. 그래야 CI/CD가 가능하다.
깃허브에서 코드를 받아올 수 있도록 EC2에 깃 설치
sudo yum install git
설치 완료 되었는지 확인
git --version
설치 되었으면 git clone으로 프로젝트를 저장할 디렉토리 생성
mkdir ~/app && mkdir ~/app/step1
생성된 디렉토리로 이동
cd ~/app/step1
git clone 프로젝트 깃허브 주소
git clon이 끝났으면 클론된 프로젝트로 이동해서 파일들이 잘 복사되었는지 확인
cd 프로젝트 명
ll
코드들이 잘 수행되는지 테스트로 검증
./gradlew test
권한 거부 뜨면 chmod +x ./gradlew
+만약 실패하였을 경우 책 298p 참고하기
배포란 작성한 코드를 실제 서버에 반영하는 것을 말한다. 해당 책에서는 다음의 것들이 포함된다.
vim ~/app/step1/deploy.sh
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=[프로젝트 이름]
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> 프로젝트 Build 시작"
./gradlew build
echo "> step1 디렉토리로 이동"
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"
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
+nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어
nohup 상세설명
+"2>&1" 은 표준 에러를 표준 출력과 같게 만드는 명령어
+kill -15 : 정상종료
+kill -9 : 강제 종료
+$(명령어 or 쉘 스크립트 실행 or 쉘 스크립트 함수) : 리턴 결과를 얻고 싶을 때 사용
chmod +x ./deploy.sh
./deploy.sh
진행할 작업은 다음과 같다.
1)RDS 테이블 생성
JPA가 사용될 엔티티 테이블과 스프링 세션이 사용될 테이블 2가지 종류를 생성한다.
음... JPA가 알아서 테이블 생성해준댔는데..?
스프링 세션 테이블은 schema-mysql.sql
파일에서 확인할 수 있다. 이것을 복사해서 RDS에 붙여넣으래
스프링 세션 테이블은 좀 더 찾아보자. 뭔지 모르겟넹
2) 프로젝트 설정
JPA의 ddl-auto옵션이 지원하는 속성값은 아래와 같다.
none - 실행하지 않음
create-drop - 어플리데케이션이 구동되고 Session이 시작될때 drop -> create가 실행되고, Session이 종료될 때 (어플리케이션 종료) drop
create - 어플리케이션이 구동되고 Session이 시작될떄 drop -> create 가 실행
update - 스키마가 변경된 경우에만 실행
validate - 변경여부 확인 후 출력, 애플리케이션은 종료
JPA를 사용하는 개발환경에서는 보통 최초 배포시에는 ddl-auto속성을 create, create-drop중 하나를 사용한다.
운영할 때는 none으로 해야함
깃허브에 push를 하면 자동으로 Test & Build & Depoly가 진행되도록 개선해보자