어플리케이션

자바 개발을 위한 SQL 매퍼 프레임워크인 MyBatis 에 대해 알아보겠습니다.

forward error correction Circle 2025. 7. 7. 08:40
반응형

Ⅰ. MyBatis 란?

 SQL 문과 자바 객체 간 매핑(mapping)을 지원하는 경량의 퍼시스턴스 프레임워크입니다. XML 매퍼 파일 또는 어노테이션 기반으로 SQL을 정의하며, JDBC에서 반복적으로 작성되는 파라미터 바인딩 및 ResultSet 처리 코드를 제거해 개발 생산성을 높입니다. 개발자는 원시 SQL을 그대로 활용하면서도, 보다 간결하고 명확한 데이터 접근 로직을 구현할 수 있습니다.

Ⅱ. MyBatis 특징

 ⅰ. SQL과 코드의 분리
   SQL 문을 XML 파일 또는 어노테이션으로 분리함으로써, SQL을 수정할 때 자바 코드를 다시 컴파일하지 않아도 됩니다.
 ⅱ. 고급 매핑 기능
   단순 필드-컬럼 매핑뿐만 아니라, 중첩 객체(nested objects), 컬렉션(collections), 저장 프로시저 호출 등 복잡한 매핑 로직을

   지원합니다.
 ⅲ. 동적 SQL 지원
  <if>, <choose>, <trim>, <where>, <set>, <foreach>, <bind> 등의 태그를 활용해 조건에 따라 유연하게 SQL을 생성할

   수 있습니다.
 ⅳ. 캐시 메커니즘 내장
   SqlSession 단위의 1차 캐시와 Mapper 단위의 2차 캐시를 제공해, 동일한 쿼리의 반복 실행 시 성능을 향상시킵니다.
 ⅴ. 경량 00아키텍처
   Hibernate와 같은 ORM 프레임워크와 달리 객체 상태를 관리하지 않고, SQL 제어권을 개발자에게 전적으로 위임하여

   유연한 설계를 가능하게 합니다.

Ⅲ. MyBatis 핵심 컴포넌트 및 아키텍처

ⅰ. MyBatis 컴포넌트
MyBatis는 다음의 네 가지 주요 컴포넌트를 중심으로 동작합니다:

컴포넌트 설명
SqlSessionFactoryBuilder mybatis-config.xml 설정 파일을 읽고 SqlSessionFactory를 생성합니다.
SqlSessionFactory 설정 기반으로 SqlSession 객체를 생성하는 팩토리 역할을 수행합니다.
SqlSession SQL 실행, 트랜잭션 처리, 매퍼 프록시 생성 등 핵심 기능을 담당하는 클래스입니다.
Mapper Interface / XML Mapper SQL을 정의하는 XML 파일 또는 어노테이션 기반 인터페이스로, 도메인 메서드 호출 시 지정된 SQL을 실행합니다.

ⅱ. 초기화 및 실행 흐름
  1) 초기화(1~3단계)
      : SqlSessionFactoryBuilder가 mybatis-config.xml을 읽고 SqlSessionFactory를 생성한다.
  2) SQL 실행(4~10단계)
      ■ 애플리케이션이 SqlSessionFactory로부터 SqlSession을 획득
      ■ SqlSession에서 Mapper Interface의 구현체를 가져와 메서드 호출
      ■ SQL 실행, 결과 매핑, 트랜잭션 처리 수행
      ■ 작업 완료 후 SqlSession.close()로 리소스 반환.
ⅲ. Spring 통합 아키텍처
      : Spring 환경에서는 다음 빈(bean)들이 핵심 역할을 담당합니다.
      ■ SqlSessionFactoryBean: Spring이 관리하는 SqlSessionFactory 빈을 생성
      ■ SqlSessionTemplate: Thread-Safe한 SqlSession 구현체로, 트랜잭션 경계 내 세션 관리를 대행
      ■ MapperFactoryBean: 매퍼 인터페이스 구현체를 싱글톤 빈으로 생성·주입
이를 통해 Spring의 DI 및 트랜잭션 관리 기능과 원활히 연동된다
ⅳ. mybatis-config.xml 예시

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

Ⅲ. 동적 SQL 처리

MyBatis는 XML 기반으로 다양한 조건문과 반복문을 지원하여, 유연한 SQL 생성을 가능하게 합니다.

태그 설명
</if test="조건"> 조건이 true일 경우 해당 SQL 조각을 포함
<choose> / <when> / <otherwise> if-else 구조의 조건 분기
<where>  첫 조건에 자동으로 WHERE 추가, AND/OR 정리
<set> UPDATE 문에서 SET 절 구성 시 콤마 처리
<trim> 접두어/접미어 처리 및 불필요한 구문 제거
<foreach> 컬렉션을 반복 처리 (예: IN 절)
<bind> 표현식을 변수에 바인딩하여 재사용

Ⅳ. 캐시 메커니즘

MyBatis는 다음과 같은 2단계 캐시를 제공합니다:

ⅰ. 1차 캐시 (Local Cache)
SqlSession 단위로 적용되며, 동일한 쿼리 결과를 재사용합니다. 기본 활성화 상태입니다.

ⅱ. 2차 캐시 (Global Cache)
Mapper 단위로 설정되며, 여러 세션 간 캐시 공유가 가능합니다. mybatis-config.xml에서 cacheEnabled=true 설정 후, 각 매퍼에 <cache> 태그 추가 필요.

http://m.example.mapper.UserMapper">
  </cache eviction="lru" flushinterval="60000" size="512" readonly="true">
  ...

Ⅴ. Spring 통합

MyBatis는 Spring Framework 및 Spring Boot와의 통합을 통해 다음과 같은 장점을 제공합니다:

ⅰ. MyBatis-Spring 

 : SqlSessionFactoryBean, SqlSessionTemplate을 통해 Spring의 DI 및 트랜잭션 관리 기능을 자연스럽게 활용할 수 있습니다.
ⅱ. MyBatis-Spring-Boot-Starter
 : Spring Boot에서 설정을 자동화하여, 설정 파일과 빈 등록을 최소화할 수 있습니다.

반응형