MyBatis 개념 정리 (1)

이종현·2022년 6월 28일
0

MyBatis

목록 보기
4/5

MyBatis 공부 겸 내용을 정리중입니다.
혹시 틀린 내용이 있다면 피드백 주시면 감사합니다.

목차
0. Persistence Framework
1. MyBatis란 ?
2. Mybatis 동작 원리
3. Mybatis를 통한 CRUD
4. 동적 쿼리

Persistence Framework

Mybatis는 Persistence Framework 기술 중 하나인데, Mybatis에 대해 들어가기 전 Persistence Framework이 무엇인지 간단히 알아보자

Persistence
- Persistence란 영속성 이란 뜻으로 프로그램이 종료되어도 데이터 상태가 유지되는 것을 말한다.
- 프로그램에서 데이터를 저장할때는 이 영속성을 지켜야한다. (재기동하면 날라가 버리니..)
- 자바에서 Persistence를 부여할수 있는 데이터 저장 기술로는 JDBC, Spring JDBC, Persistence Framework(SQL Mapper, ORM)가 있다.

Persistence Framework 종류

  • SQL Mapper
    - SQL 쿼리를 통해 직접 DB에 접근하여 데이터를 다룬다.
    • 예) Mybatis
    • ORM
      • 객체를 통해 간접적으로 DB를 다룬다.
      • 아직 ORM은 공부하지않아서 추후 업데이트 하려고한다.
      • 예) JPA, Hibernate

Mybatis란 ?

Myabtis란 ?

  • 자바에서 데이터를 다루는 기술 중 하나로, JDBC 작업을 간편하게 도와주는 DB 프로그래밍 프레임 워크이다. (Persistence Framework)

Mybatis와 기존 JDBC 차이점

  • JDBC API란
    • 자바에서 제공하는 API로 데이터베이스에 접근하여 쿼리를 수행할수 있게 해주는 로우레벨의 데이터를 다루는 기술
    • 1개의 클래스마다 DB 연결 및 해제, SQL 쿼리, Java 코드가 모두 존재해서 재사용성이 떨어진다는 단점이 존재한다.
  • RDB의 데이터 양이 많아지고 관계 복잡해지면서 다수의 메소드를 호출하거나 그에 따른 관리가 어려워진다는 문제가 있다.
    • 이에따라 쿼리가 자바 소스 코드와 완전히 분리되고 재사용성이 좋은 Mybatis를 많이 사용하게 되었다.

Mybatis 특징

  • JDBC로 처리하는 파라미터 설정 및 결과 매핑 기능을 대신해준다.
  • SQL문이 코드의 완전한 분리되어서 가독성이 좋다.
    • 기존 JDBC는 DAO파일에 자바 코드와 SQL문이 담겨져 있었다면, MyBatis에서는 XML 파일 에 SQL 코드를 작성하고 필요할때마다 가져와 사용한다.
  • 서비스 로직에서 특정 메소드가 필요할때마다 가져다 사용할수 있기 때문에 재사용성이 좋다.
  • 쿼리문을 자바 메소드처럼 구성해서 유지보수성을 높일 수 있다. (동적쿼리를 잘 활용하자)
  • SQL의 입력 파라미터와 수행 결과를 객체(Map, DTO)로 자동 Mapping 해준다.

Mybatis 동작 예시 및 원리

간단한 동작 예시

  1. 라이브러리 추가 (Dependency)
    • Mybatis와 사용하고자하는 DB 클라이언트 (Mysql, Oracle, MariaDB 등)
  2. Config 파일에 접속정보(DataSource) 설정
  3. 매퍼 인터페이스를 생성한다.
  4. 위의 인터페이스 경로로 namespace를 가지는 xml 파일 생성
  5. xml 파일에 CRUD 쿼리를 작성한다.
  6. 매퍼 인터페이스에 5번에 작성한 메소드를 매핑시킨다. (인터페이스 메소드명과 쿼리 ID는 동일하게 맞춰야함)
  7. 서비스 로직에서 매퍼 인터페이스를 주입 받아서 특정 쿼리 메소드를 사용한다.

내부 동작 원리

내부 동작 원리는 Spring 프레임워크가 기동 될때와 클라이언트가 특정 동작을 요청할때로 나뉜다.

  • 프로그램 시작 시 수행되는 프로세스
    • SqlSessionFactoryBuilder가 설정파일을 읽어와서 SqlSession을 생성하기위한 SqlSessionFactory를 생성한다.
    • 이렇게 생성된 SqlSessionFactory는 Spring DI 컨테이너에 저장된다.
  • 클라이언트 요청 시 수행
    • 특정 쿼리 수행요청이 들어옴
    • SqlSessionFactory가 SqlSession을 생성하고 애플리케이션에 반환한다.
    • 애플리케이션이 매퍼 인터페이스 객체를 가져온다. (@Autowired)
    • 매퍼 인터페이스 객체가 SqlSession 메소드를 통해 XML 파일에 있는 SQL을 실행한다.
profile
백엔드 개발자의 소소한 개발 기록.

0개의 댓글