본문으로 바로가기
728x90

Chapter 08

EC2 서버에 프로젝트를 배포해 보자

 

 

EC2에 프로젝트 Clone 받기

 

- 먼저 깃허브에서 코드를 받아올 수 있도록 깃 설치

sudo yum install git

- git clone으로 프로젝트를 저장할 디렉토리 생성

mkdir ~/app && mkdir ~/app/step1

- 생성된 디렉토리로 이동

cd ~/app/step1

- 본인의 깃허브 웹페이지에서 https 주소 복사 & git clone 복사한 주소

 

- 프로젝트로 이동해 파일들 확인

- 코드들이 잘 수행되는지 테스트

./gradlew test

이상으로 깃을 통해 프로젝트를 클론과 풀까지 진행하였다.

 

 

배포 스크립트 만들기

 

쉘 스크립트를 통해 명령어들이 한번에 차례대로 실행되도록 한다.

 

vim ~/app/step1/depoly.sh로 파일을 생성 후 아래의 내용을 입력

 

 

이렇게 생성된 스크립트에 실행 권한을 추가한다.

 

 

이제 이 스크립트를 다음 명령어로 실행한다.

./deploy.sh

 

nohup.out의 맨 아래로 가보면 아래와 같은 에러가 보인다.

 

 

외부 Security 파일 등록하기

 

위의 이유는 애플리케이션을 실행하기 위해 공개된 저장소에 ClientId, ClientSecret이 없기 때문이다.

 

- 로컬에 있는 application-oauth.properties의 내용을 아래의 장소에 붙여넣기

vim /home/ec2-user/app/application-oauth.properties

 

이후, depoly.sh 파일을 수정한다.

...
nohup java -jar\
	-Dspring.config.location=classpath:/application.
properties,/home/ec2-user/app/application-oauth.properties\
	$REPOSITORY/$JAR_NAME 2>&1 &

 

 

스프링 부트 프로젝트로 RDS 접근하기

 

1. RDS 테이블 생성

 

JPA가 사용할 테이블은 테스트 코드 수행시 로그 이용

create table 부터 복사해 RDS에 반영

Hibernate: create table posts (id bigint not null auto_increment, created_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, created_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

 

스프링 세션 테이블은 schema-mysql.sql 파일 이용

 

ctrl+shift+n -> schema-mysql.sql 검색

여기서 나온 테이블 역시 복사해 RDS에 반영

 

2. 프로젝트 설정

 

MariaDB 드라이버 build.gradle에 등록

compile("org.mariadb.jdbc:mariadb-java-client")

src/main/resources/에 application-real.properties 파일 추가

spring.profiles.include=oauth,real-db
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.session.store-type=jdbc

 

3. EC2 설정

 

-app 디렉토리에 application-real-db.properties 파일 생성

vim ~/app/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=비밀번호
spring.datasource.driver-class-name=orrg.mariadb.jdbc.Driver

-deploy.sh 개선

 

 

실습을 진행하는 도중, 미쳐 인식하지 못했던 오류가 있었다.

과정을 살펴보니 ./deploy.sh의 과정중 아래와 같은 에러가 있었다.

 

이를 구글링을 통해 비슷한 문제를 겪었던 분의 경험을 통해 아래와 같이 수정해 해결할 수 있었다.

아마 코드를 수정하는 도중 문제가 발생한 듯하다.

 

- nohup.out 파일을 열어 아래와 같은 로그가 보인다면 성공적으로 수행

 

- curl 명령어로 html 코드가 보인다면 성공

 

 

 

 

EC2에서 소셜 로그인하기

 

- AWS 보안그룹 변경

8080 포트가 열려있으므로 OK

 

- AWS EC2 도메인으로 접속

EC2->인스턴스를 통해 퍼블릭 DNS 확인가능 / 도메인 주소에 퍼블릭 DNS:8080 입력

 

- 구글에 EC2 주소 등록

 

구글 웹 콘솔(https://console.cloud.google.com/home/dashboard)로 접속 후,

API 및 서비스 -> 사용자 인증정보 -> OAuth 동의화면

 

승인된 도메인에 아까 EC2의 퍼블릭 DNS 등록

 

사용자 인증정보 탭에서 본인이 등록한 서비스 클릭

 

승인된 리디렉션 URI에 퍼블릭 DNS 주소:8080/login/oauth2/code/google 주소 추가

 

 

네이버에 EC2 주소 등록

 

네이버 개발자센터(developers.naver.com/apps/#/myapps)로 접속

본인 프로젝트 -> API 설정 -> 아래와 같이 수정

Callback URL에는 DNS:8080/login/oauth2/code/naver로 작성

 

 

 

현재 방식의 문제점

 

- 수동 실행되는 Test

- 수동 build

 

다음 단원에서는 깃허브에 푸시를 하면 자동으로 Test&Build&Deploy가 진행되도록 하는 작업을 진행하겠다.

 

 

728x90