Spring Data JPA 이렇게 편리하다니...
반응형

국비교육도 그렇고 처음 입사했던 회사도 그렇고 전부 SQL을 직접 짜는 MyBatis를 이용했었다.

JDBC를 사용하면서도 자바 백엔드 코드와 SQL이 함께 있는 로직도 경험하였을 때 

백엔드 코드와 SQL이 분리된 MyBatis는 정말 편리한 프레임워크였다.

복잡한 SQL을 처리할 수 있고, 방금 insert한 데이터의 Key값을 받아오기도 잘 되어있고,

짜기 나름이겠지만 분리되어 있으니 유지보수도 나쁘지 않았다.

 

JPA라는 기술을 첫 회사다닐 때 옆자리 개발자분 덕분에 어떤 기술인지 제대로 알게 되었는데

알게 된지 어언 2년 정도 지나서 한번 사용해보고 싶다는 생각이 들게 되었다.

무엇보다 마음에 들었던 것은 어떤 SQL 문법을 쓸지 신경쓰지 않아도 되는 것이었다.

나는 크로스 플랫폼, 하이브리드 같은 두가지를 다 잡을 수 있는 것을 좋아하나보다...

메서드만으로 쿼리가 짜지고 데이터가 불러와진다고?! 신기했다.

물론 쿼리를 직접 짜는 것은 가끔 괴롭지만 재밌고 논리적인 머리의 발전에 도움이 된다.

 

처음엔 그저 쿼리만 짜주는 기술인줄 알았는데 아니 이게 웬걸..

(DTO)Entity를 만들면 스프링이 돌아갈때 데이터베이스에 알아서 테이블이 생긴다.

처음엔 너무 신기했다. 와 테이블이 내가 짠 프로그램에 맞춰서 자동으로 생기네? 

한편으로는 그렇다면 컬럼이 바뀔때마다 데이터가 다 사라지고 다시 생기는 건가?

싶은 서버와 DB의 엄청나게 강한 결합이 느껴지기도 해서 불안한 느낌도 있었다.

 

매커니즘을 이해하는데에 있어서 오래 걸리지는 않았지만 러닝커브가 조금은 있는 기술이었다.

@Entity...@Column...@ForeignKey...등등 새롭게 배워야할 것들이 많았다.

MyBatis를 썼던 흐름의 개발방식을 기반으로 이해를 하려고 해서 다행히 시간이 그렇게 걸리지 않았던 것 같다.

 

Entity Manager를 쓰는 좀더 로우레벨인 그냥 JPA는 잘 모르겠고 SpringBoot의 Spring Data JPA는 너무 편리한 기술이었다.

직접 써보고 나니 정말 많은 부분을 Spring Data Jpa가 알아서 해준다.

 

복잡한 쿼리를 짜는 것은 또 다른 기술을 사용해야하지만 많은 경우에서 생산성이 비약적으로 올라갔다.

굳이 데이터베이스 워크벤치에 들어가서 테이블을 하나하나 , 컬럼을 하나하나 만들어줄 필요도 없고 JpaRepository를 상속 받기만 하면 메서드만으로 쿼리를 만들어낼 수 있기 때문에 굳이 매퍼처럼 다시 SQL을 직접 써줄 필요가 없어 신경쓸 요소가 굉장히 많이 줄어들었다. 심지어 서버를 빌드 과정에서 메서드쿼리?에 문제가 있으면 바로 오류를 내뱉어주기 때문에 정말 너무나 친절하고 편리한 기술이었다.

 

물론 로우레벨 느낌의 기술은 아니기 때문에 데이터베이스의 테이블 목록을 불러와야한다거나 하는 것에는 적합하지 않았다.

데이터베이스의 테이블 목록을 불러와야하는 로직을 짜야했었는데 이를 Spring Data JPA에서는 방법을 찾지 못했다.

데이터베이스 내의 모든 Entity를 불러올 수 있는 방법 자체가 있는지 모르겠고 이를 다룬 내용도 없을 뿐더러

이때는 JDBC가 더 적합했다...

 

너무나 편리하지만 생각보다 지원하지 않는 기능들도 많은 것 같은 JPA... 좀 더 연구해볼 필요가 있겠다.

반응형