diff --git a/README.md b/README.md index 5e888fb..41f4391 100644 --- a/README.md +++ b/README.md @@ -1857,7 +1857,7 @@ AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있 굉장히 번거로우므로 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야한다. 그래서 고정IP를 할당할 것이다. - + **👿 주의** 탄력적 IP는 생성하고 EC2 서버에 연결하지 않으면 비용이 발생한다. @@ -1922,4 +1922,206 @@ Amazon AUrora 교체 용이하다. #### ✏ RDS 인스턴스 생성 1. MariaDB 로 생성 -2. 파라미터 그룹 생성 \ No newline at end of file +2. 파라미터 그룹 생성 + + + + + + + + + + + +


+ + + +## 📌 feature-21 : 배포 + +### 📝 EC2에 프로젝트 clone + +sudo yum install git + +git --version + +mkdir ~/app && mkdir ~/app/step1 + +cd ~/app/step1 + +git clone 깃허브 http 주소 + +cd aoneemall + +ll + +./gradlew test # 코드 잘 수행되는지 검증 + +git pull #권한이 없다면 ? chmod +x ./gradlew + + + + + +
+ + + +### 📝 배포 스크립트 작성 + +#### ✏ 배포란 ? + +작성한 코드를 실제 서버에 반영하는 것 + +해당 프로젝트에서 배포는 아래의 과정을 모두 포괄하는 의미이다. + +* git clone 혹은 git pull을 통해 새 버전의 프로젝트를 받음 +* Gradle 이나 Maven을 통해 프로젝트 테스트와 빌드 +* EC2 서버에서 해당 프로젝트 실행 및 재실행 + + + +#### ✏ 쉘 스크립트 작성 + +deploy.sh 파일 생성 + + + +``` + +#! /bin/bash + +REPOSITORY=/home/ec2-user/app/step1 +PROJECT_NAME=aoneemall + +cd $REPOSITORY/$PROJECT_NAME/ + +echo "> Git Pull" + +git pull + +echo "> Start Building Project" + +./gradlew build + +echo "> Change Directory to step1" + +cd $REPOSITORY + +echo "> Copy Build Files" + +cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/ + +echo "> Check Current Application Pids" + +# pgrep : process id만 추출 +# -f : process 이름으로 검색 +CURRENT_PID=$(pgrep -f ${PROJECT_NAME}*.jar) + +echo "> Current Application Pids : $CURRENT_PID" + +if [ -z "$CURRENT_PID" ] ; then + echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." + +else + echo "> kill -15 $CURRENT_PID" + kill -15 $CURRENT_PID + sleep 5 +fi + +echo "> Deploy New Application" + +# 새로 실행할 jar파일 찾아서 +# 여러 jar파일 중 가장 마지막(최신) 파일을 변수에 저장 +JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1) + +echo "> JAR NAME : JAR_NAME" + +# nohup으로 파일 실행 +# application-oauth.properties 파일 위치 설정 +nohup java -jar \ + -Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \ + $REPOSITORY/$JAR_NAME 2>&1 & +``` + + + + + + + +
+ + + +**🙋‍♀️ 쉘 스크립트를 작성하는 이유는 ?** + +배포할 때마다 개발자가 하나하나 명령어를 실행하는 것은 많은 불편함이 따른다. + +그래서 쉘 스크립트를 작성해 스크립트만 실행하면 차례로 진행되도록 할 수 있다. + + + + + + + + + +
+ + + +### 📝 외부 Securiy 파일 등록 + +서버에 gitignore된 application-oauth.properties 추가 + + + + + +
+ + + +### 📝 스프링 부트 프로젝트로 RDS 접근 + +#### ✏ 테이블 생성 + +H2에서 자동 생성해주던 테이블을 MarialDB에 직접 쿼리를 이용해 생성해줌 + + + +
+ + + +#### ✏ 프로젝트 설정 + +자바 프로젝트가 MariaDB에 접근하려면 DB Driver가 필요. + +build.gradle에 의존성 추가 + + + +
+ + + +#### ✏ EC2 설정 + +DB 접속 정보는 중요하게 보호해야 할 정보이다. + +공개되면 외부에서 데이터를 모두 가져갈 수 있기 때문이다. + +프로젝트 안에 접속 정보를 갖고 있으면 깃허브 같이 오픈된 공간에선 누구나 해킹할 위험이 있다. + +EC2 서버 내부에서 접속 정보를 관리하도록 설정 + + + + + + + diff --git a/build.gradle b/build.gradle index 6e002ca..f9e6b84 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ dependencies { compile('org.springframework.boot:spring-boot-starter-oauth2-client') compile('org.springframework.session:spring-session-jdbc') + compile('org.mariadb.jdbc:mariadb-java-client') + testCompile('org.springframework.boot:spring-boot-starter-test') testCompile("org.springframework.security:spring-security-test") } diff --git a/src/main/resources/application-real.properties b/src/main/resources/application-real.properties new file mode 100644 index 0000000..96e781b --- /dev/null +++ b/src/main/resources/application-real.properties @@ -0,0 +1,3 @@ +spring.profiles.include=oauth,real-db +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +spring.session.store-type=jdbc \ No newline at end of file