My Profile Photo

Zzi`s personal blog


공부, 이론, 실습 그리고 생각


JPA는 MyBatis를 완전히 대체할 수 있을까?

Spring Data JPA vs. MyBatis

Untitled

Untitled 1

스프링 JdbcTemplate 이후 국내의 상황은 MyBatis 를 사용하는 쪽으로 발전해왔다. 국내 대부분의 기업들이 MyBatis를 사용했고, 본인은 아직까지 현업에서 MyBatis를 사용하고 있다. 확실히 Jdbc를 직접 사용할 때에 비해 MyBatis를 사용하면서 생산성이 훨씬 올랐고, 유지보수 업무를 하는게 많이 편해졌다. 김영한님께서 자바 ORM 표준 JPA 프로그래밍 이라는 책을 출간할 때만해도 국내에 JPA가 많이 알려지지 않았다고 한다. 하지만 이 책이 출간 되면서 국내 빅테크 기업들 사이에서 JPA 사용이 늘어나기 시작했고, 현재 시점에는 스프링을 사용하는 99%의 빅테크 기업은 JPA 사용하는 것으로 대세가 넘어간 것 같다.

Untitled 2

기술의 대세를 바꾸는 것은 쉽지 않다. 특정 상황에서 어떤 기술을 사용할지 결정해야 하는 상황은 누가 답을 정해줄 수 없는 문제이다. 그렇기 때문에 해당 상황에서 어떤 기술을 사용할지는 전적으로 개발자의 선택에 달려있다. 하지만 선택에 대한 주요 요인은 결국 개발자가 얼마나 그 기술에 익숙한가가 크게 작용하게 된다. 나는 예전에 했던 프로젝트에서 Node.js와 Spring 사이에서 backend 기술스택을 결정해야했는데 결국 Spring을 선택했다. 몇가지 요인이 있었지만 보안성을 제외하고도 아래의 요인이 결정적이었다.

  1. 나는 JAVA에 더 익숙했다.

  2. 관련 서적 등 국내에 공부할 수 있는 자료의 양이 Spring이 더 많았다.

지금은 많은 빅테크 기업들이 JPA를 사용하고 있어 JPA가 복잡한 쿼리까지 충분히 대체할 수 있다는 것을 안다. 하지만 최초 JPA가 국내에 소개될 당시에는 성공 레퍼런스가 없었기 때문에 MyBatis를 포기하지 못했던 개발자들의 마음이 이해가 된다. 나 또한 현재 MyBatis를 사용하고 있는 입장에서 현업 프로덕트 코드를 MyBatis를 JPA로 대체하는 시도는 하지 않을 것이다. 아직까지 공부중인 JPA보다는 쿼리가 한눈에 보이는 MyBatis가 편하다. DB 테이블이 많아지고, 쿼리가 복잡해질수록 더욱 JPA로의 변경은 힘들다.

그런데 연차가 쌓일수록 이런 고민이 늘고 있다. 대부분의 주니어 개발자의 경우 SQL 작성 능력이 떨어진다. 이런 상황은 최근 들어 더욱 심해지고 있다고 생각한다. MyBatis를 사용하고 있는 실정에서는 결국 주니어 개발자들이 스스로 SQL을 익힐때까지 생산성이 떨어질 수 밖에 없다. 사람에 따라 다르지만 주니어 입장에서는 SQL 또한 새로 배워야 하는 프로그래밍 언어이고, SQL 문법을 새로 익히는것은 쉽지 않을 것이다. 차라리 아예 두 기술을 모르는 상태라면 MyBatis보다 JPA를 배우는 것이 쉬울 것이다. MyBatis를 익힌다는 것은 MyBatis의 동작원리 + SQL 문법 모두를 배운다는 의미이기 때문이다. 그렇기 때문에 코드 생산성이 중요하고, 주니어 개발자 비율이 높은 초기 스타트업은 JPA를 사용하는 것이 자연스럽다. 현재는 Spring 프로젝트에서 Spring Data JPA까지 만들면서 JPA를 대세로 굳혀줬기 때문에 고민할 필요도 없다.

하지만 개발이 아닌 운영, 유지보수가 주 업무가 되는 SM 단계에서 JPA가 MyBatis보다 큰 강점을 가질까를 생각해보면 아직 잘 모르겠다. 기업 SM을 하게 되면 자료 추출과 DB 데이터 변경이 빈번히 일어나는데 SQL을 모르면 업무가 불가능하기 때문에 어쩔 수 없이 SQL을 알아야 한다. 또한, JPA에서도 JPQL 이나 QueryDSL 등의 특정 문법을 추가로 배워야 하기 때문에 알아야  할 범위가 늘어날 수 있다.

결국 정답은 없다. 하지만 Spring에서 대세를 JPA로 굳혀줬기 때문에 조만간 MyBatis 또한 잊혀진 기술이 될 가능성도 있다. 그렇기 때문에 이제 개발을 배우기 시작하는 개발자의 경우는 JPA를 우선적으로 배우는 것이 맞고, 기존 MyBatis를 사용하고 있는 기업의 레거시 시스템 또한 차세대 사업을 하게 된다면 JPA를 우선적으로 고려하는 것이 좋을 것이다.

comments powered by Disqus