본문 바로가기
나의 생각/기타

MyBatis vs. JPA, JPA를 공부해야 하는 이유

by 카펀 2022. 7. 27.

현재 회사에서 참여 중인 SI 프로젝트에서는 Oracle을 사용 중입니다.
DB에 조작이 필요할 때 (select, insert, update, delete 등) 사용하는 라이브러리는 MyBatis인데요.
쿼리를 미리 작성해 두면, 필요할 때 적절히 호출해서 사용할 수 있고, 쿼리가 잘못 작성되거나 하는 등의 이유로 에러가 발생하면 콘솔에 실행된 쿼리와 함께 에러 코드가 출력되어 에러를 쉽게 잡을 수 있습니다.

MyBatis의 가장 큰 장점이라고 하면, 쿼리를 그대로 작성할 수 있단느 점입니다.
이 장점 덕분에 저는 입사 후에 별다른 학습 없이 기존의 SQL 지식만을 가지고도 쉽게 개발에 참여할 수 있었습니다.
다만 단점이라고 하면, 쿼리가 길어지다 보면 읽기 복잡할 뿐만 아니라, mapper 파일 (*.xml)에 작성된 쿼리를 바로 실행해 볼 수 없다는 점이 있습니다.

이러는 와중에, 이직을 목표로 하는 등의 서비스 기업에서는 모두 JPA를 전사 표준으로 사용하고 있다는 얘기가 들려옵니다.
저는 앞서 스프링 부트 프로젝트를 책을 따라 제작하며 JPA를 맛만 본 경험이 있습니다.
장점으로는 객체지향적으로 개발을 이어갈 수 있고, 직접 쿼리를 작성하지 않아도 JPA가 알아서 적절한 쿼리를 생성한 후 실행해 준다는 점.
단점으로는 높은 러닝 커브가 있습니다.

다만 이번 글에서는, 기술적 장단점은 언급하지 않고, MyBatis와 JPA를 비교해 보려 합니다.

목차
1. 개발자가 공부해야 하는 기술과 트렌드
2. Google Trends로 보는 JPA vs. MyBatis
3. 해소되고 있는 JPA의 단점
4. JPA와 나

1. 개발자가 공부해야 하는 기술과 트렌드

이 세상에는 수많은 개발 언어와 프레임워크, 라이브러리 등이 존재합니다. 이 모든 것을 개발자가 전부 학습할 수는 없구요.
그래서 우리는 통계를 보고, 다른 사람들이 많이 사용하는 기술을 학습해야 할 필요가 있습니다.

출처: https://www.tiobe.com/tiobe-index/

위 이미지는 2022년 7월 기준 전 세계 프로그래밍 언어 사용 순위를 나타냅니다.
Python, C, Java, C++, C#, Visual Basic, JavaScript, ... 등으로 많이 쓰이죠.
이 순서를 맹신할 것 까지는 없지만, 적어도 다른 사람들이 어떤 언어를 공부하고 있는지는 쉽게 파악할 수 있습니다.
언어 뿐만 아니라 프레임워크, 라이브러리 등 다양한 카테고리에서 확인할 수 있겠지요.

예를 들어서 Ruby는 위 이미지에서 15위이며, 전 세계적으로 꽤 많이 사용되고 있는 언어입니다. 웹 프레임워크로는 RoR (Ruby on Rails)가 있고요.
하지만 한국에서는 Ruby 사용자는 매우 찾기 어렵습니다. 한국은 전통적으로 Java + Spring 생태계가 주류였고, 최근에 여러 스타트업을 중심으로 Python + Django, Node.js + Express 등이 적극 사용되고 있습니다.
그렇다면 한국에서 Ruby를 공부하는 것이 잘못된 것일까요? 그렇지는 않지만, 아무래도 커뮤니티나 채용 규모 등에 있어서 불리하다고 할 수 있겠지요.
반대로 Java + Spring 쪽은 수많은 사용자로 이루어진 커뮤니티와 관련 레퍼런스가 인터넷에 무궁무진하게 존재합니다. 개발은 혼자 하는게 거의 대부분의 경우는 아니기 때문에, 다른 사람들과 context를 공유할 수 있는 기술 스택을 공부하는 것이 아무래도 유리하겠지요.

