[java] MyBatis에서 인메모리 데이터베이스 사용하기

MyBatis는 자바 개발자들이 SQL 데이터베이스와 상호 작용하기 위해 사용하는 인기 있는 ORM(Object-Relational Mapping) 프레임워크입니다. MyBatis를 사용하면 데이터베이스에 대한 복잡한 쿼리를 작성하고 실행하는 것을 간편하게 할 수 있습니다. 이번 블로그에서는 MyBatis에서 인메모리 데이터베이스를 사용하는 방법을 살펴보겠습니다.

인메모리 데이터베이스란?

인메모리 데이터베이스는 데이터를 메모리에 저장하여 빠르고 효율적인 데이터 처리를 가능하게 하는 데이터베이스 시스템입니다. 디스크에 저장하는 대신, 모든 데이터가 RAM에 저장되기 때문에 I/O 작업 없이 바로 접근할 수 있습니다. 이러한 특성으로 인해 인메모리 데이터베이스는 테스트 환경에서 많이 사용되며, 성능이 중요한 애플리케이션에서도 자주 사용됩니다.

MyBatis에서 H2 인메모리 데이터베이스 사용하기

H2는 자바 기반의 인메모리 데이터베이스로, MyBatis에서 사용하기에 이상적입니다. MyBatis는 H2 데이터베이스를 지원하기 위해 별도의 라이브러리를 제공하며, 이를 사용하면 간편하게 인메모리 데이터베이스를 설정할 수 있습니다.

1. H2 라이브러리 추가

먼저, 프로젝트의 의존성에 H2 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
    <scope>test</scope>
</dependency>

2. MyBatis 설정 파일 작성

다음으로, MyBatis 설정 파일에 H2 데이터베이스를 설정해야 합니다. 일반적으로 mybatis-config.xml 파일을 사용하지만, 필요에 따라 다른 파일 이름으로 작성할 수도 있습니다. 다음은 H2 데이터베이스를 설정하는 예시입니다:

<configuration>
    <environments default="h2">
        <environment id="h2">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.h2.Driver"/>
                <property name="url" value="jdbc:h2:mem:test"/>
                <property name="username" value="sa"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
</configuration>

위 설정에서는 H2 드라이버와 인메모리 데이터베이스의 URL, 사용자 이름 및 비밀번호를 설정하고 있습니다.

3. MyBatis DAO 인터페이스 작성

H2 데이터베이스에 액세스하기 위한 MyBatis DAO(Data Access Object) 인터페이스를 작성해야 합니다. 이 인터페이스는 MyBatis가 SQL 쿼리를 실행할 수 있는 메서드를 정의하게 됩니다. 다음은 예시입니다:

public interface UserDao {
    
    @Select("SELECT * FROM users")
    List<User> getAllUsers();
    
    @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
    void addUser(User user);
    
    // 다른 메서드들...
}

4. MyBatis Mapper 파일 작성

DAO 인터페이스에 정의된 메서드와 SQL 쿼리를 매핑하기 위해 MyBatis Mapper 파일을 작성해야 합니다. Mapper 파일은 DAO 인터페이스와 SQL 쿼리의 매핑 정보를 가지고 있으며, XML 형식으로 작성됩니다. 다음은 예시입니다:

<mapper namespace="com.example.dao.UserDao">
    
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users
    </select>
    
    <insert id="addUser">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>
    
    <!-- 다른 쿼리들... -->
</mapper>

5. MyBatis 세션 및 트랜잭션 사용

마지막으로, MyBatis 세션과 트랜잭션을 사용하여 데이터베이스에 액세스하고 쿼리를 실행할 수 있습니다. 다음은 예시입니다:

// MyBatis 설정 파일을 로드
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// SqlSessionFactory로부터 SqlSession 생성
SqlSession sqlSession = sqlSessionFactory.openSession();

try {
    // DAO 인터페이스를 매퍼와 연결
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    
    // 쿼리 실행
    List<User> users = userDao.getAllUsers();
    
    // 결과 출력
    for (User user : users) {
        System.out.println(user.getName() + " - " + user.getEmail());
    }
} finally {
    // 세션 닫기
    sqlSession.close();
}

이렇게 하면 MyBatis에서 H2 인메모리 데이터베이스를 사용할 수 있습니다. 인메모리 데이터베이스를 사용함으로써 개발 및 테스트 과정에서 빠르고 효율적으로 데이터베이스와 상호 작용할 수 있습니다.

참고 자료