
먼저 깃허브에서 코드를 받아올 수 있게 EC2에 깃을 설치해야한다.
EC2로 접속해서 다음과 같이 명령어를 입력합니다.
git 설치sudo yum install git
git 버전 확인git --version
프로젝트 디렉토리 생성mkdir ~/app && mkdir ~/app/step1
프로젝트 디렉트리 이동cd ~/app/step1
git clonegit 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.gradlecompile("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에서 네이버 로그인 성공