sudo yum install git
git --version
mkdir ~/app && mkdir ~/app/step1
sudo yum install git
cd ~/app/step1
git clone 복사한 주소
ll
```./gradle test``
```git pull```
-bash: ./gradlew: permission denied
다음 명령어로 실행 권한을 추가한 뒤 다시 테스트를 수행하면 된다.
chmod +x ./gradlew
cd ~/app/step1
#!/bin/bash
REPOSITORY=/home/ec2-user/app/{clone한 프로젝트 저장한 경로}
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"
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,classpath:/application-real.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 &
chmod +x ./deploy.sh
./deploy.sh
vim nohup.out
vim /home/ec2-user/app/application-oauth.properties
nohup java -jar \
-Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties \
$REPOSITORY/$JAR_NAME 2>&1 &
RDS는 MariaDB를 사용 중입니다.
MariaDB에서 스프링부트 프로젝트를 실행하기 위해선 몇 가지 작업 필요
테이블 생성
프로젝트 설정
EC2 (리눅스 서버) 설정
RDS 테이블 생성
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; ```
* 복사하여 RDS에 반영
프로젝트 설정
MariaDB 드라이버를 pom.xml에 등록
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
spring.profiles.include=oauth, real-db
# 쿼리 로그 세팅
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
# 세션 저장소 jdbc 설정
spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=always
# UTF-8 세팅
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
모든 설정이 되었다면 깃허브로 푸시
EC2 설정
OAuth와 마찬가지로 RDS 접속 정보도 보호해야 할 정보이니 EC2 서버에 직접 설정 파일을 둔다
app 디렉토리에 application-real-db.properties 파일 생성
vim ~/app/application-real-db.properties
# 쿼리 로그 세팅
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type=trace
# DB 세팅
spring.datasource.hikari.jdbc-url=jdbc:mariadb://rds주소:포트명(기본은 3306)/database이름
spring.datasource.hikari.username=db계정
spring.datasource.hikari.password=db계정 비밀번호
spring.datasource.hikari.driver-class-name=org.mariadb.jdbc.Driver
# ddl-auto 세팅
spring.jpa.hibernate.ddl-auto=none
...
nohup java -jar \
-Dspring.config.location=classpath:/application.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties,classpath:/application-real.properties \
-Dspring.profiles.active=real \
$REPOSITORY/$JAR_NAME 2>&1 &
curl localhost:8080
curl 명령어를 통해 EC2에 서비스가 잘 배포되었으니 브라우저에서도 확인 필요
AWS 보안 그룹 변경
EC2에 스프링 부트 프로젝트가 8080 포트로 배포되었으니, 8080 포트가 보안 그룹에 열려 있는지 확인
사진 추가하기
AWS EC2 도메인으로 접속
결과사진 추가
현재 상태에서는 해당 서비스에 EC2의 도메인을 등록하지 않았기 때문에 구글과 네이버 로그인이 작동하지 않음
따라서 구글, 네이버에 서비스 등록 필요
구글에 EC2 주소 등록
구글 웹 콘솔로 접속하여 본인의 프로젝트로 이동한 다음 **[API 및 서비스 => 사용자 인증 정보]**로 이동
[OAuth 등의 화면] 탭을 선택하고 아래에서 승인된 도메인에 'http://' 없이 EC2의 퍼블릭 DNS를 등록
[사용자 인증 정보] 탭을 클릭해서 본인이 등록한 서비스의 이름 클릭
퍼블릭 DNS 주소에 :8080/login/oauth2/code/google 주소를 추가하여 승인된 리디렉션 URI에 등록
EC2 DNS 주소로 이동해서 다시 구글 로그인을 시도해 보면 로그인 성공
구글에 EC2 주소 등록
네이버 개발자 센터로 접속해서 본인의 프로젝트로 이동
아래로 내려가 보면 PC 웹 항목이 있는데 여기서 서비스 URL과 Callback URL 2개를 수정
2개 항목을 모두 수정/추가하였다면 구글과 마찬가지로 네이버 로그인 성공
구글과 네이버 로그인도 EC2와 연동 완료되었지만 현재 방식은 몇 가지 문제가 있음 * 수동 실행되는 Test * 본인이 짠 코드가 다른 개발자의 코드에 영향을 끼치지 않는지 확인하기 위해 전체 테스트 필요 * 현재 상태에선 항상 개발자가 작업을 진행할 때마다 수동으로 전체 테스트 필요 * 수동 Build * 다른 사람이 작성한 브랜치와 본인이 작성한 브랜치가 합쳐졌을 때(Merge) 이상이 없는지는 Build 실행 필요 * 이를 매번 개발자가 직접 실행해해야 함
그래서 다음 글에서는 이런 수동 Test & Build를 자동화시키는 작업을 진행 예정
깃허브에 푸시를 하면 자동으로 Test & Build & Deploy가 진행되도록 개선하는 작업임