[참고] yml 파일 profile 설정하기

불바다·2023년 8월 6일

KpopGeneration

목록 보기
10/10

yml 파일에서 profile을 설정해주는 방식을 변경해주었습니다.
설정 방식을 변경한 이유는 다음과 같습니다.
1. 기존에 사용하던 profile 설정 방식은 deprecated되어 있다
2. Test를 작성하기 시작하면서 별도의 profile을 지정해줘야 하는 일이 생겼다.

저번 개인 프로젝트에서는 허겁지겁 프로젝트를 진행하다보니, deprecated 되었어도 그냥 사용했었습니다. 하지만 이번 프로젝트에서 각 테스트 별로 profile을 지정해줘야 하는 일이 생겼고, 이참에 deprecate된 방식말고 새로운 방식을 적용해보고자 하였습니다.

기존 프로젝트에서 사용했던 yml 설정 방식

application.yml

어떠한 프로필을 사용할지 정리해 놓은 application.yml 파일이 있습니다.

spring:
  profiles:
    active: # 어떠한 프로필 그룹을 활성화시킬지 결정해줍니다
      - local
    group: # 필요한 설정들을 그룹화해주고 있습니다(여기서는 DB 설정만 적용하였습니다)
      local:
        - db-local #db-local 프로필
      prod:
        - db-aws #db-aws 프로필
      docker-local:
        - db-docker-local #db-docker-local 프로필
    include: # application-db.yml 파일을 참고하도록 설정해줍니다
      - db
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
server:
  port: 8080

application-db.yml

db 설정에 따라 프로필을 분리해놓은 yml 파일입니다.

#defaul 설정 - 공통 설정입니다
spring:
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MariaDBDialect

logging.level:
  org.hibernate.sql: debug

--- #dev 설정(개발 환경) : db-docker-local 프로필을 설정해줍니다
spring:
  config:
    activate:
      on-profile: "db-docker-local"

  datasource:
    url: jdbc:mariadb://주소
    username: username
    password: password
    driver-class-name: org.mariadb.jdbc.Driver

--- # production 설정(실제 운영 환경) : db-aws 프로필을 설정해줍니다
spring:
  config:
    activate:
      on-profile: "db-aws"

  datasource:
    url: jdbc:mariadb://주소
    username: username
    password: password
    driver-class-name: org.mariadb.jdbc.Driver


--- #dev 설정(개발 환경) : db-local 프로필을 설정해줍니다
spring:
  config:
    activate:
      on-profile: "db-local"

  datasource:
    url: jdbc:mariadb://주소
    username: username
    password: password
    driver-class-name: org.mariadb.jdbc.Driver

현재 프로젝트에서 yml 설정 방식

아직 개발 중인 프로젝트라 yml 파일 설정이 많지는 않습니다..!

application.yml

어플리케이션이 기본적으로 사용하는 application.yml 파일입니다
기본적으로 실행 시 mariaDB를 사용하도록 되어있습니다.

spring:
  thymeleaf:
    check-template-location: true
    prefix: classpath:/templates/
    suffix: .html
    cache: false
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: create
  datasource:
    url: jdbc:mariadb://주소
    username: username
    password: password
    driver-class-name: org.mariadb.jdbc.Driver 
server:
  port: 8081
---
spring:
  config.activate.on-profile: test # test환경에서 사용되는 yml 파일

application-test.yml

test 프로필을 설정해놓은 yml파일입니다
기본 application.yml과 다르게 mariaDB 대신 h2를 사용하도록 설정해놓았습니다

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/test
    driver-class-name: org.h2.Driver
    username: sa
  h2:
    console:
      enabled: true

중요한 점으 test profile이 기본 application.yml 파일에서 설정해놓은 값들을 덮어쓰고 있다는 점입니다.

기본적으로는 application.yml의 설정을 적용하되, test 프로필을 사용하면 test 프로필에서 재정의된 값들을 사용한다는 점입니다.
다음과 같이 test profile을 활성화해줄 수 있습니다!

@SpringBootTest
@Transactional
@ActiveProfiles("test")
class PostTest {...}

좀 더 자세한 내용은 밑에서 확인하실 수 있습니다!
https://stackoverflow.com/questions/38711871/load-different-application-yml-in-springboot-test/53134737#53134737

profile
코딩 불바다, 불 같은 코딩, 화끈하게 코딩하자

0개의 댓글