5분 내로 Mybatis의 장단점에 대해서 알아보겠습니다. Mybatis를 사용하는 방법은 모두들 아실테고 모른다면, 별로 어렵지 않으니 실제로 한번 써보시는게 빠릅니다. 때문에, 저는 용어 중심으로 설명드리겠습니다.
1. Mybatis란?
- SQL Mapping Framework
(공식 홈페이지 피셜) 세상에서 가장 유명한 SQL 맵핑 프레임워크라고 합니다.
2. 그래서 Mybatis 왜 씀? - 객체를 SQL이나 저장 프로시서와 매핑하기 위해 사용합니다.
3. 회사를 다니다보면 분업화가 잘 된 곳을 만날 때가 있습니다
- 화면은 프론트앤드 개발자
- 백단은 백앤드 개발자
- 데이터베이스 설계 및 SQL은 DBA가 담당하죠.
여기서 Mybatis의 장점이 도출됩니다.
4. Mybatis를 쓰는 시스템의 장점!
4.1 첫번째
- 소스코드와 SQL의 분리됨 -> 이것은 DBA와 협업을 가능하게 만듭니다. -> 가능하다고 했지 한다고는 안했
- 그래도 호랑이가 담배를 피던 시절에는 JDBC처럼 소스코드에 SQL을 모조리 때려박는데, iBatis 그리고 Mybatis 덕분에 소스코드와 SQL이 xml로 좀 구분할 수 있게 되었습니다.
4.2 두번째
- JPA를 공부하신 분이라면 아시겠지만, 이 Mybatis의 두번째 장점은 JPA를 때려눕힐 수 있는 특장점입니다.
- 대단한건 아니고 그냥 Mybatis는 자기 일 열심히 했을 뿐인거 같은데, 어쨋든 Mybatis는 SQL을 직접 다룰 수 있다는 것입니다. -> 복잡한 쿼리(ex, 통계), 함수, 저장 프로시저 등을 개발할 수 있습니다.
그런데, 개발 트랜드를 보면 JPA가 전세계를 지배하고 있는 것을 알 수 있습니다.
Mybatis에 이렇게 좋은 장점이 있는데, 왜 Mybatis가 아니라 JPA를 사용하는가? 를 생각해보면
이것은 MyBatis의 단점 때문에 그렇습니다.
5. Mybatis를 쓰는 시스템의 단점?
5.1 첫번째 단점
- Spring의 발전한 방향을 보면 "아 귀찮아 ㅠㅠ 어떻하면 일을 덜 할 수 있을까?" 로 요약되는 것 같습니다. 어노테이션이나 자동화를 통해 뭘 하고 싶지 않아하는 것 같아요. Mybatis의 단점은 여기서 나옵니다.
바로 귀.찮.음.
5.1.1 엥 Mybatis가 왜 귀찮냐?
- 이 질문은 JPA 같은 ORM을 다뤄보면 깨우치게 되는 감각입니다. 예를들어, 회원정보에 간수치 칼럼을 하나 추가한다고 생각하면, DTO(VO)에도 간수치를 추가하고 SQL에도 추가하고 데이터베이스의 테이블 구조에도 칼럼을 추가해야하죠.
반대로 JPA는 Entity에 추가하는 등으로 간단하게 끝납니다 :)
5.2 두번째 단점
일반적인 웹에선 생각보다 복잡한 SQL이 필요한 상황이 잘 없음
SI는 일반적인 웹이 아님
- 게시판성 시스템은 JPA로 대응이 가능합니다. 따라서 메인프로젝트는 JPA를 채택하고 배치와 같이 대용량으로 데이터 처리 혹은 복잡한 통계가 필요한 화면은 MSA 방식으로 Mybatis와 연계하는 시스템 아키텍쳐가 매력적으로 보입니다.
5.3 세번째 단점
- Mybatis엔 태생적인 단점이 존재하는데, 그것은 바로 시스템을 SQL 중심으로 돌아가게 만든다는 것입니다. 이게 무슨 소리냐면 자바의 OOP를 박살낸다는 것입니다.
보통 시스템에는 Oracle이나 MariaDB처럼 RDBMS(관계형 데이터베이스)를 사용합니다. 근데, OOP와 RDBMS은 패러다임이 다르릅니다. 따라서, Mybatis를 사용하는 순간, 개발진들이 OOP에 맞게 백엔드를 구현해도 SQL에서 객체를 다 쪼개니 무의미한 일이 되는 것이죠. 그래서 우리는 시스템에 ORM 도입을 고민하게 됩니다.