서버/Mybatis

MyBatis 사용이유 및 Mapping 방식 (Interface와 Class 차이)

피노키오이 2021. 8. 11. 14:17
반응형

참고자료

 

https://jung-story.tistory.com/121

 

Mybatis 개념 및 컴포넌트 구성 요소

Mybatis란? Java에서 DB 프로그래밍을 하기 위해서 JDBC가 제공되고 있습니다. JDBC RDB 사용을 위한 다양한 API를 제공하지만, 데이터가 방대하지고 각 데이터들의 관계가 복잡해짐에 따라서 다수의 메

jung-story.tistory.com

 


개요

 

우리나라에서는 대부분의 웹프로젝트에서는 Mybatis를 이용하여 DB의 쿼리문을 수행하는걸로 알고 있습니다.

그러나 이러한 Mybatis를 왜 사용하고 있는지 왜 Interface로 선언하며 어떻게 매핑되는지 정확한 개념을 헷갈릴 경우가 있습니다. 

이번에 정리를 하면서 Mybatis의 사용이유의 명확한 개념과 Interface로 사용할 경우와 Class로 사용할 경우 둘다 비교해보고 어떠한 상황에 무엇을 사용해야 할 지 알아 보도록 하겠습니다.

 


각각의 Layer

 

프레젠테이션 계층 (Presentation layer) - UI 계층 (UI layer) 이라고도 함

애플리케이션 계층 (Application layer) - 서비스 계층 (Service layer) 이라고도 함

비즈니스 논리 계층 (Business logic layer) - 도메인 계층 (Domain layer) 이라고도 함

데이터 접근 계층 (Data access layer) - 영속 계층 (Persistence layer) 이라고도 함

 


Persistance Framework

 

  • Persistence Layer에서 개발하는 Framework
  • jdbc 프로그래밍에 비해 간단한 작업만으로 데이터베이스와의 연동과 개발 보장한다.
  • dbms에 대한 종속성이 줄어든다. 유지보수가 쉬우며 직관적이다.
  • Framework는 sql Mapper와 orm으로 구성되어 있다. sql Mapper와는 다르게 orm은 관계형구조를 가지며 sql mapper는 쿼리으로 동작하지만 orm은 메서드로 데이터를 조작할 수 있다.

 


Mybatis

 

  • sql Mapper 중 하나
  • jdbc로 처리하는 코드의 설정(Connection) 부분을 줄이고 실제 sql문에 연결함으로서 빠른 개발이 가능하게 한다.
  • 해당 코드는 map 인터페이스와 매핑을 위한 xml과 annotation을 사용한다.
  • 따른 방식에 비해 객체자체보다 쿼리에 집중할 수 있다.

 


Mybatis를 이용한 Mapping 방식.

 

Mybatis 가 어떻게 Spring boot의 xml과 mapping이 되는가?

 

Mybatis를 사용하려면 크게 4가지를 정의해야 한다.

  1. 쿼리문을 정의한 mapper.xml 파일
  2. Mapper.xml를 java코드에서 실행시키는 Mapper Class or interface (Mapper.java)
  3. 쿼리의 결과데이터를 담는 중간 매개 Class (보통 VO)
  4. 위의 3개의 위치를 알려주는 설정

 

Interface를 이용하여 사용하는 방식.

  • Mapper.xml 과 Mapper.java를 연결해주는 방식은 NameSpace와 각 쿼리문의 id의 조합임.
  • 쿼리문의 id의 값은 Mapper.java에서 인터페이스로 만들어 놓은 메소드명과 일치해야함.

 


Interface 와 Class 방식 각각의 장단점

 

Class 사용

  • 장점
    • 쿼리문 실행 전에 넣어줄 매개변수와 쿼리 결과값의 변형을 정의할 수 있다.
    • Namespace를 내 마음대로 둘 수 있다.
    • .xml 파일의 쿼리문 idmapper 메소드명을 일치시킬 필요가 없다.
  • 단점
    • Sqlsession 객체를 주입받아야 하며, 쿼리문 실행 시 항상 호출해야 한다.
    • 쿼리문 호출 시 sqlsession.xml 파일의 namespce와 쿼리문 id를 매개변수로 넘겨야한다.

 

Interface 사용

  • 장점
    • 메소드의 내부 구현이 불필요하다.
    • Sqlsession 객체 주입이 불펼요하다.
    • .xml 파일의 쿼리문 idmapper 메소드 명이 일치한다.
  • 단점
    • .xml Namespace가 실제 Mapper.java 위치를 가르켜야 한다.
    • 메소드 내부 정의가 불가능하다.

 


결론

이렇게 각각의 장단점을 보았을 때 프로젝트가 크거나 유지보수가 측면을 생각하면 interface가 너 괜찮다고 생각한다.

메소드의 내부 구현이 따로 필요가 없고 .xml 쿼리문의 id와 메소드 명이 일치하기에 연관된 쿼리문을 찾기 편하다.

 


 

반응형