๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Boot์™€ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์ž„๋ฒ ๋””๋“œ DB ํ™œ์šฉ ๊ฐ€์ด๋“œ

mrmount 2024. 10. 21.

 

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋Š” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์ž„๋ฒ ๋””๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ, Spring Boot์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ํ…Œ์ŠคํŠธ์™€ ๊ฐœ๋ฐœ์— ์ตœ์ ํ™”๋œ ํ™˜๊ฒฝ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ• , H2 ์ฝ˜์†” ์‚ฌ์šฉ๋ฒ• ์„ ์•Œ์•„๋ณด๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ์‹œ ์ž„๋ฒ ๋””๋“œ DB๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์„ ์ฝ”๋“œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 


 

 

๋ชฉ์ฐจ

  1. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. Spring Boot์—์„œ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •ํ•˜๊ธฐ
  3. H2 ์ฝ˜์†” ์‚ฌ์šฉ๋ฒ• ( http://localhost:8080/h2-console )
  4. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ž„๋ฒ ๋””๋“œ DB ํ™œ์šฉํ•˜๊ธฐ
  5. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋ Œ๋“œ์™€ ์žฅ์ 

 


 

1. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋Š” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ ๋ฅผ ์ง€์›ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฃผ์š” ํŠน์ง•

  • ๋น ๋ฅธ ์‹คํ–‰ ์†๋„ : ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ์ž„๋ฒ ๋””๋“œ ๋ชจ๋“œ ์ง€์› : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— ํ†ตํ•ฉ ๊ฐ€๋Šฅ
  • SQL ํ‘œ์ค€ ์ค€์ˆ˜ : ์ผ๋ฐ˜์ ์ธ SQL ๋ฌธ๋ฒ•์„ ๋ชจ๋‘ ์ง€์›
  • H2 ์ฝ˜์†” ์ œ๊ณต : ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฐ€๋Šฅ

H2๋Š” ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‚˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

2. Spring Boot์—์„œ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •ํ•˜๊ธฐ

 

์˜์กด์„ฑ ์ถ”๊ฐ€ (pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
  • spring-boot-starter-data-jpa : JPA ๊ธฐ๋Šฅ ์ œ๊ณต
  • h2 : H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜์กด์„ฑ ์ถ”๊ฐ€

์„ค์ • ํŒŒ์ผ ์ž‘์„ฑ (application.properties)

# H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
  1. spring.datasource.url : ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ
  2. spring.h2.console.enabled=true : H2 ์ฝ˜์†” ํ™œ์„ฑํ™”
  3. spring.jpa.hibernate.ddl-auto=update : ์—”ํ„ฐํ‹ฐ ๋ณ€๊ฒฝ ์‹œ ํ…Œ์ด๋ธ” ์ž๋™ ๊ฐฑ์‹ 

 


 

3. H2 ์ฝ˜์†” ์‚ฌ์šฉ๋ฒ• ( http://localhost:8080/h2-console )

Spring Boot์—์„œ H2 ์ฝ˜์†”์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

H2 ์ฝ˜์†” ์ ‘์† ๋ฐฉ๋ฒ•

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ ํ›„ http://localhost:8080/h2-console ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  2. JDBC URL ์— jdbc:h2:mem:testdb ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. Username ์€ sa , Password ๋Š” ๋น„์›Œ๋‘ก๋‹ˆ๋‹ค.
  4. Connect ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

H2 ์ฝ˜์†” ํ™”๋ฉด๊ณผ ์‚ฌ์šฉ๋ฒ•

  • ์ฟผ๋ฆฌ ์‹คํ–‰ ์ฐฝ ์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

4. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ž„๋ฒ ๋””๋“œ DB ํ™œ์šฉํ•˜๊ธฐ

H2๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” JUnit ํ…Œ์ŠคํŠธ ์—์„œ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์˜ˆ์ œ: User ์—”ํ„ฐํ‹ฐ CRUD ํ…Œ์ŠคํŠธ

 

User.java (์—”ํ„ฐํ‹ฐ)

package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User {

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

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
}

 

UserRepository.java (๋ ˆํฌ์ง€ํ† ๋ฆฌ)

package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

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

 

UserRepositoryTest.java (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ)

package com.example.demo;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void ์‚ฌ์šฉ์ž_์ €์žฅ_๋ฐ_์กฐํšŒ() {
        // ์‚ฌ์šฉ์ž ์ €์žฅ
        User user = new User("ํ™๊ธธ๋™", "hong@example.com");
        userRepository.save(user);

        // ์‚ฌ์šฉ์ž ์กฐํšŒ
        Optional<User> foundUser = userRepository.findById(user.getId());

        // ๊ฒ€์ฆ
        assertThat(foundUser).isPresent();
        assertThat(foundUser.get().getName()).isEqualTo("ํ™๊ธธ๋™");
    }
}

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์„ค๋ช…

  1. SpringBootTest ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. User ์—”ํ„ฐํ‹ฐ ๋ฅผ ์ €์žฅํ•˜๊ณ , Repository๋ฅผ ํ†ตํ•ด ์กฐํšŒ ํ•ฉ๋‹ˆ๋‹ค.
  3. AssertJ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

5. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋ Œ๋“œ์™€ ์žฅ์ 

  • H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋Š” ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ ๋ฅผ ์œ„ํ•œ ์ž„๋ฒ ๋””๋“œ DB๋กœ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์‚ฌ๋ž‘๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Statista ์˜ ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด, ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž์˜ 45% ๊ฐ€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • H2 ๋Š” ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ๋„ ํ™œ์šฉ๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 


 

๊ด€๋ จ ๋งํฌ


Spring ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต์‹ ์‚ฌ์ดํŠธ๐Ÿ‘†

Spring Boot์™€ JPA ๊ฐ€์ด๋“œ๐Ÿ‘†

H2 ์ฝ˜์†” ์‚ฌ์šฉ๋ฒ•๐Ÿ‘†

JUnit 5 ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

AssertJ ๊ณต์‹ ์‚ฌ์ดํŠธ๐Ÿ‘†




FAQ

 

1. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‚˜์š”?

  • ์ฃผ๋กœ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ณผ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‹คํ–‰๊ณผ ๊ฐ„ํŽธํ•œ ์„ค์ •์ด ์žฅ์ ์ž…๋‹ˆ๋‹ค.

2. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ ์ €์žฅ๋˜๋‚˜์š”?

  • ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. H2 ์ฝ˜์†”์— ์ ‘์†ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

  • application.properties ํŒŒ์ผ์—์„œ spring.h2.console.enabled=true ๋กœ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

4. ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋„ H2๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  • ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณดํ†ต MySQL, PostgreSQL ๊ฐ™์€ RDBMS ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. H2๋Š” ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

5. JPA์™€ H2์˜ ์กฐํ•ฉ์ด ์œ ์šฉํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

  • JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ” ์ƒ์„ฑ๊ณผ ๋งคํ•‘์„ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๊ณ , H2๋Š” ๋น ๋ฅด๊ฒŒ ์ด๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 


 

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Spring Boot์™€ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ๋กœ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, JPA์™€์˜ ์กฐํ•ฉ ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, H2 ์ฝ˜์†” ์„ ํ™œ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฉฐ ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

H2๋Š” ์šด์˜ ํ™˜๊ฒฝ ๋ณด๋‹ค๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, JUnit๊ณผ ํ•จ๊ป˜ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ H2๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋ฉด, ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ H2์™€ JPA๋ฅผ ํ™œ์šฉํ•ด CRUD ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€