본문 바로가기
Backend/JPA

테스트를 위한 H2 Database + Spring Data JPA 구성 방법

by 개발자-제이 2025. 4. 18.

참고용 QueryDSL 설정

2025.03.13 - [Backend/JPA] - JPA (Spring Data JPA) - Spring Boot 3+ QueryDSL 및 JPA 기본 설정, p6spy 로깅 방법

1. 아래 내용을 진행하기에 앞서 H2 데이터베이스 설치 (운영체제에 맞게 설치)

https://www.h2database.com/html/main.html

2. 설치 후, h2 데이터베이스 실행

설치된 h2 데이터베이스 경로에서 bat 파일 실행해주기

  • h2\bin 이동 -> h2.bat 클릭하여 실행

  • 터미널 명령어를 통해 실행
  • h2 디렉토리 bin 폴더 경로로 이동 후(예: cd /h2/bin) 아래 명령어 입력
    • .\h2.bat

 

3. 실행 후, h2 콘솔이 띄워지면 도메인명 localhost로 변경

 

4. 위까지 진행하고 연결을 누르면, db 파일이 로컬에 설치되고 콘솔창이 열린다. 데이터베이스 파일이 만들어지고 나면, tcp를 통해서 접속해야한다.

연결 해제

tcp로 연결

연결 후, 콘솔창이 나오면 아래 설정을 진행

1. 전체 구성 개요

Spring Boot에서 H2 인메모리 데이터베이스와 Spring Data JPA를 함께 사용하는 설정은 개발 및 테스트 환경에서 매우 유용하게 사용된다. 이 조합은 빠른 실행, 쉬운 설정, 웹 기반 콘솔 제공 등의 장점을 갖고 있으며, 별도의 외부 데이터베이스 없이도 데이터 처리 로직을 손쉽게 검증할 수 있다.


2. Gradle 의존성 추가

build.gradle 또는 build.gradle.kts 파일 내에 다음과 같은 의존성을 추가하면 된다.

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

spring-boot-starter-data-jpa는 JPA 관련 자동 설정을 포함하며, com.h2database:h2는 H2 데이터베이스 드라이버를 제공한다.


3. application.yml 설정

application.yml 파일에서 데이터베이스 설정과 JPA 관련 옵션을 다음과 같이 구성할 수 있다.

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

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
속성 설명
spring.datasource.url DB 접속 URL
spring.datasource.driver-class-name JDBC 드라이버 클래스
spring.datasource.username DB 사용자 이름
spring.datasource.password DB 비밀번호
spring.jpa.database-platform Hibernate에서 사용할 DB Dialect
spring.jpa.hibernate.ddl-auto 테이블 자동 생성/업데이트 옵션 (create, update, validate, none)
spring.jpa.show-sql SQL 실행 로그 출력 여부
spring.jpa.properties.hibernate.format_sql SQL 문을 보기 좋게 출력

4. Entity 클래스 작성

JPA를 통해 매핑되는 Entity 클래스는 다음과 같이 정의할 수 있다.

@Entity
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String role;
}

@Entity를 통해 JPA가 관리하는 테이블로 매핑되며, @Id와 @GeneratedValue로 기본 키를 정의한다.


5. Repository 인터페이스 작성

JPA를 통해 DB 작업을 수행하기 위해 JpaRepository를 상속받는 Repository를 작성한다.

public interface MemberRepository extends JpaRepository<Member, Long> {
    Member findByUsername(String username);
}

Spring Data JPA는 메서드 이름만으로도 쿼리를 자동 생성하는 기능을 제공한다.


6. 테스트용 초기 데이터 등록

애플리케이션 실행 시 테스트용 데이터를 자동으로 삽입하려면 다음과 같이 구성할 수 있다.

@Component
@RequiredArgsConstructor
public class InitData {

    private final MemberRepository memberRepository;

    @PostConstruct
    public void init() {
        memberRepository.save(Member.builder().username("admin").role("ADMIN").build());
        memberRepository.save(Member.builder().username("user").role("USER").build());
    }
}

이 클래스는 애플리케이션 실행 직후 자동으로 실행되어 초기 데이터를 DB에 저장한다.


마무리 정리

항목 설명
사용 목적 빠른 개발/테스트용 DB 환경 구성
DB 설정 In-memory 방식 (H2), 웹 콘솔 포함
Entity/Repository 구성 Spring Data JPA를 통한 CRUD 처리
콘솔 접근 /h2-console URL에서 DB 확인 가능
자동 테이블 생성 ddl-auto 옵션을 통해 제어 가능
반응형