본문 바로가기
Clone Coding/스프링 부트와 AWS

[Spring] 스프링 부트로 RDS 접근하기

by 연로그 2021. 2. 16.
반응형

기존 프로젝트에서 변경사항

  기존 (h2) 신규 (RDS - MariaDB)
테이블 생성 자동 생성 직접 쿼리 이용
프로젝트 설정 db 드라이버 필요 db 드라이버 필요

 

RDS 테이블 생성

RDS에 다음 sql문들을 실행시킨다.

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(500) 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 SRPING_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.gradle에 MariaDB 드라이버를 등록한다.

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

 

/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

 

EC2 설정

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

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=//RDS엔드포인트:3306/db이름
spring.datasource.username=아이디
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

포트를 직접 지정한 경우 3306번이 아닐 수 있다.

자신의 포트에 맞게 설정해라.

 

코드 설명 ▼

더보기

spring.jpa.hibernate.ddl-auto=none

- JPA로 테이블이 자동 생성되는 옵션을 None으로 지정

- RDS에는 실제 운영으로 사용될 테이블이니 스프링 부트에서 새로 만들지 않도록 해야함

- 이 옵션을 제외하면 테이블이 모두 새로 생성될 수도 있음

 

deploy.sh 수정

nohup java -jar \
	-Dspring.config.loacation= ... ,/home/ec2-user/app/application-real-db.properties,classpath:/application-real.properties \
    -Dspring.profiles.active=real \
    $REPOSITORY/$JAR_NAME 2>&1 &

( ... 부분은 앞에서 properties 파일을 추가한 부분이라 생략했다. )

코드 설명 ▼

더보기

-Dspring.profiles.active=real

- application-real.properties를 활성화한다.

- application-real.properties 내부의 spring.profiles.include=oauth,real-db 옵션 때문에 real-db도 활성화 대상에 포함된다.

 

이제 deploy.sh를 실행하고 curl을 통해 수행을 확인해보자

$ ./deploy.sh
$ curl localhost:8080

아래처럼 html 코드가 보이면 성공이다.


해당 게시글은 [ 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 / 이동욱 ] 책을 따라한 것을 정리하기 위한 게시글입니다. 요약, 생략한 부분이 많으니 보다 자세한 설명은 책 구매를 권장합니다.

반응형