[JPA] JPA

손성우·2022년 7월 22일
0

JPA

목록 보기
1/3

JPA(Java Persistence API)

현재 자바진영의 ORM 기술 표준(명세서)으로, 인터페이스의 모음(실제로 동작하는 것이 아님.)

  • Hibernate
    JPA를 구현한 프레임워크. 즉, JPA기능을 구현하여 공급해주는 역할

  • Spring Data JPA
    하이버네이트 같은 JPA 구현체 위에 추상화 계층을 따로 두어(Repository 인터페이스 제공) 관리하는 프레임워크

    1. 개발자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.

    2. 기존 JPA는 EntityManager를 주입받아 사용해야 했지만, Repository인터페이스 안에 EntityManager를 주입해서 실제 사용자는 EntityManager를 사용할 필요가 없다.

  • ORM(Object-Relational Mapping)
    애플리케이션의 Class와 RDB의 테이블을 매핑한다는 뜻. 즉, 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것.

동작과정

  • JAVA애플리케이션과 JDBC 사이에서 동작
    JAP사용 -> JPA내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 연결.

저장

  • MemberDAO객체를 저장하고 싶을 때
    JPA의 persist메소드 실행 -> 엔티티 분석 -> INSERT SQL 생성 -> JDBC API를 사용하여 SQL을 DB에 날린다.

조회

  • MemberDAO객체를 조회하고 싶을 때
    Find(pk)를 실행 -> 엔티티의 매핑 정보를 바탕으로 SELECT SQL 생성 -> JDBCAPI로 SQL을 DB에 넘김 -> DB로부터 결과를 받는다 -> 결과(ResultSel)을 객체에 모두 매핑

장점

  • SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음.
    (반복적인 CRUD SQL처리. 내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경 쓰지 않아도됨)
  • 필드 변경시 모든 SQL을 수정할 필요 없이 필드만 추가해주면 된다.
  • 쿼리를 JPA가 만들어 주기 때문에 Object와 RDB 간의 패러다임 불일치를 해결할 수 있다.
    (JAVA의 클래스간 상속관계를 표현해준다.(데이터베이스는 객체의 상속관계를 지원X))
  • 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가
  • 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리

단점

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

참고
https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html
https://dbjh.tistory.com/77

profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글