개요
평소 회사에서 MyBatis를 주로 사용해 업무를 하는데, 자세한 동작 원리가 궁금해져서 공부한 내용을 정리하고자 한다.
MyBatis (Persistence Framework)
목차
0. Persistence Framework
1. MyBatis란 ?
2. Mybatis 동작 원리
3. Mybatis를 통한 CRUD
4. 동적 쿼리
Persistence Framework
Mybatis는 Persistence Framework 기술 중 하나인데, Mybatis에 대해 들어가기 전 Persistence Framework이 무엇인지 간단히 알아보자
✅ Persistence란 ?
Persistence란 영속성 이란 뜻으로 프로그램이 종료되어도 데이터 상태가 유지되는 것을 말한다.
프로그램에서 데이터를 저장할때는 이 영속성을 지켜야한다. (재기동하면 날라가 버리니..)
그래서 프로그램을 개발할 때 이 Persistence를 유지하기 위해 데이터 저장 기술을 사용하는데
자바에서 Persistence를 부여할수 있는 데이터 저장 기술로 JDBC, Spring JDBC, Persistence Framework(SQL Mapper, ORM을 사용한다.
✅ Persistence Framework 종류
1. SQL Mapper
SQL 쿼리를 통해 직접 DB에 접근하여 데이터를 다룬다. (예) Mybatis)
2. ORM
객체를 통해 간접적으로 DB를 다룬다. (예) JPA, Hibernate)
Mybatis란 ?
Myabtis란 자바에서 데이터를 다루는 기술 중 하나로, JDBC 작업을 간편하게 도와주는 DB 프로그래밍 프레임 워크이다. (Persistence Framework)
✅ Mybatis와 기존 JDBC 차이점
JDBC API란 자바에서 제공하는 API로 데이터베이스에 접근하여 쿼리를 수행할수 있게 해주는 로우레벨의 데이터를 다루는 기술이다.
JDBC API 방식은 1개의 클래스마다 DB 연결 및 해제, SQL 쿼리, Java 코드가 모두 존재해서 재사용성이 떨어진다는 단점이 존재한다.
현대화 되면서 RDB의 데이터 양이 많아지고 관계 복잡해지면서 다수의 메소드를 호출하거나 그에 따른 관리가 어려워진다는 문제가 발생했고
이에따라 쿼리가 자바 소스 코드와 완전히 분리되고 재사용성이 좋은 Mybatis를 많이 사용하게 되었다.
✅ Mybatis 특징
Mybatis는 JDBC로 처리하는 파라미터 설정 및 결과 매핑 기능을 대신해주는 장점이 있다.
SQL문이 코드의 완전한 분리되어서 가독성이 좋고 (기존 JDBC는 DAO파일에 자바 코드와 SQL문이 담겨져 있었다면, MyBatis에서는 XML 파일 에 SQL 코드를 작성하고 필요할때마다 가져와 사용한다.)
서비스 로직에서 특정 메소드가 필요할때마다 가져다 사용할수 있기 때문에 재사용성이 좋다.
또한 쿼리문을 자바 메소드처럼 구성해서 유지보수성을 높일 수 있고, SQL의 입력 파라미터와 수행 결과를 객체로 자동 Mapping 해준다는 장점이 있다.
Mybatis 동작 예시 및 원리
✅ 간단한 동작 순서
- 라이브러리 추가 (Mybatis와 사용하고자하는 DB 클라이언트 (Mysql, Oracle, MariaDB 등)의 종속성)
- Config 파일에 접속정보(DataSource) 설정
- 매퍼 인터페이스를 생성한다.
- 위의 인터페이스 경로로 namespace를 가지는 xml 파일 생성
- xml 파일에 CRUD 쿼리를 작성한다.
- 매퍼 인터페이스에 5번에 작성한 메소드를 매핑시킨다. (인터페이스 메소드명과 쿼리 ID는 동일하게 맞춰야함)
- 서비스 로직에서 매퍼 인터페이스를 주입 받아서 특정 쿼리 메소드를 사용한다.
✅ 내부 동작 원리
내부 동작 원리는 Spring 프레임워크가 기동 될때와 클라이언트가 특정 동작을 요청할때로 나뉜다.
1. Spring 프레임워키 기동 시 수행되는 프로세스
- SqlSessionFactoryBuilder가 설정파일을 읽어와서 SqlSession을 생성하기위한 SqlSessionFactory를 생성한다.
- 이렇게 생성된 SqlSessionFactory는 Spring DI 컨테이너에 저장된다.
2. 클라이언트 요청 시 수행되는 프로세스
- 특정 쿼리 수행요청이 들어온다.
- SqlSessionFactory가 SqlSession을 생성하고 애플리케이션에 반환한다.
- 애플리케이션이 매퍼 인터페이스 객체를 가져온다. (@Autowired)
- 매퍼 인터페이스 객체가 SqlSession 메소드를 통해 XML 파일에 있는 SQL을 실행한다.
'Study > MyBatis' 카테고리의 다른 글
[Mybatis] 1:N 레코드 한번에 조회하기 (resultMap의 Collection 사용) (0) | 2022.11.04 |
---|---|
[Mybatis] XML파일에서 부등호 사용 방법 (CDATA) (0) | 2022.07.20 |