안녕하세요 오랜만에 돌아왔습니다. 좋은 소식은 뭐 없는거 같구요 소홀해진 티스토리에 대한 포스팅 좀 더 열심히 올려보도록 노력하겠습니다.
이래저래 바쁘다보니 포스팅에대한 다짐이 좀 더 소홀해졌던거 같습니다.
각설하고 바로 Mybatis에 대해서 알아보겠습니다.
MyBatis의 기본 정의란?
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크입니다.
아무래도 저희는 JPA를 많이 쓰다보니 헷갈릴수도있겠습니다.
먼저 JPA란 ORM기술 표준으로 사용되는 인터페이스의 모음이라고들 흔히 알고있죠 ?
근데 여기선 JPA는 ORM, Mybatis는 SQL Mapper라는 Persistence Framework를 사용하고 있다고 생각하시면 됩니다.
SQL Mapper란?
Object와 SQL의 필드를 매핑하여 데이터를 객체화 하는 기술 !
- 객체와 테이블 간의 관계를 매핑하는 것이 아닙니다!(중요)
- SQL문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할지 바인딩 하는 방법
- DBMS에 종속적인 문제
- EX) JdbcTemplate, MyBatis
맞아요 ORM을사용하는 JPA는 객체와 테이블 간의 관계를 매핑해줌으로 좀 더 편하게 사용할수 있다면 SQL Mapper을 사용하는 Mybatis는 좀 대규모 DB에서 성능이 좋게끔 흘러 갈수 있다라고 생각해주시면됩니다.
Mybatis의 특징 => MyBatis : Object Mapping 기술
- 자바에서 SQL Mapper를 지원해주는 프레임워크
- SQL문을 이용해서 RDB에 접근, 데이터를 객체화 시켜줌
- SQL을 직접 작성하여 쿼리 수행 결과를 객체와 매핑
- 쿼리문을 xml로 분리 가능 => 프로그램 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성이 향상됩니다.
- 복잡한 쿼리문 작성 가능 => 다이나믹한 쿼리에 강한 특징, 하지만 비슷한 쿼리를 남발하게 되는 단점이 존재함.
- 데이터 캐싱 기능으로 성능 향상
- but 객체와 쿼리문 모두 관리해야함, CRUD 메소드를 직접 다 구현해야함.
MyBatis의 기본동작 방식

1. Application Modules 계층에서 Service가 Mapper(Repository, Mapper.xml)을 실행한다.
기본적으로 우리가 알고있는 Service 계층에서 JPA를 불러내는것과 마찬가지라고 생각하면될거같다.
2. O/R Mapper 에서 Mybatis-3와 Mybatis-Spring 을 불러내어 xml에 기재되어있는 CRUD 구문을 읽어 들인다.
그러니 xml 파일을 읽는다는 부분인데, 만일 이런부분이 존재하지않았다면 ?
=> 개발자 스스로 JDBC와 Application을 잇는 JDBC API 을 사용하여 Connection을 만들어줘야하고 SQL을 실행하기위한 PreparedStatement 객체를 생성하여 사용해야했을것이다. 이를 Mybatis가 자동으로 실행해주는 역할인것 같다.
Mybatisd의 주요 컴포넌트

Processing to run once
1. 첫 시작은 (4)의 Application에서 시작한다. 이는 SqlSession Factorhy Builder를 사용하여 SqlSessionFactory를 생성하기 위해 사용되는 빌더 클래스 라고 보면된다. (Application을 최초 실행시를 의미함, 개발자의 request 하는것이 아님)
2. 이 Builder들은 (2),(3)의 파일을 읽고 만드는 역할을 한다.
❗️(나의 궁금함을 해소)
SQLSESSIONFACTORY! 너 왜필요한데?
한번의 DB 연결을 위해선 SqlSession을 사용한다. 우리가 흔히 말하는 DB Connection 같은경우에는 단순힌 물리적인 네트워크를 연결을 의마한다면? SqlSession은 RDB에 인증을 거친 논리적인 연결 상태를 의미한다.
???? 이게 무슨말인가도 싶다. 하지만 우리가 물리적인 네트워크를 연결을 마구잡이로 한다면 누가 누구인지 잘 모르는 상태에서 연결이된다면 대혼란이 올것이다. 즉 URL, ID, PASSWORD, 캐싱정책의 사용유무 등을 따져서 DB를 연결할 수 있게끔 만드는 역할을 할수도 있다. 하지만 매번 sqlsession을 사용할 때마다 매번 많은 정보들을 항상 부를수 없다. 이러한 설정값들을 한곳에 모아놓고 그 모아놓은 곳에서 객체를 가져오는 것이 효율적인데 이것이 SqlSessionFactory 이다
하지만 SqlSessionFactory이 존재하기위해선 객체를 만들어줘야하는데 너무나도 많은 생성자 인자때문에 가독성에 문제가 생긴것이다. 그래서 생긴게 SqlSessionFactoryBuilder라고 할수있다. 빌더 클래스를 사용하여 SqlSessionFactory를 만든다음 SqlSession들을 관리하는 것이다.( 최초 1회시 한번 쓰이고 마는 객체)
Processing to run per requests
1. Application 호출 즉 데이터베이스에 접속해야하는 read, update, save 등등의 기능이 필요한 메서드를 호출하는 것이다. (최초 실행이 아닌 개발자가 필요한 service를 호출할때를 의미한다)
2. SqlSessionFactory를 애플리케이션 상에서 호출한다.
3. SqlSessionFactory가 SqlSession컴포넌트를 생성한다.
4. SqlSession은 애플리케이션에서 제공하는 메서드를 사용하여 SQL 매핑 파일에 정의 된 SQL문을 실행하게 된다. 여기서 데이터 베이스와의 실제 연결이 이루어지며 SQL문이 실행된다.
우리는 이번에 Mybatis의 기본정의, JPA와의 차이(조금) Mybatis의 동작 방식 및 컴포넌트에 대해서 공부했습니다. 이번 기회에 Mybatis의 기본 동작 방식에 대해 알아봤으니 다음 챕터에는 SQL 쿼리에 대해서 공부를 좀 더해보겠습니다.
'💻Computer Science > DB' 카테고리의 다른 글
| [DB] Oracle - Join의 이해 (0) | 2025.04.23 |
|---|---|
| [DB] 오라클 기초 문법 - 1 (0) | 2025.04.23 |