[springboot-webserivce] 프로젝트와 RDS 연결
Updated:
[2020.12.28] 부터 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 통해 스프링 공부를 시작했다.
공부한 내용을 글로 정리하려고 한다.
그래야 나중에 다시 찾아보며 공부 할 수 있을테니까 !!
🥒 RDS 연결하기
RDS 환경을 구축하고 프로젝트를 서버에 배포했다.
이 상태로는 프로젝트가 RDS 를 사용하지 않고 H2DB 를 사용한다.
이제 H2DB 는 사용하지 않고 RDS 를 사용하게 하려고 한다.
해주어야 할 설정은 총 세 가지 이다.
- 테이블 설정
- 프로젝트 설정
- EC2 설정
🥯 테이블 설정
H2DB 를 사용할 때는 필요한 테이블을 자동으로 만들어 주었다.
메모리에서 돌아가는 데이터베이스라 프로그램이 종료되면 삭제되기 때문에 자동으로 만들어 주는게 아닐까 싶다..
어쨌든 H2DB 가 자동으로 만들어주었던 테이블을 직접 쿼리문을 통해 만들어 놓아야 한다.
프로젝트에서 사용하는 테이블은 posts, user 테이블과 스프링 세션 테이블이다.
생성 쿼리문은 테스트 로그에 남아있다.
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;
스프링 세션 테이블은 인텔리제이 파일검색 (command + shift + o) 을 통해 schema-mysql.sql 파일에서 확인 할 수 있다.
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;
이 쿼리문들을 EC2 서버로 접속해 실행해도 되고 워크벤치로 접속해 실행해도 된다.
정상적으로 테이블이 모두 만들어졌으면 테이블 설정은 끝난다.
🥨 프로젝트 설정
현재 프로젝트에는 H2DB 드라이버만 있는 상태이기 때문에 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
application-name.properties 로 파일을 만들게 되면 profile=name 인 환경이 구성된다.
properties 파일을 깃허브에 푸시 해 주면 프로젝트 설정은 끝난다.
🌮 EC2 설정
RDS 에 접속하기 위한 정보는 매우 민감한 정보이기 때문에 깃허브에 올리지 않고 직접 서버에 저장한다.
application-real-db.properties
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mariadb://RDS 주소:포트번호/DB 이름
spring.datasource.username=ID
spring.datasource.password=password
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
여기서 주의해야 할 설정은 spring.jpa.hibernate.ddl-auto=none 이다.
스프링 프로젝트를 실행할 때 JPA 가 자동으로 테이블을 생성하지 않게 하는 옵션이다.
만약 이 설정을 까먹는다면 실제 사용하는 테이블이 사라지고 새로운 테이블이 생길 수 있기 때문에 꼭 써주어야 한다.
그리고 앞서 만들었던 deploy.sh 파일을 수정하면 된다.
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 &
이렇게 하면 H2DB 를 사용하지 않고 RDS 를 통해 MariaDB 를 사용하게 된다.
⛺️ 정리
properties 를 통해 프로젝트 설정을 바꾸어 주었다.
그리고 RDS 연결도 해주었다.
이제 대강 어떻게 프로젝트를 만들고 배포까지 하는지 큰 과정이 이해가 간다.
마지막으로 수정 된 코드를 깃허브에 푸시만 하면 자동으로 테스트, 빌드를 거쳐 배포까지 해주는 시스템을 구축한다.
Leave a comment