[Spring] Spring Boot 에서 H2 database 사용법 , application.yml 설정

hyewon jeong·2023년 5월 28일
1

Spring

목록 보기
42/65
post-custom-banner

H2 database

  • 인메모리 데이터 베이스로 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다.
  • 테스트 용으로 주로 사용한다.
  • spring boot 에서
  • 스프링 부트에는 H2 데이터베이스가 내장되어 있어 별도의 설치 없이 의존성 추가와 application.yml 설정으로 사용가능하다.

1. build.gradle에 H2 dependency 추가

    dependencies {
        // H2
        runtimeOnly 'com.h2database:h2'
    }

2. application.yml에 H2 설정 추가

spring:
  # Redis
  data:
    redis:
      host: localhost
      port: 6379
      timeout: 6
  # H2 Setting Info (H2 Console에 접속하기 위한 설정정보 입력)
  h2:
    console:
      enabled: true  # H2 Console을 사용할지 여부 (H2 Console은 H2 Database를 UI로 제공해주는 기능)
      path: /h2-console  # H2 Console의 Path
  # Database Setting Info (Database를 H2로 사용하기 위해 H2연결 정보 입력)
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:db;MODE=MYSQL
    username: sa
    password:
  jpa:
    generate-ddl: 'true'
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        #  show_sql: true
        format_sql: true
        use_sql_comments: true # sql 과 함께 jpql 주석처리되어  콘솔창에 출력


jwt:
  secret:
    key: 7ZWt7ZW0OTntmZTsnbTtjIXtlZzqta3snYTrhIjrqLjshLjqs4TroZzrgpjslYTqsIDsnpDtm4zrpa3tlZzqsJzrsJzsnpDrpbzrp4zrk6TslrTqsIDsnpA=

#logging.level:
#  org.hibernate.SQL: debug
#  org.hibernate.type: trace 로그에 다음을 추가하기 org.hibernate.type : SQL 실행 파라미터를 로그로 남긴다.//이거대신 p6spy외부라이브러리가 더 깔끔함



    

2-1. H2 Setting Info (H2 Console에 접속하기 위한 설정정보 입력)

 # H2 Setting Info (H2 Console에 접속하기 위한 설정정보 입력)
  h2:
    console:
      enabled: true  # H2 Console을 사용할지 여부 (H2 Console은 H2 Database를 UI로 제공해주는 기능)
      path: /h2-console  # H2 Console의 Path
  jpa:
    generate-ddl: 'true'
    hibernate:
      ddl-auto: create

jpa.hibernate.ddl-auto 속성은 Hibernate가 데이터베이스 스키마를 생성 또는 수정하는 방식을 지정하는데 사용됩니다.

값으로 none을 설정하면 Hibernate는 자동으로 스키마를 생성 또는 수정하지 않는다. 즉, 데이터베이스의 스키마 변경 작업을 자동으로 수행하지 않고, 애플리케이션의 모델과 데이터베이스의 스키마가 일치해야 합니다. 따라서 이 설정을 사용하면 Hibernate의 자동 DDL 기능을 비활성화할 수 있다.

ddl-auto 속성은 다른 값들로 설정할 수도 있다.

  • create: Hibernate가 애플리케이션 시작 시에 데이터베이스 스키마를 삭제하고 다시 생성합니다. 이 설정은 개발 및 테스트 환경에서 유용할 수 있다. 다만, 이미 존재하는 데이터베이스에는 사용되지 않는 것이 좋다.
  • create-drop: Hibernate가 애플리케이션 시작 시에 데이터베이스 스키마를 생성하고, 애플리케이션 종료 시에 스키마를 삭제합니다. 주로 테스트용으로 사용되며, 애플리케이션 실행 중에 데이터베이스의 내용이 삭제됩니다.
  • update: Hibernate가 애플리케이션 시작 시에 데이터베이스 스키마를 검사하고 변경 사항을 자동으로 업데이트합니다. 기존 테이블은 유지되며, 변경된 엔티티나 추가된 엔티티는 데이터베이스에 반영됩니다. 다만, 기존 데이터베이스 스키마와 애플리케이션의 모델 간의 일관성을 유지하기 위해 주의해야 합니다.
  • validate: Hibernate가 애플리케이션 시작 시에 데이터베이스 스키마를 검사하고, 애플리케이션의 모델과 스키마가 일치하는지 확인합니다. 다만, 변경 사항을 자동으로 반영하지 않으며, 불일치가 발생한 경우 예외가 발생합니다.

이 설정은 개발, 테스트, 배포 등의 환경에 따라 적절한 값을 선택하여 사용할 수 있습니다. 개발 환경에서는 none 또는 create를 사용하는 것이 일반적이며, 운영 환경에서는 주로 none이나 validate를 사용하여 스키마 변경을 수동으로 관리

2-2. Database Setting Info (Database를 H2로 사용하기 위해 H2연결 정보 입력)

    
      datasource:
        driver-class-name: org.h2.Driver  # Database를 H2로 사용하겠다.
        url: jdbc:h2:mem:testdb  # H2 접속 정보
        username: sa  # H2 접속 시 입력할 username 정보 (원하는 것으로 입력)
        password:  # H2 접속 시 입력할 password 정보 (원하는 것으로 입력)
  • spring.datasource.url 속성은 H2 접속 정보로
  • jdbc:h2:mem:testdbH2 인메모리 데이터베이스를 사용하고, 데이터베이스의 식별자를 testdb로 지정한다.
  • jdbc:h2:mem:db;MODE=MYSQL
    H2 데이터베이스가 메모리에 db라는 이름으로 생성되며, MySQL 호환 모드로 동작합니다. 이 모드에서는 MySQL 문법과 동일한 문법을 사용할 수 있다. 예를 들어, 테이블 생성에 사용되는 DDL 문이 MySQL 스타일로 사용될 수 있다.

로그 출력 설정

참고: 모든 로그 출력은 가급적 로거를 통해 남겨야 한다.

show_sql : 옵션은 System.out 에 하이버네이트 실행 SQL을 남긴다.
org.hibernate.SQL : 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다.

쿼리 파라미터 로그 남기기
로그에 다음을 추가하기 org.hibernate.type : SQL 실행 파라미터를 로그로 남긴다.이 옵션보단 외부 라이브러리 사용하면 더 깔끔하게 출력가능하다.

스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하 게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.

쿼리 파라미터 로그 남기기 - 스프링 부트 3.0
스프링 부트 3.0 이상을 사용하면 라이브러리 버전을 1.9.0 이상을 사용해야 한다.

    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
profile
개발자꿈나무
post-custom-banner

0개의 댓글