[Spring] 13. DB 연동

Dami·2025년 4월 26일

스프링 DB연동

  • Spring 프레임워크는 기본적으로 Persistence Layer(데이터 저장소 관리)를 담당하는 기술을 직접 제공하지 않는다.
  • MyBatis, Hibernate(JPA) 같은 ORM/SQL 매퍼를 Spring 환경에 통합해 사용한다.
  • MyBatis는 JDBC보다 개발자가 SQL을 직접 제어할 수 있게 하면서도,
    객체 ↔ 데이터베이스 간 매핑(Mapping) 작업을 간결하게 지원하는 SQL Mapper다.
  • Spring은 MyBatis를 직접 호출하지 않고, MyBatis-Spring이라는 통합 라이브러리를 통해 Bean 관리, 트랜잭션 관리를 일관되게 통합한다.

필요한 의존성

1. JDBC 드라이버

  • DB 연결을 위한 Java 표준 드라이버 라이브러리
  • 사용하는 DB 종류에 따라 다르게 설정
<!-- 예시: MySQL 연결 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

✏️ Oracle을 사용하는 경우, ojdbc11.jar 또는 Maven Repository에서 추가한다.


2. Connection Pool 라이브러리

  • 데이터베이스 연결 객체(Connection)를 매번 생성하지 않고 풀링(Pooling) 하여 재사용한다.
  • 성능 최적화
라이브러리특징
commons-dbcp2전통적인 커넥션 풀, Spring 3.x ~ 4.x 시대에 많이 사용
HikariCPSpring Boot 2.x 기본 내장. 경량/고성능 커넥션 풀

예시: HikariCP

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

3. MyBatis 및 MyBatis-Spring

  • SQL Mapping과 Persistence를 담당하는 핵심 라이브러리
  • MyBatis-Spring을 통해 Spring의 빈 관리 및 트랜잭션 연동 지원
<!-- MyBatis 본체 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.14</version>
</dependency>

<!-- MyBatis-Spring 통합 모듈 -->
<dependency>
    <groupId>org.mybatis.spring</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.1.1</version>
</dependency>

Spring + MyBatis 연동 구조

흐름

DataSource (커넥션 풀)
    ↓
SqlSessionFactory (MyBatis SQL 실행 객체 생성)
    ↓
SqlSessionTemplate (Spring이 관리하는 SqlSession)
    ↓
Mapper Interface (DAO 역할)
    ↓
Service (비즈니스 로직 계층)

스프링은 DataSource를 통해 커넥션 풀을 관리하고,

MyBatis는 SqlSessionFactory를 통해 SQL을 실행하고,

Spring이 SqlSessionTemplate을 통해 트랜잭션을 일관되게 묶음.


설정 파일 구성

root-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--   
		Servlet/JSP
		- Commons DBCP
		- Tomcat Connection Pool > 수업 사용
		- context.xml > Resource 등록
		
		스프링 > DBCP 사용 권장
		- Commons DBCP
		- HikariCP > 스프링 부트 기본 DBCP
		
	 -->
<!--  Commons DBCP 설정  -->
<!--  
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
		<property name="username" value="spring"></property>
		<property name="password" value="1234"></property>
	</bean> 
	 -->
<!--  HikariCP  -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<!--  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property>  -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="spring"/>
<property name="password" value="1234"/>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<!--  MyBatis 설정  -->
<!--  SqlSessionTemplate 생성 도구(+환경 설정)  -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mappers/*.xml"/>
<property name="configLocation" value="classpath:config/mybatis-config.xml"/>
</bean>
<!--  쿼리 실행 도구  -->
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sessionFactory"/>
</bean>
</beans>

0개의 댓글