JPA(Java Persistence API)
는 Java 진영의 표준ORM(Object-Relational Mapping)
기술로, 객체와 관계형 데이터베이스를 매핑하여 동작
나는 지금 실무에서 JPA를 사용하지 않고, SQL Mapper인 Mybatis를 사용중이다.
JPA관련 책을 보다가 너무나 획기적인 내용에 '이게 가능한건가?' 싶을 정도로 믿을 수 없었다.
하지만 이렇게 개발자의 단순 작업을 줄여주는 기술이라면, 써보지 않을 수 없을 것 같았다.
그래서 책과 강의를 보며 JPA에 슬쩍 발을 담가보았다.
SQL Mapper를 사용하다 보면, 아무래도 로직에 대한 고민보다,SQL문을 작성 하는데에
더 많은 시간을 소비하게 된다.
수백개의 테이블에 대한 반복된 CRUD 쿼리를 타이핑 한다고 생각해보자.
정말 짜치고, 현타 심하게 온다. 물론 현재 회사에서는 code gernerator
를 통해 기본적인 CRUD 쿼리문은 자동으로 생성하지만, 그 외 추가적인 SQL문을 작성하기 위해서 시간이 꽤 필요한 것은 여전하다.
반면, JPA는 수십, 수백줄에 달하는 SQL문은 단 몇 줄로 간단하게 작성할 수 있다.
이로써 SQL문을 작성하는 데에 들이는 시간을 아주 많이 절약할 수 있게 된다.
jpa.persist(member); // 저장
jpa.find(Member.class, pk) // 조회
member.setName("kitty") // 수정
jpa.remove(member); // 삭제
또한, 기존 테이블에 변경사항이 있을 경우 들어가는 시간 비용도 줄어든다.
예를 들어, Member
라는 테이블에 hobby
라는 컬럼을 추가하게 되면, 객체에 필드를 추가하고 또 모든 SQL을 한 땀, 한 땀 수정해야하는데 이 때, 실수로 누락된 SQL문이 있다면 바로 에러⚠️
그러면 또 그 에러난 곳 찾고.. 또 수정하고.. 만약 JPA를 사용했다면,
✨WOW👍🏻
때문에 객체 구조와 테이블 구조가 다를 수 밖에 없다.
그러다보니 객체를 테이블에 저장하거나, 테이블의 데이터를 조회 하려면 복잡한 매핑 과정을 거쳐야 한다.
JPA는 이러한 패러다임 불일치를 속시원하게 해결해준다.
예를 들어, 회사
와 직원
의 관계가 있다고하자. 개발자는 회사
와 직원
의 관계를 설정하고 직원
객체를 저장하면 된다. JPA가 회사
의 참조를 외래키로 변환해서 적절한 insert
문을 데이터베이스에 전달한다.
JPA는 애플리케이션과 데이터베이스 사이에서 동작한다. 두 사이의 계층이 하나 더 있기 때문에 생기는 장점이 있다.
String id = "kitty";
Member member1 = jpa.find(Member.class, id);
Member member2 = jpa.find(Member.class, id);
위 코드는 같은 트랜잭션 안에서 동일한 Member를 두 번 조회하고 있다.
JPA를 사용하지 않았다면 Member를 조회할 때마다 select
문을 사용해서 데이터베이스와 두 번 통신 했겠지만,
select
문은 한 번만 전달하고, 두 번째 조회는 이미 조회된 객체를 재사용한다.JPA의 코드 작성 방식을 보면 마치 자바 Collection 같아 보인다.
JPA는 실제로 자바 Collecion을 조회하고, 수정하듯 테이블을 조회하고 수정할 수 있다.
정말 간단한 조작 방법이다. 이러니 JPA를 어떻게 사용하지 않을 수 있을까.
이미 JPA는 실무에서 많은 파이를 차지하고 있는 기술이다.
점점 더 Sql Mapper와의 격차는 벌어지고 있다. 나도 하루라도 빨리 JPA 스킬을 갖춰 흐름에 올라 타야겠다.
자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍(김영한)다정한 피드백 환영해요 🤗
좋은 내용 잘 보고 갑니다ㅎㅎ