Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[AWS] RDS에서 스프링부트 프로젝트 실행 본문

AWS

[AWS] RDS에서 스프링부트 프로젝트 실행

mangdo 2021. 4. 17. 17:00

RDS는 MariaDB를 사용 중이다.

스프링부트 프로젝트에서 이 MariaDB를 이용하기 위해선 몇가지 작업이 필요하다.

1. 테이블 생성

2. 프로젝트 설정

3. EC2(리눅스서버) 설정

 


1. RDS 테이블 생성

: 스프링부트에서 JPA-H2를 사용하면 자동으로 생성해주던 테이블들을 MariaDB에선 직접 생성해줘야한다.

여기서는 JPA가 사용하는 엔터티 테이블과 스프링 세션 테이블 두종류를 사용한다.

엔터티 테이블은 테스트 코드 수행시 로그로 생성되는 쿼리를 확인하면된다. nohup.out의 로그를 복사하여 RDS에 반영하면된다. 

스프링 세션 테이블은 schema-mysql.sql파일에서 확인할 수 있고 그대로 복사하여 RDS에 반영하면된다.

JPA가 사용하는 엔터티 테이블
세션 테이블 확인

RDS에 접속하는 방법은 여러개 있지만, 그 중에서 mysql workbench를 사용해서 반영했다.

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;
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;

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;

테이블 생성

 

2. 프로젝트 설정

스프링부트 프로젝트의 설정을 수정해야한다.

h2드라이버만 있던 build.gradle에 MariaDB드라이버를 등록한다.

[ build.gradle ]

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

서버에서 구동될 환경을 구성한다.

[ 원래의 application.properties]

spring.jpa.show_sql = true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.h2.console.enabled = true
spring.profiles.include = oauth
spring.session.store-type=jdbc

spring.h2.console.enabled = true 은 h2 콘솔에 접근하기 위한 명령어였고

spring.jpa.show_sql = true은 jpa sql문을 로그로 출력해주는 명령어 였다.

두 명령어 모두 서버에서 구동될 때는 필요가 없으니 삭제하고, RDS접속 정보를 저장할 application-real-db.properties를 profiles에 추가해서 application-real.properties라는 파일을 생성하자.

 

[ application-real.properties ]

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

설정이 되었다면 깃헙으로 다시 push한다.

 

3. EC2설정

RDS 접속 정보는 보호해야할 정보이니 깃헙에 직접 올리면 안된다. EC2서버에 직접 설정 파일을 두도록 한다.

applicaion-oauth.properties와 마찬가지로 /home/ec2-user/app/ 디렉토리에 둔다.

 

vim /home/ec2-user/app/application-real-db.properties

 

[application-real-db.properties]

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mariadb://(RDS 엔드포인트):(포트명)/(데이터베이스이름)
spring.datasource.username=(db 계정)
spring.datasource.password=(db 계정 비밀번호)
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

 

deploy.sh가 application-real.propertiesapplication-real-db.properties를 사용하도록 수정한다.

또한 기본 profile은 real profile로 동작하게 한다.

(스프링 부트에서는 properties의 이름을 application-xxx.properties로 만들면 xxx라는 이름의 profile이 생성되어 이를 통해 관리 할 수 있다.)

[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\
        $REPOSITORY/$JAR_NAME 2>&1 &

 

성공!!!

4. 접속 확인

8080포트로 배포가 되었으니, 8080이 열려있는지 확인한다.

열려있다면 (퍼블릭 DNS주소):8080으로 접속해보자

DNS 확인
된다ㅜㅜ

 

 

+) 소셜로그인

구글, 네이버 소셜 로그인을 위해 현재의 도메인 등록이 필요하다.

[ 구글 로그인 ]

구글 클라우드 콘솔에 들어가서 프로젝트로 이동 > API 및 서비스 > OAuth 동의화면 > 앱수정

사용자 인증정보>OAuth 2.0 클라이언트 ID>리디렉션 URI 수정

 

 

 

[ 네이버 로그인 ]

 

참고 출처 :

스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저 )

'AWS' 카테고리의 다른 글

[AWS] AWS 사용 요금 확인  (0) 2021.04.19
[AWS] AWS의 IAM  (0) 2021.04.18
[AWS] EC2에서 스프링부트 프로젝트 배포  (0) 2021.04.16
[AWS] RDS 인스턴스에 접속하기  (4) 2021.04.16
[AWS] RDS에 맞는 파라미터 설정하기  (0) 2021.04.16