Spring Framework는 Java 애플리케이션에서 데이터베이스와의 원활한 연결을 관리하기 위해 다양한 방법을 제공합니다.
그 중에서도 HikariCP는 고성능 JDBC 커넥션 풀 라이브러리로 유명하며,
MyBatis는 SQL 매퍼 프레임워크로 SQL 처리 및 객체 매핑을 간편하게 할 수 있게 돕습니다.
이번 포스트에서는 Spring 환경에서 HikariCP와 MyBatis를 설정하고, 효율적으로 데이터베이스 연결을 관리하는 방법에 대해 설명합니다.
1. HikariCP 설정 (고성능 JDBC 커넥션 풀)
HikariCP란?
HikariCP는 Java 애플리케이션에서 데이터베이스와의 연결을 효율적으로 관리하는 커넥션 풀 라이브러리입니다. 성능과 경량성에서 우수한 평가를 받으며, 고성능 애플리케이션에서 필수적인 자원 관리 기능을 제공합니다.
HikariCP 설정 예시
Spring의 XML 설정 파일에서 HikariCP를 설정하는 방법은 다음과 같습니다.
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="spring" />
<property name="password" value="spring" />
</bean>
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig" />
</bean>
HikariCP 주요 설정 항목
- driverClassName: 사용하려는 데이터베이스의 JDBC 드라이버 클래스명을 지정합니다.
- jdbcUrl: 데이터베이스에 연결할 JDBC URL을 설정합니다.
- username 및 password: 데이터베이스 연결을 위한 사용자명과 비밀번호입니다.
HikariCP는 설정 후 자동으로 커넥션 풀을 관리하여 성능을 최적화하며, 데이터베이스 연결에 드는 시간과 자원을 최소화합니다.
2. Spring과 MyBatis 통합 설정
MyBatis는 SQL과 Java 객체 간의 매핑을 처리하는데 특화된 프레임워크로, 복잡한 SQL 작업을 간단하게 수행할 수 있게 도와줍니다. Spring과 MyBatis를 통합하여, 효율적인 데이터베이스 연동을 구현할 수 있습니다.
MyBatis 설정 파일 (root-context.xml
)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 데이터베이스 설정 파일 외부화 -->
<bean id="DBproperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/db-config/application.properties" />
</bean>
<!-- HikariCP 데이터베이스 커넥션 풀 설정 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="${ds.driverclassname}" />
<property name="jdbcUrl" value="${ds.jdbcurl}" />
<property name="username" value="${ds.username}" />
<property name="password" value="${ds.password}" />
</bean>
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- MyBatis SqlSessionFactory 설정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds" />
<property name="configLocation" value="classpath:/mybatis-config/sql-mapper-config.xml" />
<property name="mapperLocations" value="classpath:/sqlmap/*.xml" />
</bean>
<!-- MyBatis Mapper 스캔 -->
<mybatis-spring:scan base-package="com.simple.basic.*" />
</beans>
설정 항목 설명
- DBproperties: 데이터베이스 연결 정보를 외부 파일 (
application.properties
)에서 읽어옵니다. - HikariCP 설정: HikariCP를 사용하여 고성능 JDBC 커넥션 풀을 설정합니다.
- SqlSessionFactory 설정: MyBatis에서 SQL 세션을 관리하는
SqlSessionFactory
를 설정합니다. 데이터소스와 함께 MyBatis 설정 파일 및 매퍼 파일 위치를 지정합니다. - MyBatis Mapper 스캔:
@Mapper
어노테이션이 붙은 인터페이스를 자동으로 스캔하여 MyBatis 매퍼로 등록합니다.
3. MyBatis 설정 파일: mybatis-config.xml
MyBatis의 설정 파일에서 typeAliases
와 mapUnderscoreToCamelCase
와 같은 옵션을 활용하면 코드의 가독성을 높이고, 매핑 과정을 간편하게 할 수 있습니다.
mybatis-config.xml
예시
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 언더스코어를 카멜케이스로 변환 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<!-- 타입 별칭 설정 -->
<typeAliases>
<typeAlias type="com.simple.basic.command.ScoreVO" alias="ScoreVO"/>
</typeAliases>
</configuration>
주요 설정 항목
mapUnderscoreToCamelCase
: 데이터베이스 컬럼명이 언더스코어(_
)로 구분되어 있을 때 이를 자동으로 Java 객체의 카멜케이스(camelCase
)로 변환해주는 설정입니다.
위 SQL 쿼리는 자동으로SELECT first_name, last_name FROM users
firstName
,lastName
필드로 매핑됩니다.- 예시:
typeAliases
: 자주 사용하는 클래스에 별칭을 부여하여 SQL 맵퍼 파일에서 더 간편하게 참조할 수 있도록 합니다. 예를 들어ScoreVO
클래스에 대해ScoreVO
라는 별칭을 설정하면, 이후 SQL 매퍼에서 해당 별칭을 사용해 클래스를 참조할 수 있습니다.
4. MyBatis Mapper 파일 설정
MyBatis의 SQL 매퍼 파일에서 typeAlias
를 사용하여 별칭으로 클래스 이름을 간편하게 참조할 수 있습니다. 또한, 자동으로 매핑되는 필드들에 대해서도 직관적인 코드 작성이 가능합니다.
scoreMapper.xml
예시
<mapper namespace="com.simple.basic.mapper.ScoreMapper">
<select id="selectScore" resultType="ScoreVO">
SELECT * FROM scores WHERE id = #{id}
</select>
</mapper>
ScoreVO
클래스 예시
public class ScoreVO {
private String firstName;
private String lastName;
// getters and setters
}
이처럼 MyBatis를 활용하면 SQL 쿼리 결과를 자동으로 객체에 매핑할 수 있어 코드 작성이 간편해지고, 유지보수가 용이해집니다.
5. Spring과 MyBatis 통합 테스트
Spring에서 MyBatis를 통합하여 실제 데이터베이스와의 연동을 테스트하는 방법을 소개합니다. 이 테스트는 데이터베이스 연결 풀과 MyBatis 설정이 정상적으로 작동하는지 확인할 수 있습니다.
테스트 클래스 예시
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml")
public class JdbcTest {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Test
public void testConnection() {
try (SqlSession session = sqlSessionFactory.openSession()) {
assertNotNull(session);
System.out.println("Connection successful");
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 테스트는 SqlSessionFactory
가 정상적으로 작동하는지 확인하는 간단한 예시입니다.
이번 포스트에서는 Spring, HikariCP, MyBatis를 연동하여 효율적인 데이터베이스 연결 풀 관리 및 SQL 매핑을 구현하는 방법에 대해 설명했습니다.
이 설정을 통해 고성능 애플리케이션을 개발할 수 있으며, 데이터베이스와의 상호작용을 최적화할 수 있습니다.
- HikariCP는 데이터베이스 커넥션 풀을 효율적으로 관리하여 성능을 극대화합니다.
- MyBatis는 SQL 쿼리와 객체 간의
- 매핑을 간편하게 처리할 수 있도록 도와줍니다.
- Spring을 사용하여 이러한 기술들을 통합함으로써 효율적이고 관리하기 쉬운 애플리케이션을 구축할 수 있습니다.
이 설정을 잘 활용하면 데이터베이스와의 연결 관리가 최적화되어 성능이 향상되고, 코드 가독성 또한 높아집니다.
'🗄️ Backend > Spring' 카테고리의 다른 글
Spring Boot 기초: 웹 애플리케이션 설정 (0) | 2024.11.10 |
---|---|
스프링 프레임워크에서 Redirect, Request, Response 처리 및 서비스 계층 구현 (8) | 2024.11.09 |
스프링 프레임워크(Spring Framework) 기본 개념과 활용 (3) | 2024.11.09 |