인텔리제이서 개발중이나 로컬에서 서버를 배포할때는 mysql을 사용하지만 aws에서 배포할때는 rds사용 예정 -> 서버 설정 분리가 필요
application.yml을 사용한 분리 구상
application.yml -> 일반적으로 사용하는 애플리케이션 실행 환경
application-local.yml -> 로컬 환경에서 사용하는 정보들
application-server.yml -> server 환경에서 사용되는 정보들
application.yml - jpa, sql, logging, server등 설정
spring:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
format_sql: true
sql:
init:
data-locations: classpath*:db/h2/data.sql
logging:
level:
org:
springframework:
orm:
jpa: DEBUG
server:
servlet:
encoding:
force-response: true
# 공통 설정 내용...
application-local.yml - 로컬에서 사용할 mysql설정
spring:
profiles:
active: local
# MySQL 데이터베이스 설정
spring:
datasource:
url: jdbc:mysql://localhost:3306/{데이터베이스 이름}?useSSL=false&allowPublicKeyRetrieval=true&useLegacyAuth=false
username: {데이터베이스 유저 이름}
password: {데이터베이스 비밀번호}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL8Dialect
{현재mysql8.0.32버전이기 때문에 MySQL8Dialect시용 mysql 버전에 맞게 변경하기}
# 로컬 전용 설정 내용...
application-server.yml - 서버에서 사용할 aws rds설정
spring:
profiles:
active: server
# AWS RDS를 사용하는 MySQL 데이터베이스 설정
spring:
datasource:
url: jdbc:mysql://{AWS RDS Endpoint}/{데이터베이스 이름}?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
username: {RDS Mysql Admin id}
password: {RDS Mysql Admin password}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL8Dialect
# 서버 전용 설정 내용...
이 세가지 파일로 서버 설정을 분리한다.
이후 아래 3번의 세가지 방법 중 상황에 알맞게 spring.profiles를 설정한다.
인텔리제이에서 spring.profiles설정하는 방법
1. Run/Debug configuration 클릭
2. Modify options -> Add VM options 클릭
3. Active Profile 옵션 추가
-Dspring.profiles.active={프로파일}
위 application.yml에 spring.profiles.active 설정을 추가한다.
spring:
profiles:
active: local
# 공통 설정 내용...
Windows: ./gradlew build -Dspring.profiles.active={프로파일}
macOS/Linux: ./gradlew build -Dspring.profiles.active={프로파일}
이후 실행하면 local설정으로 mysql과 연동된다
참고 글
https://velog.io/@be_have98/IntelliJ-Spring-Boot%EC%9D%98-Active-Profile-%EC%84%A4%EC%A0%95