2. Google Trends로 보는 JPA vs. MyBatis

앞서 개발자는 다른 개발자들이 많이 사용하는 기술을 학습해야 할 필요가 있다고 말씀드렸습니다.
그러면 이번에는 JPA와 MyBatis를 비교해 보도록 하겠습니다.

Google Trends에서는 특정 키워드가 검색되는 통계를 조회해 볼 수 있습니다.
위의 두 키워드가 대한민국 내에서 검색된 통계를 비교해 보겠습니다.


최근 5년 간의 통계입니다.
참고로 김영한 님의 JPA 책은 2015년 7월 20일에 첫 출간되었습니다.
전체적인 관심도를 보면, 꾸준히 MyBatis가 앞서다가, 2021년 초부터는 엎치락뒷치락 하고, 2022년 초부터는 JPA가 점차 우세한 것을 볼 수 있습니다.
시간이 지날수록 JPA에 관심을 가지는 개발자들이 늘어나고 있다고 볼 수 있는데요.

참고로 2004년부터의 통계를 본다면 MyBatis가 지금까지 JPA에 비해 압도적인 관심을 받아온 것을 확인할 수 있습니다.


이렇게만 보면, 단순히 "JPA가 점점 관심을 받고 있구나" 정도로만 볼 수 있습니다.
하지만 재미있는 통계는 아직 더 있습니다.


최근 5년 간 JPA와 MyBatis 중 관심도가 더 높았던 지역을 나타낸 통계입니다.
경기도, 경상북도, 제주도는 JPA가 우세했고, 나머지 지역은 MyBatis가 우세했는데요.
시간대를 최근 2년으로 좁혀 보면,

서울, 경기도, 경상북도, 인천, 광주, 부산, 제주도에서 JPA가 우세인 것을 확인할 수 있습니다.

이 내용을 어떻게 받아들일 수 있을까요?
서울과 경기도에는 규모가 큰 IT 서비스 기업들이 있습니다. (네이버 - 경기도 분당, 카카오 - 경기도 판교, 라인 - 경기도 분당, 쿠팡 - 서울 송파, 우아한형제들 - 서울 송파)
이들 외에도 다양한 스타트업도 서울과 수도권에 존재하며, 이들이 JPA를 적극적으로 도입하고 있음을 예측할 수 있습니다.
제주도에는 카카오 본사, 네오플 본사 등 일부 IT 기업이 존재하고, 이들의 영향으로 JPA의 비중이 높은 것이 아닐까 싶네요.

한국 내에서 점차 JPA가 자리를 잡아 간다는 것이 통계를 통해 느껴지시나요?
앞으로 더 많은 회사들이 JPA를 도입해 갈 것이고, JPA에 관련된 커뮤니티와 자료들이 늘어날 것입니다 (저도 그 생산자 중 한 명이 되었으면 하네요).
그만큼 많은 회사에서 JPA에 능숙한 개발자를 찾을 것이라는 것도 예측할 수 있죠.

번외로, 전 세계로 눈을 돌려 보면 재미있는 그림을 볼 수 있습니다.

최근 3년간의 관심도 차이를 나타낸 자료인데요.
한국 내의 상황과는 완전 딴판인 것을 알 수 있죠?
통계가 잡힌 전 세계의 국가 중에서 MyBatis가 JPA보다 우세인 곳은 일본과 중국, 두 곳 뿐입니다.
그마저도 최근 5년으로 범위를 넓히면, 위의 두 국가와 함께 한국 역시 MyBatis가 우세한 지역이었습니다.

이 말은, 영문으로 된 자료, 혹은 해외 개발자 취업을 생각하신다면, Java + Spring 개발자로써는 JPA는 필수라고 할 수 있는 정도입니다.

3. 해소되고 있는 JPA의 단점

