Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240924 H2 데이터베이스 사용법 본문

개발Article

[TIL]20240924 H2 데이터베이스 사용법

최밤빵 2024. 9. 24. 23:30

H2 데이터베이스 사용법

개발을 하게되면 여러 가지 데이터베이스(DB)를 다룰 필요가 있다. 특히 로컬에서 애플리케이션을 개발하고 테스트할 때는 경량화된 인메모리(In-Memory) 데이터베이스가 유용한데, 그 중에서 H2 데이터베이스라는 걸 알게되면서, 이번 개발일지를 통해 H2 데이터베이스의 개념과 설정 방법, 그리고 실제 사용 예시를 만들어봤다. 

 

▶H2 데이터베이스란?

H2 데이터베이스는 경량화된 오픈 소스 관계형 데이터베이스로, 인메모리 방식과 디스크 저장 방식을 모두 지원한다. 데이터베이스 데이터를 메모리에만 저장하거나, 파일로 저장할 수 있다. H2는 JDBC API를 통해 쉽게 접근할 수 있고, Spring Boot 같은 프레임워크에서 테스트용 데이터베이스로 자주 사용된다. 주요 특징은 다음과 같다.

 

→ 빠른 속도:

메모리에 데이터를 저장하기때문에 매우 빠른 속도로 데이터 접근이 가능하다.

→ 경량성:

작은 크기의 경량 데이터베이스로, 설치나 설정이 간단하다.

→ 웹 콘솔 제공:

데이터베이스를 직접 조회하고 조작할 수 있는 웹 기반 콘솔을 제공한다.

→ 테스트에 적합:

애플리케이션 개발 중, 테스트 환경에서 데이터베이스를 쉽게 사용할 수 있어서 개발 및 테스트에 유리하다.

 

▶ H2 데이터베이스 설정하기

H2 데이터베이스는 주로 Spring Boot 환경에서 많이 사용된다. Spring Boot 프로젝트에 H2 데이터베이스를 설정하는 방법은 간단하다.

 

Gradle에서 H2 의존성 추가

먼저 build.gradle 파일에 H2 데이터베이스 의존성을 추가 한다. 

dependencies {
    implementation 'com.h2database:h2'
    runtimeOnly 'com.h2database:h2'
    // Spring Boot 관련 다른 의존성들 생략!
}

→ H2 데이터베이스가 프로젝트에 추가된다. 이후 애플리케이션이 실행될 때 H2 데이터베이스가 함께 시작된다.

 

▷ application.properties 또는 application.yml 파일 설정

다음으로 src/main/resources 폴더에 있는 application.properties 또는 application.yml 파일에 H2 데이터베이스 설정을 추가한다. Spring Boot는 기본적으로 H2 데이터베이스를 쉽게 사용할 수 있도록 설정을 제공하므로, 필요한 최소 설정을 추가하면 된다.

# H2 데이터베이스 설정
# 메모리 상에 testdb라는 이름으로 H2 데이터베이스 생성
spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# H2 웹 콘솔 활성화
spring.h2.console.enabled=true
# H2 웹 콘솔 접속 경로
spring.h2.console.path=/h2-console

# Hibernate 설정
spring.jpa.hibernate.ddl-auto=update

# 애플리케이션 포트 설정
server.port=8082

→ 위 설정은 인메모리 모드로 H2 데이터베이스를 설정한 예시로, H2의 웹 콘솔을 /h2-console 경로로 활성화해 데이터베이스 상태를 쉽게 확인할 수 있다.

 

▷ H2 웹 콘솔 접속하기

H2 웹 콘솔을 사용하면 데이터베이스 상태를 쉽게 조회하거나 직접 SQL 쿼리를 실행할 수 있다. 애플리케이션을 실행한 후 브라우저에서 http://localhost:8082/h2-console로 접속하면 H2 웹 콘솔 화면이 나타난다. 여기서 다음과 같은 정보로 로그인할 수 있다.

 

application.properties 또는 application.yaml 에 설정한

  • JDBC URL: jdbc:h2:mem:testdb
  • User Name: [기본값은 sa]
  • Password: [빈칸]

로그인 후, SQL 쿼리 등을 직접 실행해볼 수 있다.

 

▶ H2 데이터베이스를 사용한 실제 예시

