[Spring Boot] MyBatis란?
MyBatis란?
MyBatis는 객체 지향 언어인 Java의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 도와주는 퍼시스턴스 프레임워크(Persistence Framework, 데이터를 다루는 클래스 및 설정파일 집합)이다. MyBatis는 JDBC를 통해 RDBMS에 액세스하는 작업을 캡슐화하고 기존 JDBC의 중복작업을 간소화해준다. 또한, XML 파일의 형태인 mapper를 통해 프로그램 코드로부터 SQL 쿼리를 분리되는 환경을 제공하고 Java 객체와 매핑하는 작업을 도와준다.
추가적인 특징은 다음과 같다.
- 기존 JDBC보다 사용하기 편리
- 다른 ORM(Object Relational Mapping) 프레임워크에 비해 추가적인 학습의 부담이 적음
- 복잡한 쿼리 또는 다이나믹한 쿼리를 지원
- 프로그램 코드와 SQL 쿼리의 분리로 인한 간결성 및 유지보수성 향상
- 빠른 개발과 생산성의 향상
MyBatis의 DB Access Architecture
기존 JDBC 프로그래밍의 경우 Repository에서 곧바로 JDBC API 쪽으로 접근하여 DB를 연결하였지만, 위의 그림에 나와있듯이 MyBatis를 사용할 경우 Repository와 JDBC API사이에 MyBatis가 위치함으로서 편리한 Access를 제공한다.
MyBatis의 주요 컴포넌트
이름 | 설명 |
MyBatis 설정파일 (mybatis-config.xml) | DB의 접속 정보 또는 Mapping 파일의 경로, alias 등을 설정하는 XML 파일 |
SqlSessionFactoryBuilder | MyBatis 설정파일을 읽고 SqlSessionFactory를 생성 |
SqlSessionFactory | SqlSession을 생성 |
SqlSession | 가장 핵심적인 역할을 SQL의 실행이나 트랜잭션 관리를 수행 Thread-Safe 하지 않으므로 thread 마다 필요에 따라 생성 |
Mapping File (mapper.xml) | SQL과 객체 매핑 설정을 하는 XML 파일 |
MyBatis의 DB Access 순서
어플리케이션 실행 시 시작되는 프로세스는 다음과 같다.
1. 어플리케이션이 SqlSessionFactoryBuilder에게 SqlSessionFactory를 빌드하도록 요청
2. SqlSessionFactoryBuilder는 SqlSessionFactory를 생성하기 위해 MyBatis 설정 파일을 읽음
3. SqlSessionFactoryBuilder는 MyBatis 설정 파일의 정의에 따라 SqlSessionFactory를 생성
클라이언트의 요청에 따라 수행도는 프로세스는 다음과 같다.
4. 클라이언트의 어플리케이션에 대한 요청
5. 어플리케이션은 SqlSessionFactoryBuilder를 사용하여 빌드된 SqlSessionFactory에서 SqlSession을 가져옴
6. SqlSessionFactory는 SqlSession을 생성하고 이를 어플리케이션에 반환
7. 어플리케이션이 SqlSession에서 Mapper Interface 구현 개체를 가져옴
8. 어플리케이션이 Mapper Interface의 메소드를 호출
9. Mapper Interface의 구현 개체가 SqlSession 메소드를 호출하고 SQL 실행 요청
10. SqlSession은 Mapping File에서 실행할 SQL을 찾아서 실행