[W3 팀 과제] JPA가 무엇인가요?

MSK·2022년 3월 23일
0

JPA(Java Persistence API)

-자바 진영의 OMR 표준기술

OMR?

-Object-relational mapping(객체 관계 매핑)
객체와 관계형 DB를 중간에서 매핑해주는 역할을 하는 프레임워크입니다.
CRUD 처리를 위한 공통 인터페이스를 제공합니다.(구현클래스 없이 인터페이스만으로 데이터 접근이 가능함)
객체를 OMR에 저장하면 프레임 워크가 SQL을 작성, JDBC API를 통해 DB와 연결하여 DB를 관리해줍니다.

따라서 개발자가 직접 DB와 연결하는 JDBC API를 설계하고 관리할 필요가 없습니다. 쿼리문 역시 작성할 필요가 없어져 SQL 중심에서 객체 중심의 개발을 할 수 있게 됩니다. 이를 통해 코드의 복잡성을 낮추고 생산성을 높일 수 있습니다.

(JDBC API는 자바에서 제공하는 db 연결 api)
참고: 심화 강의 1-11 ~ 1-13 강의 내용

Java OMR의 역사

  1. EJB : 예전 버전의 표준 OMR. 성능이 부족해서 잘 쓰이지 않았음.
  2. 하이버네이트(오픈소스) : EJB의 불편함을 호소한 개인이 시작한 오픈소스.
  3. JPA : 하이버네이트의 개발자가 참여하여 완성된 가장 최근의 표준 OMR.

JPA 표준명세

왜 JPA?

앞서 말한 것 처럼 JPA를 통한 DB관리는 직접적으로 DB에 접근할 필요가 없기 때문에 더 객체지향성에 부합하는 개발을 할 수 있습니다. 이로 인해 java의 장점인 객체지향성을 유지할 수 있습니다.

관계형데이터와 객체의 패러다임 불일치를 해결합니다.

위의 그림에서 보듯이 객체의 상속관계와 DB의 서브타입 관계는 서로 독립적입니다. 직접 SQL을 관리할 경우 DB의 테이블 관계를 이해하고 설계하고 쿼리문을 작성하는 등의 작업이 필요합니다. 그러나 JPA를 통해 그런 불편과 중복되는 작업을 생략하고 객체를 생성하는 것 만으로도 DB 역시 생성이 가능합니다.

쿼리문 작성이 불필요해진다는 것의 연장선으로 JPA는 객체를 통해 java의 컬렉션처럼 DB의 탐색에 접근할 수 있게 됩니다. JPA를 사용할 경우 DAO파일에 별도의 생성자(메서드)를 작성하지 않아도 필요한 명령을 얼마든지 끌고올 수 있습니다. 객체의 활용도를 더 끌어올리면서 오류의 가능성이 높아지는 쿼리문 작성을 최소화 할 수 있기 때문에 훨씬 자유롭게 탐색이 가능해집니다.

동일한 트랜젝션에서 조회한 엔티티는 같음을 보장합니다.

객체(인스턴스)가 다르더라도 같다는 결과값이 보장될 수 있는 것입니다. 이 역시 탐색에서의 자유도를 상승시킵니다.

단점?

프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있습니다.
복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있습니다.

결론

JAVA의 객체지향성을 유지하면서 DB를 훨씬 쉽고 효과적으로 관리할 수 있는 툴

< 추가 >

  • 스프링에서 사용하는 것은 JPA 전체가 아닌 spring-jpa 프레임워크
  • OMR은 객체와 RDB 두 기둥 위에 있는 기술 > 객체와 RDB 모두 잘 알아야함

참고링크
https://ultrakain.gitbooks.io/jpa/content/
https://www.inflearn.com/course/ORM-JPA-Basic#curriculum
https://data-make.tistory.com/621
https://data-make.tistory.com/621

profile
여긴어디나는누구

0개의 댓글