MyBatis
Java 객체와 SQL문 사이의 자동 매핑 기능을 지원하는 Persistence Framework다.
SQL을 별도의 파일로 분리해서 관리하며, 객체와 SQL 간의 파라미터 매핑 작업을 자동으로 처리한다.
✅ Persistence Framework
- 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다.
MyBatis 특징
- 간단하고 직관적인 Persistence Framework다.
- SQL을 그대로 사용할 수 있다.
Spring MyBatis Core Component
DataBase Access Architecture
위 이미지는 MyBatis와 MyBatis-Spring을 사용하여 데이터베이스에 접근하는 구조를 보여준다.
각 계층의 역할은 다음과 같다.
계층 | 설명 |
Application Modules | Repository (Mapper) - Service 계층에서 전달된 요청을 구체적으로 처리하는 계층이다. - MyBatis 매퍼 파일을 통해 SQL을 실행할 준비가 되어 있으며, 데이터베이스와의 매핑을 담당한다. |
O/R Mapper | MyBatis3 / MyBatis-Spring - MyBatis는 O/R 매퍼로, XML 또는 애노테이션으로 작성된 SQL 구문을 사용해 객체와 관계형 데이터베이스 간 매핑을 제공한다. - MyBatis-Spring은 Spring 프레임워크와의 통합을 지원하여 트랜잭션 관리와 같은 Spring의 기능을 쉽게 사용할 수 있다. |
JDBC Interface | JDBC Basic APIs - JDBC(Java Database Connectivity)는 Java 애플리케이션에서 데이터베이스와 통신할 수 있도록 도와주는 API다. - MyBatis는 이러한 JDBC API를 사용하여 SQL 구문을 데이터베이스에 전달하고 결과를 받아온다. DataSource - 데이터베이스 연결을 관리하는 구성 요소다. - Spring에서는 DataSource를 빈으로 구성하여 쉽게 관리할 수 있다. |
JDBC Implementation | JDBC Driver - 특정 데이터베이스(예: MySQL, Oracle 등)에 맞는 JDBC 드라이버를 사용하여 데이터베이스에 직접 연결한다. - JDBC API를 사용하여 실행된 SQL 구문은 JDBC 드라이버를 통해 데이터베이스에 전달된다. |
Persistence Layer | Database - 실제 데이터가 저장되는 데이터베이스다. - JDBC 드라이버를 통해 SQL 구문이 실행되고 결과가 반환된다. |
Data Access Layer
위 이미지는 MyBatis 프레임워크를 기반으로 한 Data Access Layer 구조를 보여준다.
전반적인 흐름은 간단하므로, MyBatis 관점에서 내부 구조를 살펴보자.
구조 | 설명 |
sqlSession | - MyBatis의 핵심 인터페이스로, 데이터베이스와 상호작용하는 데 필요한 메서드를 제공한다. - SQL 쿼리를 실행하고 트랜잭션을 관리할 수 있으며, 데이터베이스와의 연결을 유지하는 역할을 한다. - SQL Session Object는 Tread-Safe하지 않으므로 Thread 마다 필요에 따라 생성한다. |
SqlSessionFactory | - sqlSession 객체를 생성하는 팩토리. - MyBatis는 이 팩토리를 통해 SQL 세션을 관리하며 필요한 만큼 세션을 만들 수 있다. |
sqlMapConfig.xml | - 이 파일에는 데이터베이스 연결 정보, 매퍼 파일의 위치, 환경 설정 등이 포함될 수 있다. - MyBatis가 초기화될 때 읽히며 SqlSessionFactory가 이 파일을 참조하여 세션을 생성한다. |
mapper.xml | - SQL 문을 정의하고 데이터베이스와의 매핑을 설정하는 XML 파일이다. - 각 매퍼 파일에는 SQL 쿼리와 매핑이 포함되어 있으며, 특정 엔티티에 대한 데이터베이스 작업을 정의한다. |
dbinfo.properties | - 데이터베이스 연결에 필요한 정보를 저장한 속성 파일이다. - 데이터베이스 URL, 사용자명, 비밀번호 등이 포함될 수 있다. |
MyBatis-Spring Core Component
파일 | 설명 |
MyBatis Config File | - DTO 객체의 정보를 설정한다. |
SqlSessionFactoryBean | - MyBatis Config File을 바탕으로 SqlSessionFactory를 생성한다. - Spring Bean 등록이 필요하다. |
SqlSessionTemplate | - 핵심적인 역할을 하는 클래스로서 SQL 실행이나 트랜잭션을 관리한다. - SqlSession Interface를 구현하며 Thread-Safe하다. - Spring Bean 등록이 필요하다. |
Mapping File | - SQL문과 ORMapping을 설정한다. |
Spring Bean Config File | - SqlSessionFactoryBean을 Bean에 등록할 때 DataSource 정보, MyBatis Config File 정보, Mapping File 정보를 함께 설정한다. - SqlSessionTemplate를 Bean으로 등록한다. |
Mapper Interface
Mapper Interface는 매핑 파일에 기재된 SQL을 호출하기 위한 인터페이스다.
MyBatis 3.x부터는 Mapper Interface를 사용하여 SQL을 호출하는 프로그램을 Type Safe 하게 기술할 수 있다.
매핑 파일에 있는 SQL을 자바 인터페이스를 통해 호출할 수 있다.
Mapper Interface를 사용하지 않은 경우
SQL을 호출하는 프로그램은 SqlSession 메서드의 인자로 문자열로 namespace + "." + SQL ID를 지정해야 한다.
문자열로 지정하기 때문에 오타에 의한 버그가 발생할 수 있고, IDE에서 제공하는 코드 자동 완성 기능을 사용할 수 없다.
Mapper Interface를 사용한 경우
UserMapper와 같은 인터페이스를 개발자가 작성하고, namespace와 SQL ID를 해당 인터페이스와 메서드에 맞게 설정한다.
- packagename + "." + InterfaceName + "." + methodName이 namespace + "." + SQL ID가 되도록 한다.
- namespace 속성에는 패키지를 포함한 Mapper Interface의 이름을 작성하며, SQL ID에는 매핑되는 메서드의 이름을 지정한다.
'Dev > DataBase' 카테고리의 다른 글
『DataBase』 Oracle SQL 중급 문법 (1) | 2024.11.18 |
---|---|
『DataBase』 Oracle SQL 기초 문법 (2) | 2024.11.18 |
『DataBase』 MyBatis 문법 (0) | 2024.11.01 |
『DataBase』 대용량 데이터를 마이그레이션 할 때 무엇을 고려해야 할까 1️⃣편 (0) | 2024.08.20 |
『DataBase』 Legacy Query 성능 개선 과정 (0) | 2024.07.25 |