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가 진행되도록 하는 작업을 진행하겠다.
'언어 > SpringBoot' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 10장 (0) | 2020.10.26 |
---|---|
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 9장 (0) | 2020.10.26 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 7장 (0) | 2020.10.21 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 6장 (0) | 2020.10.19 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 5장(1) (0) | 2020.10.18 |