먼저 깃허브에서 코드를 받아올 수 있게 EC2에 깃을 설치해야한다.
EC2로 접속해서 다음과 같이 명령어를 입력합니다.
git 설치
sudo yum install git
git 버전 확인
git --version
프로젝트 디렉토리 생성
mkdir ~/app && mkdir ~/app/step1
프로젝트 디렉트리 이동
cd ~/app/step1
git clone
git clone 주소
프로젝트 확인
cd 프로젝트명 ll
단위 테스트만 수행
./gradlew test
실행 결과
실행 권한 추가
chmod +x ./gradlew
단위 테스트만 수행
./gradlew test
현재 ec2엔 그레이들(Gradle)을 설치하지 않았습니다. 하지만 Gradle Task(test)를 수행 할 수 있습니다. 이는 프로젝트 내부에 포함된 gradlew 파일 때문입니다.
이 3가지에 대해서 쉘스크립트를 작성하겠습니다.
deploy.sh 생성
vim ~/app/step1/deploy.sh
deploy.sh 작성
#!/bin/bash REPOSITORY=/home/ec2-user/app/step1 PROJECT_NAME=springboot-webservice 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" 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 &
deploy.sh 실행 권한 추가
chmod +x ./deploy.sh
deploy.sh 실행
./deploy.sh
배포 스크립트가 잘 실행되는 것을 볼 수 있다.
oauth 관련 proerties를 작성하자
application-oauth.properties 작성
vim /home/ec2-user/app/application-oauth.properties
로컬에 있는 application-oauth.properties 파일 내용 그대로 붙여넣기를 합니다.
deploy.sh 파일 수정
... nohup java -jar \ -Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \ $JAR_NAME > $REPOSITORY/$JAR_NAME 2>&1 &
테이블 생성
Hibernate: create table posts (id bigint not null auto_increment, create_date datetime, modified_date datetime, author varchar(255), content TEXT not null, title varchar(500) not null, primary key (id)) engine=InnoDB Hibernate: create table user (id bigint not null auto_increment, create_date datetime, modified_date datetime, email varchar(255) not null, name varchar(255) not null, picture varchar(255), role varchar(255) not null, primary key (id)) engine=InnoDB
스프링 세션 테이블
CREATE TABLE SPRING_SESSION ( PRIMARY_ID CHAR(36) NOT NULL, SESSION_ID CHAR(36) NOT NULL, CREATION_TIME BIGINT NOT NULL, LAST_ACCESS_TIME BIGINT NOT NULL, MAX_INACTIVE_INTERVAL INT NOT NULL, EXPIRY_TIME BIGINT NOT NULL, PRINCIPAL_NAME VARCHAR(100), CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID) ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID); CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME); CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME); CREATE TABLE SPRING_SESSION_ATTRIBUTES ( SESSION_PRIMARY_ID CHAR(36) NOT NULL, ATTRIBUTE_NAME VARCHAR(200) NOT NULL, ATTRIBUTE_BYTES BLOB NOT NULL, CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME), CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
build.gradle
compile("org.mariadb.jdbc:mariadb-java-client")
운영 application-real.properties 작성
spring.profiles.include=oauth,real-db spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.session.store-type=jdbc
운영 application-real-db.properties 생성
vim ~/app/application-real-db.properties
운영 application-real-db.properties 작성
spring.jpa.hibernate.ddl-auto=none spring.datasource.url=jdbc:mariadb://rds주소:포트명(기본은 3306)/database명 spring.datasource.username=db계정 spring.datasource.password=db계정 비밀번호 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
deploy.sh 수정
... nohup java -jar \ -Dspring.config.location=classpath:/application.properties,classpath:/application-real.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \ -Dspring.profiles.active=real \ $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
deploy.sh 재실행
./deploy.sh
curl localhost:8080 확인
EC2 보안 그룹 체크
EC2 퍼블릭 DNS 확인
EC2 퍼블릭 DNS 접속
OAuth 동의 화면 승인된 도메인 등록
사용자 인증 정보 추가
EC2에서 구글 로그인 성공
네이버 애플리케이션 설정
EC2에서 네이버 로그인 성공