기존 프로젝트에서 변경사항
기존 (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로 혼자 구현하는 웹 서비스 / 이동욱 ] 책을 따라한 것을 정리하기 위한 게시글입니다. 요약, 생략한 부분이 많으니 보다 자세한 설명은 책 구매를 권장합니다.
'Clone Coding > 스프링 부트와 AWS' 카테고리의 다른 글
[Travis CI] 빌드 자동화 (0) | 2021.03.12 |
---|---|
[OAuth 2] 구글, 네이버 연동 설정 바꾸기 (4) | 2021.03.11 |
[AWS EC2] 배포 스크립트 생성 (0) | 2021.02.15 |
[AWS EC2] EC2 서버에 프로젝트 배포하기 (0) | 2021.02.15 |
[AWS RDS] RDS 접근하기 - sqlDeveloper, EC2 (0) | 2021.02.10 |