코딩하는 문과생
[Spring boot] 프로젝트 AWS에 올리기(step1) 본문
※ 해당 글은 튜토리얼이 아닌 헷갈리거나 중요한 개념 위주로 정리한 글입니다.
[EC2 설정]
코드는 모두 생략, 흐름만 간단히 알아보자.
1. git설치
* ~/app/step1 내 내 github에 등록된 git프로젝트 경로를 이용해 clone하고 git pull 진행
2. 다운받은 프로젝트 테스트 진행
* 프로젝트에 들어와 gradlew test 명령어 실행, 그리고 테스트 성공 확인
* gradle wrapper을 줄여서 gradlew라고 사용한다. 새로운 환경에서 프로젝트를 설정할 때 java나 gradle을 설치하지 않고 바로 빌드할 수 있게 해주는 역할을 한다.
* gradlew test, gradlew build 명령어를 통해 테스트 및 빌드를 한다.
3. 배포스크립트 작성
* ~/app/step1 폴더 내 deploy.sh로 스크립트 작성
* 배포스크립트 역할: github내 프로젝트 동기화, gradle을 통한 테스트 및 빌드, ec2서버 재기동 등
* 스프링부트는 내장 톰캣을 사용해 jar파일만 있으면 바로 웹 애플리케이션 서버 실행이 가능하다.
* 스크립트 흐름(아래 코드 참조):
- git pull
- 빌드
- 빌드파일(jar) 복사해 배포폴더로 이동
- 구동되는 jar 프로세스 있다면 kill
- 복사한 빌드파일 중 최신버전 자바로 실행
* 스크립트 구문:
- if 구문 내 -z 옵션은 null값인지 판단
- nohup: 터미널이 끊겨도 데몬형식으로 프로세스가 계속 실행된다.
4. gitignore에 등록된 파일, 수기 작성
* gitignore에 저장된 보안(소셜로그인 or DB계정정보 등)파일 부재로 nohup.out 로그파일에 에러 출력
* ~/app 폴더 내 application-oauth.properties을 스크립트로 작성한다.
* application-oauth.properties 실행을 위해 경로를 배포스크립트에 추가한다.
5. RDS 접근 설정
테이블 생성: 내장was실행 시 출력되는 로그와, schema-mysql.sql파일을 이용해 테이블을 생성
* 프로젝트 설정: 운영 환경에 반영되는 설정파일 생성(application-real.properties: oauth와 real-db를 포함하고 운영시 활성화 시킨다.) 그리고 git push.
* EC2 설정: vim을 이용해 application-real-db.properties에 db와 관련된 환경설정을 작성하고 ~/app폴더 아래 저장한다.
그리고 해당 파일을 배포스크립트에 추가해 스크립트 작동 시 반영되도록 한다.
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"
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 -Dspring.config.location=classpath:/application.properties, /home/ec2-user/app/application-oauth.properties, /home/ec2-user/app/application-real-db.properties -Dspring.profiles.active=real $REPOSITORY/$JAR_NAME 2>&1 &
=> 즉, application-oauth.properties와 application-real-db.properties경로를 스크립트 파일에 넣어주고, -Dspring.profiles.active=real(= application-real.properties)을 이용해 두 스크립트를 운영에 반영한다.
6. 8080포트 추가 후, 웹페이지 접속
* 보안그룹에 8080포트가 정상적으로 저장되었는지 확인하고, 퍼블릭DNS:8080을 이용해 ec2에 올라간 프로젝트를 확인한다.
7. 구글과 네이버로그인 수정
* 구글과 네이버로그인 시 서비스url과 콜백페이지에 퍼블릭DNS를 등록해준다.
8. 수동 빌드와 배포
* 깃헙으로 push후 deploy.sh를 수동으로 실행시켜 빌드와 배포를 진행한다
그러나 매번 수동으로 빌드 및 배포를 할 수 없다. 이를 해결하기 위한 방법이 CI/CD이다.
- 추가사항
+ 코드작성 시 오타를 내지말자... 개발에서는 잘되던 데이터 저장이 배포후 db에 저장이 안되기 시작했다. ??? 머선120... 다시 천천히 뜯어보니 applcation-real-db.propeties에 r이 빠져있어 DB연결하는 환경설정이 적용되지 않았던 것이다. 재빌드하니 정상작동 확인. 오타를 내지말자. 오타를 내지말자. 오타를 내지말자
※ 해당 글은 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저)"를 참고해 작성하였습니다.
'웹 프로그래밍 > Spring Boot' 카테고리의 다른 글
[Spring Boot] CI/CD - CD(지속적 배포)(step3) (0) | 2020.12.13 |
---|---|
[Spring boot] CI/CD - CI(지속적통합)(step2) (0) | 2020.12.12 |
[Spring Boot] AWS 아키텍처(+ HotSpot으로 연결 시 여러 이슈들) (0) | 2020.12.06 |
[Spring Boot] Spring Security (0) | 2020.12.06 |
[Spring Boot] Mustache, 화면 구성 (0) | 2020.12.06 |