Spring Boot 프로젝트에서 H2 데이터베이스를 사용하는 코드를 작성해 보았다. 아래는 간단한 사용자 관리 애플리케이션에서 H2 데이터베이스를 사용하는 예시이다. 이 예시에서는 Dto를 생략하고, set 메서드도 사용하지 않으며, get 메서드만 포함했다.

 

▷ User 엔티티 클래스

package com.sparta.testreview.user.entity;

import jakarta.persistence.*;
import lombok.Getter;

@Entity
@Getter
@Table(name = "users")  // 테이블 이름을 users로 변경 (SQL 예약어이기 때문에 테이블 이름으로 바로 사용할 수 없다.)
public class User {

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

    private String name;

    private String email;

    // 기본 생성자
    public User() {}

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    // 사용자 정의 생성자 (필요 시 사용)
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
}

 

▷ UserRepository 인터페이스

package com.sparta.testreview.user.repository;

import com.sparta.testreview.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

 

▷ UserService 클래스

package com.sparta.testreview.user.service;

import com.sparta.testreview.user.entity.User;
import com.sparta.testreview.user.repository.UserRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User createUser(String name, String email) {
        User user = new User(name, email);  // Dto 대신 직접 값 전달
        return userRepository.save(user);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

 

▷ UserController 클래스

package com.sparta.testreview.user.controller;

import com.sparta.testreview.user.entity.User;
import com.sparta.testreview.user.service.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    public ResponseEntity<User> createUser(@RequestParam String name, @RequestParam String email) {
        User createdUser = userService.createUser(name, email);
        return ResponseEntity.ok(createdUser);
    }

    @GetMapping
    public ResponseEntity<List<User>> getAllUsers() {
        List<User> users = userService.getAllUsers();
        return ResponseEntity.ok(users);
    }
}

 

▷ Spring Boot 애플리케이션 실행 클래스

package com.sparta.testreview;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class H2DatabaseExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(H2DatabaseExampleApplication.class, args);
    }
}

 

▷ application.properties 설정 파일

# H2 데이터베이스 설정
# 메모리 상에 testdb라는 이름으로 H2 데이터베이스 생성
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# H2 웹 콘솔 활성화
spring.h2.console.enabled=true
# H2 웹 콘솔 접속 경로
spring.h2.console.path=/h2-console

# Hibernate 설정
spring.jpa.hibernate.ddl-auto=create

# 애플리케이션 포트 설정
server.port=8082

→ 이 코드를 통해 Spring Boot 애플리케이션에서 H2 데이터베이스를 사용해 사용자 데이터를 관리할 수 있다. 애플리케이션이 실행된 후, H2 웹 콘솔에 접속하여 http://localhost:8082/h2-console에서 데이터베이스 상태를 확인할 수 있다.

 

▶ H2 데이터베이스의 장점과 단점

 

▷장점:

→ 빠른 속도:

인메모리 모드를 사용하면 매우 빠른 데이터 접근 속도를 제공한다.

→ 경량성:

매우 가볍고, 설정이 간단하여 테스트와 개발에 적합하다.

→ 웹 콘솔 제공:

H2 웹 콘솔을 통해 SQL 쿼리를 직접 실행하고 데이터베이스 상태를 쉽게 확인할 수 있다.

→ 쉽게 설정 가능:

Spring Boot 프로젝트에서 손쉽게 설정하고 사용할 수 있다.

 

▷단점:

→ 데이터 휘발성:

인메모리 모드를 사용할 경우, 애플리케이션이 종료되면 데이터가 사라진다. 따라서 실제 운영 환경에서는 파일 모드를 사용하는 것이 좋다. (재실행하면 초기화된다.) 

→ 대규모 데이터 처리 한계:

H2는 경량 데이터베이스이기 때문에, 대규모 데이터 처리나 복잡한 쿼리 처리에는 적합하지 않다.

 

▶결론

H2 데이터베이스는 경량이면서도 빠르고, 개발 및 테스트 환경에서 매우 유용하게 사용할 수 있는 데이터베이스이다. 특히 Spring Boot와의 호환성이 좋고, 설정이 간편하기 때문에 애플리케이션을 개발할 때 빠르게 DB 환경을 구성할 수 있다... 웹 콘솔 열리는걸 첨부해야되는데.. 절대 안 열리는중 ㅠㅠㅠ  계속해보고 성공하면 추가할 예정 .....!