[JPA] JPA 시작하기

5073 단어 JPAORMJPA

🤔 JPA를 써야하는 이유

- JPA란?

JPA(Java Persistence API)는 Java 진영의 표준 ORM(Object-Relational Mapping) 기술로, 객체와 관계형 데이터베이스를 매핑하여 동작

나는 지금 실무에서 JPA를 사용하지 않고, SQL Mapper인 Mybatis를 사용중이다.
JPA관련 책을 보다가 너무나 획기적인 내용에 '이게 가능한건가?' 싶을 정도로 믿을 수 없었다.

하지만 이렇게 개발자의 단순 작업을 줄여주는 기술이라면, 써보지 않을 수 없을 것 같았다.
그래서 책과 강의를 보며 JPA에 슬쩍 발을 담가보았다.

1. 생산성

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); 		// 삭제

2. 유지보수

또한, 기존 테이블에 변경사항이 있을 경우 들어가는 시간 비용도 줄어든다.
예를 들어, Member 라는 테이블에 hobby 라는 컬럼을 추가하게 되면, 객체에 필드를 추가하고 또 모든 SQL을 한 땀, 한 땀 수정해야하는데 이 때, 실수로 누락된 SQL문이 있다면 바로 에러⚠️
그러면 또 그 에러난 곳 찾고.. 또 수정하고.. 만약 JPA를 사용했다면,

  • 모든 SQL 문을 찾아서 수정 할 필요 없이 객체에 필드만 추가하면 끝이다. 나머지는 JPA가 알아서 처리해준다. ✨WOW👍🏻

3. 패러다임 불일치 해결

  • 관계형 데이터베이스에는 자바 객체가 갖고 있는 추상화, 상속, 다형성의 개념이 없다.

때문에 객체 구조와 테이블 구조가 다를 수 밖에 없다.
그러다보니 객체를 테이블에 저장하거나, 테이블의 데이터를 조회 하려면 복잡한 매핑 과정을 거쳐야 한다.

  • 참조를 사용하는 객체와 외래키를 사용하는 관계형 데이터베이스 사이의 패러다임 불일치는 객체지향 모델링을 지향하는 방향성에서도 높은 벽이 된다.

JPA는 이러한 패러다임 불일치를 속시원하게 해결해준다.
예를 들어, 회사직원의 관계가 있다고하자. 개발자는 회사직원의 관계를 설정하고 직원 객체를 저장하면 된다. JPA가 회사의 참조를 외래키로 변환해서 적절한 insert문을 데이터베이스에 전달한다.

4. 성능

JPA는 애플리케이션과 데이터베이스 사이에서 동작한다. 두 사이의 계층이 하나 더 있기 때문에 생기는 장점이 있다.

String id = "kitty";
Member member1 = jpa.find(Member.class, id);
Member member2 = jpa.find(Member.class, id);

위 코드는 같은 트랜잭션 안에서 동일한 Member를 두 번 조회하고 있다.
JPA를 사용하지 않았다면 Member를 조회할 때마다 select문을 사용해서 데이터베이스와 두 번 통신 했겠지만,

  • JPA를 사용하면 select문은 한 번만 전달하고, 두 번째 조회는 이미 조회된 객체를 재사용한다.

JPA의 코드 작성 방식을 보면 마치 자바 Collection 같아 보인다.
JPA는 실제로 자바 Collecion을 조회하고, 수정하듯 테이블을 조회하고 수정할 수 있다.
정말 간단한 조작 방법이다. 이러니 JPA를 어떻게 사용하지 않을 수 있을까.
이미 JPA는 실무에서 많은 파이를 차지하고 있는 기술이다.
점점 더 Sql Mapper와의 격차는 벌어지고 있다. 나도 하루라도 빨리 JPA 스킬을 갖춰 흐름에 올라 타야겠다.


참고

자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍(김영한)

다정한 피드백 환영해요 🤗

좋은 웹페이지 즐겨찾기