본문 바로가기
개발자 전향 프로젝트

MyBatis vs JPA

by 샘오리 2022. 8. 26.

기본 배경:

MVC패턴을 안다면 MODEL이 DB에 접속하는 것 또한 알 것이다.

그렇다면 DB에 접속하기 위해서는 뭐가 필요할까?

바로 JDBC이다. 

JAVA로 DBCONNECT 하겠다는 것이다. 

그렇다면 이 JDBC를 사용하면 되지 왜 MyBatis 나 JPA같은걸 쓰는걸까?

 

이유는 간단하다. JDBC가 귀찮고 복잡하기 때문이다.

그래서 개발자들끼리 이 귀찮고 복잡하고 어려운 JDBC를 조금 더 쉽게 사용할 수 있는 방법이 없을까?

매번 고생하지 말고 JDBC 형식을 미리 만들어놓고 새 프로젝트를 할 때는 그 형식에 값만 넣으면 어떨까? 

해서 나온 것이 MyBatis다.

MyBatis 를 통해 초반에 좀 번거럽지만 설정파일과 매퍼를 만들어 놓고 경로 설정을 해두면

그 매퍼에 형식에 맞춰서 쿼리문만 넣으면 되는 것이다.

 

그렇다면 JPA는 어떨까?

JPA는 그 MyBatis 도 귀찮아서 더 쉽게 DB에 접속할 수 있도록 만든 기술이다.

JPA는 ORM이라고 해서 DB를 조작하는 문법에 맞게 쿼리문을 직접 입력하지 않아도

정해둔 단축키 같은 함수를 사용해서 DB를 조작할 수 있게 만든 것이다.

ex : 조회는 find(), 저장은 save(), 수정은 update(), 삭제는 delete() 등

 

반면 마이바티스같은 경우는 저장을 하나만 하면 되는데도 그것을 위해 구축 해야할 게 많다.

 

그렇다면 MyBatis를 쓸 이유가 없어 보이는데 왜 아직도 MyBatis를 쓰는걸까?

 

많은 해석이 있을 수 있겠지만 다음과 같은 이유이지 않을까 추측한다.

 

1. 보통 신규 프로젝트 같은 경우 시니어 개발자 혹은 PM이 설계를 담당하고 

그들은 비교적 최근에 나온 JPA 보다는 기존에 사용하던 MyBatis가 손에 익기 때문에

본인이 잘 알고 있는 방식을 고수하는 경향이 있다.

 

2. 개발자가 무에서 유를 만드는 일 보다는 이미 만들어져있는 프로그램을 유지보수하는 일이 더 많은데

이 경우 소스코드가 대부분 MyBatis 형식으로 구축이 되어있어서

굳이 이 코드를 갈아 엎고 일을 벌릴 사람이 많지 않다.

아까도 말했지만 JPA를 쓰는 이유가 바로 귀찮아서 인데 이미 MyBatis 로 짜여진 코드를 갈아 엎고 JPA로 짠다?

그게 더 귀찮고 더 복잡하고 에러 나면 다 본인 책임이다. 그리고 코드 엎을 권한도 잘 안준다.

 

3. 이것은 잘 공감하지 않지만 MyBatis 같은 경우 쿼리를 직접 짜기 때문에 쿼리문에 대한 기본적인 이해도가 있는 편인데 JPA만을 사용할 경우 개발자인데도 불구하고 DB 조작에 대한 이해가 많이 떨어지는 편이다. 특히 기본적인 CRUD가 아닌 조금 더 응용이 필요한 쿼리문을 쳐야할 경우도 있는데 이 경우에는 쿼리문도 커스터마이징이 필요하다.

그런 점에서 MyBatis를 써온 사람은 조금 더 유연하게 대처가 가능하지만 JPA만 써본 사람은 대처능력이 조금 떨어질 수 있다는 의견이 있다. JPA도 QueryDSL을 이용해 이러한 부분을 해결할 수 있다지만 MyBatis를 잘 쓰던 사람들에게 JPA를 제대로 쓰려면 QueryDSL까지 배워야 한다면 굳이 넘어갈 필요성을 못느낄 것이다.