제리 devlog

[JPA] 왜 JPA를 사용해야하는 가? 본문

JPA

[JPA] 왜 JPA를 사용해야하는 가?

제리 . 2020. 11. 10. 15:57

JPA는 자바 ORM(객체관계매핑) 기술에 대한 API 표준 명세다. 즉, 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM프레임워크를 사용해야한다. 이중 Hibernate가 가장 대중적이다. JPA라는 표준 덕분에 특정 구현 기술에 대한 의존도를 줄일 수 있고 다른 구현 기술로 손쉽게 이동할 수 있다. 다시말하면 Hibernate가 아닌 다른 ORM프레임워크로 변경해도 JPA인터페이스를 사용하고있기 때문에 코드상에서 변경해야할 부분이 크게 줄어든다.

 

왜 JPA를 사용해야 하는가?

 

1. 생상성

JPA를 사용하면 자바 컬렉션에 객체를 저장하듯이 JPA에 저장할 객체를 전달하면된다. SQL을 작성하고 JDBC API를 사용하는 반복적인 일을 JPA에서 대신해준다. 나아가서 JPA는 CREATE TABLE같은 DDL문을 자동으로 생성해주는 기능도 있다. 이런 기능들을 사용하면 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다.

 

2. 유지보수

SQL에 의존적인 개발은 엔티티 컬럼에 변경사항이 생기면 등록, 수정, 삭제등등 연관된 모든 SQL문을 수정해야하며 결과를 매핑하기 위한 JDBC API 코드도 모두 변경해야한다. JPA에서는 이런 과정을 대신해주므로 유지보수측면에서 시간과 노력이 절약된다. JPA는 패러다임 불일치 문제를 해결해주므로 객체지향 언어의 장점을 활용하여 유연하고 유지보수하기 좋은 도메인 모델을 편리하게 설계할 수 있다.

 

3. 패러다임 불일치 해결

이전 게시물 다뤘던 내용처럼 데이터베이스와 객체간에 괴리감을 개발자가 해결해주어야하고 이 과정에서 비용이 발생한다. 자세한 내용은 아래 게시물을 참조하자.

jgrammer.tistory.com/entry/JPA-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84-%EB%B6%88%EC%9D%BC%EC%B9%98

 

[JPA] 패러다임 불일치

애플리케이션은 발전하면서 점점 복잡성이 커진다. 지속 가능한 애플리케이션을 개발하는 일은 끊임없이 증가하는 복잡성과 의 싸움이다. 복잡성을 제어하지 못하면 유지보수하기 어려운 애플

jgrammer.tistory.com

4. 성능

JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다. JPA는 데이터베이스와 애플리케이션 사이에서 동작하므로 중간 계층에서 최적화 관점으로 시도해 볼 수 있는 것들이 많다.

String memeberId = "helloId";
Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);

 

같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 경우를 생각해보자. JDBC API는 조회를 할 때마다 데이터베이스와 통신을 했을 것이다. 반면, JPA는 하나의 트랜젝션에서 첫번째 조회한 내용을 두번째에서 재사용한다. 하이버네이트는 SQL힌트를 넣을 수 있는 기능도 제공한다고 한다.

 

5. 데이터 접근 추상화와 벤더 독립성

관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다. 단적인 예로 페이징 처리는 데이터베이스마다 달라서 사용법을 각각 배워야 한다. 결국, 애플리케이션은 처음 선택한 데이터베이스 기술에 종속되고 다른 데이터베이스로 변경하는일은 어렵다. 

JPA는 애플리케이션과 데이터베이스 사이의 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스에 종속되지 않도록 한다. 만약 데이터베이스를 변경한다면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.

 

6. 표준

JPA는 자바 진영의 ORM 기술 표준이다. 표준을 사용하면 다른 구현 기술로 손쉽게 변경할 수 있다.

'JPA' 카테고리의 다른 글

[JPA] 앤티티 매핑  (0) 2020.11.20
[JPA] 영속성 관리  (0) 2020.11.15
[JPA] Hibernate 실행해보기  (0) 2020.11.11
[JPA] 패러다임 불일치  (1) 2020.11.09
[JPA] SQL을 직접 다룰 때 발생하는 문제점  (0) 2020.11.06
Comments