서버/Mybatis
MyBatis 사용이유 및 Mapping 방식 (Interface와 Class 차이)
피노키오이
2021. 8. 11. 14:17
반응형
참고자료
https://jung-story.tistory.com/121
개요
우리나라에서는 대부분의 웹프로젝트에서는 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가지를 정의해야 한다.
- 쿼리문을 정의한 mapper.xml 파일
- Mapper.xml를 java코드에서 실행시키는 Mapper Class or interface (Mapper.java)
- 쿼리의 결과데이터를 담는 중간 매개 Class (보통 VO)
- 위의 3개의 위치를 알려주는 설정
Interface를 이용하여 사용하는 방식.
- Mapper.xml 과 Mapper.java를 연결해주는 방식은 NameSpace와 각 쿼리문의 id의 조합임.
- 쿼리문의 id의 값은 Mapper.java에서 인터페이스로 만들어 놓은 메소드명과 일치해야함.
Interface 와 Class 방식 각각의 장단점
Class 사용
- 장점
- 쿼리문 실행 전에 넣어줄 매개변수와 쿼리 결과값의 변형을 정의할 수 있다.
- Namespace를 내 마음대로 둘 수 있다.
- .xml 파일의 쿼리문 id와 mapper 메소드명을 일치시킬 필요가 없다.
- 단점
- Sqlsession 객체를 주입받아야 하며, 쿼리문 실행 시 항상 호출해야 한다.
- 쿼리문 호출 시 sqlsession에 .xml 파일의 namespce와 쿼리문 id를 매개변수로 넘겨야한다.
Interface 사용
- 장점
- 메소드의 내부 구현이 불필요하다.
- Sqlsession 객체 주입이 불펼요하다.
- .xml 파일의 쿼리문 id와 mapper 메소드 명이 일치한다.
- 단점
- .xml의 Namespace가 실제 Mapper.java 위치를 가르켜야 한다.
- 메소드 내부 정의가 불가능하다.
결론
이렇게 각각의 장단점을 보았을 때 프로젝트가 크거나 유지보수가 측면을 생각하면 interface가 너 괜찮다고 생각한다.
메소드의 내부 구현이 따로 필요가 없고 .xml 쿼리문의 id와 메소드 명이 일치하기에 연관된 쿼리문을 찾기 편하다.
반응형