현재 프로젝트에서 데이터베이스를 2가지 사용하고 있습니다.
그래서 기존의 datasource url을 로컬 DB에서 RDS 서버로 바꿔서 데이터베이스 서버에서 잘 작동하는지 테스트 했습니다.
하지만, RDS 서버와 연결했다가 다시 로컬 DB에 연결해서 테스트를 보려니까 url도 계속 수정해야하고 username, password도 수정을 해야하는 불편함이 있었습니다.
그래서 환경 설정 파일을 분리하기로 했습니다.
제 기존 application.yml
은 이렇게 작성했습니다.
#DB
spring:
datasource:
url: jdbc:mysql://url작성:3306/ConcertCalendar?useUnicode=true&serverTimezone=Asia/Seoul
username: username작성
password: password작성
driver-class-name: com.mysql.cj.jdbc.Driver
#JPA
jpa:
properties:
hibernate:
format_sql: true
# show_sql은 System.out에 로그가 출력되므로 사용을 지양하자
# show_sql: true
# jpa에서 어떤 데이터베이스에 맞춰 쿼리를 작성할 지 표시
dialect: org.hibernate.dialect.MySQL5Dialect
hibernate:
ddl-auto: update
# Redis
redis:
host: localhost
port: 6379
# mail
mail:
# Google smtp server 사용
host: smtp.gmail.com
port: 587
username: #앱 비밀번호 발급받은 google 계정
password: #발급받은 앱 비밀번호
properties:
mail:
smtp:
starttls:
enable: true
auth: true
# sql에 어떤 값이 바인딩 되는지 표시해주는 설정 코드
logging:
level:
org:
hibernate:
SQL: debug
type:
descriptor:
sql: trace
application.yml
을 application-local.yml
(local DB 사용 용도), application-dev.yml
(RDS DB 사용 용도)로 나눴습니다.
기존의 application.yml
의 내용을 DB파트를 제외하고 복사해서 application-local.yml
, application-dev.yml
에 붙여놓고
application.yml
은 아래와 같이 수정했습니다.
spring:
profiles:
# application-local.yml을 사용하겠다
active: local
이렇게 수정해서 어플리케이션을 실행하니까
Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.
이렇게 JavaMailSender
Configuration
을 찾지 못하는 에러가 발생했습니다.
JavaMailSender
에서 필요한 정보를 yml
파일에 저장해놓은 상태였기 때문에 수동적으로 Configuration 파일을 생성하지 않아도 되는 상황인데 환경설정 파일을 분리하니까 저 오류가 발생했습니다.
구글링을 통해서 Configuration 파일을 생성하지 않고 해결할 수 있는 방법을 찾아보다가 환경 설정 파일을 분리할 때 loca.yml
과 dev.yml
에 mail에 대한 코드가 중복으로 작성이 되어있어서 오류가 발생하는 게 아닐까 하는 의구심이 들었습니다.
그래서 application.yml
파일에 loca.yml
과 dev.yml
에 공통적으로 들어있는 코드들을 작성을 하는 걸로 바꾸고 분리 파일에는 데이터에 관한 내용만 작성을 하는 식으로 코드를 변경했습니다.
#DB
spring:
profiles:
# application-local.yml을 사용하겠다
active: local
# jwt.yml 파일 포함
include: jwt
#JPA
jpa:
properties:
hibernate:
format_sql: true
# show_sql은 System.out에 로그가 출력되므로 사용을 지양하자
# show_sql: true
# jpa에서 어떤 데이터베이스에 맞춰 쿼리를 작성할 지 표시
dialect: org.hibernate.dialect.MySQL5Dialect
hibernate:
ddl-auto: update
# Redis
redis:
host: localhost
port: 6379
# mail
mail:
# Google smtp server 사용
host: smtp.gmail.com
port: 587
username: #앱 비밀번호 발급받은 google 계정
password: #발급받은 앱 비밀번호
properties:
mail:
smtp:
starttls:
enable: true
auth: true
# sql에 어떤 값이 바인딩 되는지 표시해주는 설정 코드
logging:
level:
org:
hibernate:
SQL: debug
type:
descriptor:
sql: trace
수정하고 나니까 JavaMailSender
Configuration
을 못 찾는 문제를 해결할 수 있었습니다.
혹시 환경 설정 파일을 변경하고 나서 JavaMailSender
관련된 문제가 발생하시는 분들은 환경설정 파일을 다시 한 번 체크해보는 게 좋을 것 같습니다!
잘보았습니다.
설정파일 분리를 통해 추상화 하시려는 노력이 좋은 것 같습니다.
다만, spring.profiles.include=a,b,c,d,e,f,g
와 같은 옵션 방법도 있기에 한번 고려 해보시는 것도 좋을 것 같습니다!