[SpringBoot] SpringBoot H2 데이터베이스 설정

2022. 11. 21. 21:45문제해결

1. 의존성 추가

gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.projectlombok:lombok:1.18.24'
    runtimeOnly 'com.h2database:h2'
}

 

2. h2 데이터베이스 설정

application.yml에 "local", "dev" 프로파일 그룹을 생성한 다음 "testdb" 프로파일에 h2 데이터베이스 설정을 하겠습니다.

spring:
  profiles:
    group:
      "local": "testdb"
      "dev": "testdb"

---
spring:
  config:
    activate:
      on-profile: "testdb"

  datasource:
    url: jdbc:h2:mem:test
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    defer-datasource-initialization: true
    database-platform: org.hibernate.dialect.H2Dialect

  sql:
    init:
      data-locations: "classpath*:/data.sql"
      mode: always

  h2:
    console:
      enabled: true
      path: /h2-console
      settings.trace: false
      settings.web-allow-others: false

jpa:
  hibernate:
    ddl-auto: create

  properties:
    hibernate:
      format_sql: true
  • "local"과 "dev" 프로파일 그룹은 "testdb" 프로파일을 사용합니다.
  • spring.datasource.url = jdbc:h2:mem:test : 인 메모리 저장소 방식으로 연결하여 실행동안만 메모리에 데이터를 일시적으로 저장하여 데이터베이스 역할을 수행하게 합니다.
  • h2 데이터베이스 username=sa, password는 없음으로 설정합니다.
  • spring.jpa.defer-datasource-initialization=true : 기본적으로 data.sql 스크립트는 하이버네이트 초기화가 되기전에 실행되기 때문에 하이버네이트에 의해 스키마가 생성된 이후에 data.sql 스크립트를 실행하도록 합니다.
  • spring.h2.console.enabled=true : 내장된 h2 데이터베이스를 GUI로 보기 위해서 콘솔창을 활성화시킵니다. 기본적으로 비활성화되어 있기 때문에 콘솔창을 보기 위해서는 true로 설정하여야 합니다.
  • spring.h2.console.path=/h2-console : h2 데이터베이스 콘솔창에 접근하기 위한 경로를 설정합니다.
    • 접근시 "http://localhost:8080/h2-console"과 같은 형식으로 접근합니다.
  • spring.h2.settings.trace=false : trace 출력을 노출시키지 않기 위해서 false로 설정합니다.
  • spring.h2.settings.web-allow-others=false : 원격 접근을 비활성화합니다.

 

3. h2 데이터베이스 초기화

3.1 resources/data.sql 파일에 샘플 데이터 삽입 스크립트를 작성합니다.

INSERT INTO MEMBER (NAME) VALUES('김용환');
INSERT INTO MEMBER (NAME) VALUES('홍길동');

 

3.2 MEMBER 엔티티 클래스를 정의합니다.

@Entity(name = "member")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_id")
    private Long id;
    private String name;
}

 

4. h2-console 열기

4.1 애플리케이션 실행 시 프로파일을 "local"로 설정하고 실행

 

4.2 브라우저 검색창에 다음과 같이 입력하여 h2-console 창을 실행합니다.

http://localhost:8080/h2-console

Connect 버튼 클릭시 다음과 같이 실행시 샘플 데이터 초기화된 결과를 볼 수 있습니다.

 

References

Spring Boot With H2 Database