application.properties 설정!

김재현·2023년 12월 13일
0

TIL

목록 보기
58/88

application

application.properties? application.yml? application-test?? 우선순위는?

어렵지 않은 것인데, 일전에 노베이스로 직접 설정하다가 너무 힘들게 배워서 포스팅한다.

application.properties

(resources directory 밑에 위치)
application.properties란, Spring Boot 애플리케이션의 구성 속성을 설정하는 데 사용되는 파일이다. 애플리케이션의 클래스 경로에 위치하며, 키-값 쌍의 형식으로 구성된다. 스프링 부트가 자동으로 로딩하게 되는 규약들이라고 보면 된다.

나는 스프링을 처음 배우며 application.properties를 사용했기 때문에 이게 익숙했다.

아래는 내가 사용한 예시이다.

// MySQL 사용 설정
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update

// Hibernate 쿼리문 날아가는 것을 보기 쉽게 해준다
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
  • ddl-auto= 는 create, create-drop, update, validate, none(default) 로 5가지 속성이 있는데, 테이블을 어떻게 다룰지 관련된 설정이다.
    나는 현재 개발(공부) 환경이기 때문에, 테이블에 변화가 있을때만 변경을 가하는 update로 설정했다.

application.yml

그럼 yml은 뭐냐?
이것은 Spring legacy에서의 web.xml, root-context.xml, servlet-context.xml의 합본이다. 즉, application.yml은 이 프로젝트에서 사용하는 설정값들을 관리하는 파일이다.
즉, application.properties의 구버전인 셈.

똑같은 기능을 한다고 보면 된다. 위에 작성 한 것을 yml로 바꿔보면,

spring:
  datasource:
    url: ${DB_URL}
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${DB_USER}
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true
        use_sql_comments: true
        format_sql: true

구조만 다를 뿐, 그 내용을 들여다보면 위와 동일한 내용을 갖고있는 것을 볼 수 있다.

application-test

이렇게 properties나 yml에 -test를 붙이면 test코드에 적용될 설정들을 적용 할 수 있다.

또는 이렇게 test의 resource에 넣으면 -test를 붙이지 않아도 테스트 코드에 적용된다.
(이 방법이 더 직관적이라 일반적으로 선호된다.)

그렇다면 test용으로 설정한 이유는 무엇인가?
나의 경우는 test용 DB를 따로 설정하고 싶었기 때문이다.

실제(?) DB는 MySQL을, Test용으로는 가벼워서 의존성 주입만으로도 사용 가능한 h2를 사용했다.

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=test
spring.datasource.password=password
spring.h2.console.enabled=true

설정

그렇다면 설정들은 어떤 우선순위를 갖고 적용이 될까?

우선 속성의 종류는 아래와 같다.

  • 자바 속성 파일(properties)
  • yaml 파일
  • 환경 변수
  • 커맨드 라인 인수(command line argument)

이런 속성값은 아래의 방법으로 객체에 바인딩 할 수 있다.

  1. @Value를 통해 주입
  2. Environment 추상 클래스를 통해 접근
  3. @ConfigurationProperties

설정 우선순위

우선순위는 낮은 순에서 높은 순으로 오버라이드되므로, 공통으로 사용할 값일 수록 우선순위가 낮아지고, 프로파일이나 특정 환경별로 사용할 값일 수록 우선순위가 높아진다.

(출처: jaime-note)

보통은 3~4번 정도까지 다루게 되는 것으로 알고있다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글