본문 바로가기
Dev/DataBase

『DataBase』 MyBatis 내부 구조

by 세대교체 2024. 11. 1.

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에는 매핑되는 메서드의 이름을 지정한다.