Ⅰ. 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에서 설정을 자동화하여, 설정 파일과 빈 등록을 최소화할 수 있습니다.
'어플리케이션' 카테고리의 다른 글
큐싱(Qshing)에 대해 알아보겠습니다. (0) | 2025.06.25 |
---|---|
HTTP Flood 공격에 대해 알아보겠습니다. (0) | 2025.06.20 |
이메일(e-mail) 전송 흐름에 대해 알아보겠습니다. (0) | 2025.06.13 |
쿠키, 캐시, 세션이 무엇이고, 왜 중요한지 알아보겠습니다. (1) | 2025.06.12 |
JDBC(Java Database Connectivity)에 대해 알아보겠습니다. (2) | 2025.06.10 |