JPA의 단점으로는 앞서 '높은 러닝커브'를 꼽았는데요.
단순히 SQL 문법만 알면 얼추 개발에 투입될 정도인 MyBatis와는 달리, JPA는 SQL 자체에 대한 깊은 이해는 물론, JPA에 대해서도 공부해야 할 내용이 많습니다.
더군다나 앞의 통계에서도 보셨지만, MyBatis가 주류였던 한국 내에서, JPA를 공부할 수 있는 자료는 한정적일 수밖에 없었습니다.
기껏해야 해외에서 출간된 책을 직접 보거나, 번역본이 나오길 기다릴 수밖에 없었죠.

하지만 지금은 상황이 달라지고 있습니다.
한글로 작성된 훌륭한 JPA 책이 출간되었고, 온라인에도 블로그, 강의 등 다양한 형태의 JPA 관련 자료들이 존재합니다.
(너무 영한님 관련 자료만 링크한다고 생각하셔도 어쩔 수 없습니다. 한국에서 김영한 님은 그만큼 JPA의 선구자적인 분이십니다 ㅎㅎ;)
이런 양질의 자료를 바탕으로 학습하고, 실무에서 JPA를 써 본 개발자들은 또 저마다의 JPA에 대한 경험을 쏟아낼 것이고, 이럴수록 JPA에 대한 접근성은 낮아질 것입니다.

정말 많은 분들이 JPA에 대한 글을 작성하셨습니다.

몇 년의 시간이 더 흐른 뒤에는, Java + Spring + JPA는 Java 백엔드 개발자의 기본 소양이 되어 있지 않을까요?

4. JPA와 나

앞의 내용은 기술적인 내용을 제외하고 JPA를 학습해야 하는 이유에 대한 내용이었다면, 여기서는 저 개인과 JPA에 대한 내용입니다.
저처럼 SI/SM 업계에서 커리어를 시작한 개발자 분들 중 많은 분들은 서비스 기업으로의 이직을 꿈꾸고 계실 것입니다.
하지만 SI/SM 프로젝트에서 JPA를 사용할 일은 거의 없다고 봐도 무방하고, 대부분 MyBatis로 구성되어 있습니다.
반면 서비스 기업들은 JPA에 대한 이해도를 요구하죠.

모 회사의 백엔드 개발자 직무의 지원자격/우대사항

테스트 코드는 실제 product 코드에는 영향을 미치지 않으니 회사에서 작성해 볼 수라도 있지만, JPA는 전혀 사용할 수 없습니다.
따라서 제가 학습하고자 하는 방향성은 아래와 같습니다.

  • 먼저, 개인 프로젝트를 통해 수박 겉핥기식으로 JPA를 사용해 본다. 책을 따라서, 구글 검색을 통해.
    • 단, 이 과정에서 겪은 어려움이나 모르는 점은 기록해 두고, 스스로 찾아낸 나름의 결론을 적는다.
  • 다음으로, 인프런 및 JPA 책을 통해 이론을 학습한다. 프로젝트에서 JPA를 사용하며 아리송했던 부분을 채운다.
  • 이어서, 다른 개발자들과 함께 하는 사이드 프로젝트에서 마찬가지로 JPA를 사용한다.
    • 내가 사용하는 방법이 맞는지, 다른 개발자들은 어떻게 사용하는지 참고한다. 겪은 어려움이나 모르는 점은 마찬가지로 회고한다.

이런 식으로 학습해 보려 합니다.
JPA는 "SI에는 없고 서비스기업에는 있는 것들" 목록 중에서 높은 학습 우선도를 가진다고 생각합니다. (저 목록에는 코드 리뷰, 테스트 코드 작성 및 TDD, 페어 프로그래밍 등이 있겠지요.)
그만큼 저로써는 개인적으로 많은 시간을 투자해서 학습해야 할 필요성이 있고, 비록 실무에서는 아니더라도 개인적으로 위처럼 학습해서 어느 정도의 실력을 갖출 수 있겠지요.
몇 년 후에는 실력으로 인정 받는 JPA 사용자가 되고 싶습니다.

댓글