[그냥 보는] application.yaml

2024. 5. 28. 14:10·프레임워크/자바 스프링

1. application.yaml vs application.properties 비교

application.yaml과 application.properties는 모두 Spring Boot 애플리케이션에서 설정을 정의하는 데 사용되는 파일 형식이지만, 몇 가지 주요 차이점이 있습니다.

구조:

  • application.yaml: YAML (YAML Ain't Markup Language) 형식을 사용하며, 계층 구조와 들여쓰기를 사용하여 설정을 구성합니다. 이는 읽기 쉽고 코드 작성하기 편리하다는 장점이 있습니다.
  • application.properties: 키-값 쌍 형식을 사용하며, = 기호로 키와 값을 구분하고 줄 바꿈으로 각 속성을 구분합니다. 이는 간단하고 친숙한 형식이지만, 계층 구조를 표현하는 데 어려움이 있습니다.

데이터 형식:

  • application.yaml: 문자열, 숫자, 불리언, 배열, 객체 등 다양한 데이터 형식을 지원합니다.
  • application.properties: 기본적으로 문자열만 지원하며, 다른 데이터 형식은 문자열로 변환해야 합니다.

사용:

  • application.yaml: Spring Boot 2.x 버전부터 기본 설정 파일 형식으로 사용됩니다.
  • application.properties: Spring Boot 1.x 버전에서 기본 설정 파일 형식으로 사용되었으며, 2.x 버전에서도 여전히 사용할 수 있습니다.

선택:

  • 새로운 Spring Boot 프로젝트를 시작하는 경우 application.yaml 사용을 추천합니다.
  • 기존 Spring Boot 1.x 프로젝트를 가지고 있거나 application.properties 형식에 더 익숙한 경우 계속 사용해도 문제 없습니다.

2. application.yaml 포맷 구조

application.yaml 파일은 다음과 같은 구조를 가지고 있습니다.

  • 루트 수준: 설정 키-값 쌍 또는 하위 그룹을 포함할 수 있습니다.
  • 하위 그룹: 들여쓰기를 사용하여 구성되며, 키-값 쌍 또는 다른 하위 그룹을 포함할 수 있습니다.
  • 키-값 쌍: 키: 값 형식으로 구성되며, 키는 문자열이고 값은 다양한 데이터 형식이 될 수 있습니다.
  • 데이터 형식: 문자열, 숫자, 불리언, 배열, 객체 등을 지원합니다.
  • 주석: # 으로 시작하는 행은 주석으로 처리됩니다.

예시:

# 루트 수준 설정
debug: false

# 하위 그룹
logging:
  level:
    com.fc.springprojectboard: debug
    org.springframework.web.servlet: debug
    org.hibernate.type.descriptor.sql.BasicBinder: trace

# 키-값 쌍
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/board
    username: hyeseong
    password: thisisTEST!@#
    driver-class-name: com.mysql.cj.jdbc.Driver

# 하위 그룹 및 키-값 쌍
spring:
  jpa:
    defer-datasource-initialization: true
    hibernate.ddl-auto: create
    show-sql: true
    properties:
      hibernate.format_sql: true
      hibernate.default_batch_fetch_size: 100

# 주석
# 이는 주석입니다.

3. application.yaml에 자주 사용하는 프로퍼티

application.yaml 파일에서 자주 사용하는 프로퍼티 몇 가지를 소개합니다.

  • server.port: 애플리케이션이 실행되는 포트 번호를 설정합니다.
  • spring.datasource.url: 데이터베이스 연결 URL을 설정합니다.
  • spring.datasource.username: 데이터베이스 사용자 이름을 설정합니다.
  • spring.datasource.password: 데이터베이스 사용자 비밀번호를 설정합니다.
  • spring.jpa.hibernate.ddl-auto: Hibernate가 데이터베이스 스키마를 어떻게 처리할지 설정합니다 (예: create, update, none).
  • logging.level.:** 특정 패키지 또는 클래스에 대한 로깅 레벨을 설정합니다 (예: debug, info, warn, error).

4. 제공된 application.yaml 파일 설명

1. 디버깅 설정:

  • debug: false: 전체 애플리케이션에 대한 디버그 로깅을 비활성화합니다.

2. 액추에이터 엔드포인트 노출:

  • management.endpoints.web.exposure.include: "*": 모든 액추에이터 엔드포인트를 HTTP를 통해 노출합니다. 주의: 프로덕션 환경에서는 보안 위험이 될 수 있으므로 특정 엔드포인트만 노출하도록 설정하는 것이 좋습니다.

3. 로깅 설정:

  • logging.level: 애플리케이션의 여러 패키지에 대한 로깅 레벨을 설정합니다.
    • com.fc.springprojectboard: debug: com.fc.springprojectboard 패키지의 로깅 레벨을 debug로 설정합니다.
    • org.springframework.web.servlet: debug: org.springframework.web.servlet 패키지의 로깅 레벨을 debug로 설정합니다.
    • org.hibernate.type.descriptor.sql.BasicBinder: trace: org.hibernate.type.descriptor.sql.BasicBinder 클래스의 로깅 레벨을 trace로 설정합니다.
      • 주의: trace 레벨은 매우 상세한 로깅 정보를 출력하므로 디버깅에만 사용하고, 프로덕션 환경에서는 설정하지 않는 것이 좋습니다.

4. 데이터베이스 연결 설정:

  • spring.datasource: 데이터베이스 연결 정보를 설정합니다.
    • url: jdbc:mysql://localhost:3306/board: MySQL 데이터베이스에 대한 연결 URL을 설정합니다. localhost는 데이터베이스가 실행되는 서버를 의미하며, 3306은 기본 MySQL 포트 번호입니다. board는 사용할 데이터베이스 이름입니다.
    • username: hyeseong: 데이터베이스 사용자 이름을 설정합니다.
    • password: thisisTEST!@#: 데이터베이스 사용자 비밀번호를 설정합니다.
      • 주의: 비밀번호를 직접 입력하는 것은 보안 위험이 될 수 있으므로 환경 변수를 사용하는 것이 좋습니다.
    • driver-class-name: com.mysql.cj.jdbc.Driver: MySQL 연결에 사용할 JDBC 드라이버 클래스 이름을 설정합니다.

5. JPA 설정:

  • spring.jpa: JPA(Java Persistence API) 설정을 정의합니다.
    • defer-datasource-initialization: true: 실제 JPA 엔티티 관리자가 사용될 때까지 데이터 소스 초기화를 지연합니다. 이는 애플리케이션 시작 시간을 개선하는 데 도움이 될 수 있습니다.
    • hibernate.ddl-auto: create: Hibernate가 데이터베이스 스키마를 어떻게 처리할지 설정합니다. create는 테이블이 없으면 생성하고, update는 필요한 경우 테이블을 업데이트하며, none은 테이블을 변경하지 않습니다.
    • show-sql: true: 생성된 SQL 문을 콘솔에 출력합니다. 이는 디버깅에 유용할 수 있습니다.
    • properties: 추가적인 Hibernate 속성을 설정합니다.
      • hibernate.format_sql: true: 출력되는 SQL을 가독성을 위해 형식화합니다.
      • hibernate.default_batch_fetch_size: 100: 엔티티 일괄 fetch 크기의 기본값을 설정합니다. 이는 대용량 데이터 세트에 대한 성능을 향상시킬 수 있습니다.

6. H2 콘솔 설정

  • spring.h2.console.enabled: true: H2 콘솔을 활성화합니다. H2 콘솔은 인 메모리 데이터베이스에 대한 웹 기반 접근을 제공합니다.

7. 데이터베이스 스키마 초기화 모드 설정 

  • spring.sql.init.mode: always: Spring Boot가 시작될 때마다 데이터베이스 스키마를 초기화합니다. 주의: Spring Boot 3에서는 spring.jpa.hibernate.ddl-auto 속성을 사용하여 스키마 초기화를 관리해야 합니다. spring.sql.init.mode는 더 이상 사용되지 않으며, 설정해도 작동하지 않습니다.

Spring Boot 3에서 스키마 초기화 관리:

Spring Boot 3에서는 spring.jpa.hibernate.ddl-auto 속성을 사용하여 스키마 초기화 방식을 설정해야 합니다. 가능한 값은 다음과 같습니다.

  • create: 테이블이 없으면 생성하고, 기존 테이블은 변경하지 않습니다.
  • update: 필요한 경우 테이블을 업데이트하고, 새로운 테이블은 생성하지 않습니다.
  • validate: 테이블 구조가 정의된 스키마와 일치하는지 확인하고, 변경하지 않습니다.
  • none: 스키마를 변경하지 않습니다.

주의 사항:

  • always 모드는 데이터 손실 위험이 있으므로 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.
  • 스키마 변경을 자주 수행하는 경우 create-drop 모드를 사용할 수 있습니다. 이 모드는 시작 시 모든 테이블을 삭제하고 새로 생성합니다.
  • 테이블 구조 변경이 거의 없는 경우 none 모드를 사용하는 것이 좋습니다.

추가 정보:

  • Spring Boot 3 공식 문서: https://docs.spring.io/spring-boot/index.html
  • Spring Boot 3에서 스키마 초기화: https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/howto-database-initialization.html

주의: 위 정보는 일반적인 참고용이며, 실제 애플리케이션에 적용하기 전에 테스트와 조정이 필요할 수 있습니다.

저작자표시 (새창열림)

'프레임워크 > 자바 스프링' 카테고리의 다른 글

콘서트 예매 서비스에서 발생할 수 있는 동시성 이슈와 처리  (0) 2024.07.20
JPA 테스트 코드 작성시 UPDATE Query 생성이 안되네?  (0) 2024.05.28
JPA 연결 테스트 코드  (0) 2024.05.28
로깅 출력 어느 것으로?(feat.Interpolation vs Concatenation)  (0) 2024.04.22
findById vs getReferenceById 차이  (1) 2024.04.22
'프레임워크/자바 스프링' 카테고리의 다른 글
  • JPA 테스트 코드 작성시 UPDATE Query 생성이 안되네?
  • JPA 연결 테스트 코드
  • 로깅 출력 어느 것으로?(feat.Interpolation vs Concatenation)
  • findById vs getReferenceById 차이
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    WebFlux
    reactor
    취업리부트
    파이썬
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    Python
    백준
    Spring WebFlux
    spring
    OOP
    항해99
    자바
    완전탐색
    mybatis
    Spring Boot
    ecs
    docker
    AWS
    그리디
    프로그래머스
    java
    EC2
    Docker-compose
    celery
    FastAPI
    Redis
    RDS
    SAA
    시험
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[그냥 보는] application.yaml
상단으로

티스토리툴바