ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA와 Hibernate, Spring data JPA
    🌱 spring 2022. 10. 10. 22:21

    ORM ❓


    ORM (Object Relational Mapping)

    객체 관계 매핑

    객체가 테이블이 되도록 매핑시켜주는 프레임워크

    • 프로그램의 복잡도를 줄이고
    • 자바 객체와 쿼리를 분리할 수 있어 트랜잭션 처리나 DB관련 작업들을 좀 더 편리하게 처리할 수 있다.

    SQL Mapper vs ORM

    SQL Mapper

    SQL ← mapping → 객체

    • Mybatis의 프레임워크
    • SQL Mapper는 SQL문으로 직접 DB를 조작한다.
    • 직접 SQL문을 작성해 복잡한 쿼리도 처리할 수 있다.
    • 관계를 직접 명시할 수 있다.

    단점

    1. SQL문을 직접 작성해야 한다.
    2. 객체모델과 관계 모델을 각각 개발해야해서 유지보수가 힘들다.
    3. DBMS마다 SQL문이 달라 DBMS에 종속적이다.

    ORM

    DB 데이터 ←mapping→ 객체

    • 객체와 DB 데이터를 자동으로 매핑해주어 SQL문을 직접 작성하지 않는다.
    • 객체 모델만을 이용해 객체지향적으로 프로그래밍할 수 있다.
    • 유지보수가 용이하다

    단점

    1. 데이터의 관계가 복잡할수록 구현하기 어렵다
    2. 복잡한 SQL문을 처리하기 어렵다
    3. ⇒ QueryDSL을 이용
    4. 객체-관계 간의 불일치가 생길 수 있다.

    ⭐️ JPA


    JPA(Java Persistence API)

    자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

    자바 ORM기술에 대한 API 표준 명세를 의미한다.

    JPA는 특정 기능을 하는 라이브러리가 아니다 ❌

    JPA는 단순한 명세이기 때문에 구현이 없다.

    Hibernate는 JPA의 구현체이다.

    JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.

    장점

    1. 객체지향적으로 관리
      JPA를 통해 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스로직에 집중할 수 있고 객체지향 개발이 가능하다.
      Mybatis를 사용하는 경우
      • CRUD SQL을 계속 반복적으로 사용하고, 객체 모델링보다 데이터 중심 테이블 설계를 하다보니
      • 객체지향의 장점인 추상화, 캡슐화, 상속, 다형성을 제대로 사용하지 못하고 객체를 데이터 전달 목적(VO, DTO)으로만 사용했다
      • 하지만, JPA는 상속관계에 있는 테이블에 대해 Join을 알아서 처리해주는 등 객체지향적으로 관리할 수 있기 때문에 전체 프로그램 구조를 일관되게 유지할 수 있다.
    2. SQL 자동 생성 - 유지보수가 쉬움
      자바 객체와 DB 테이블 사이의 매핑 설정을 기준으로 SQL를 맞춤으로 생성한다.
      객체를 기준으로 SQL을 생성하여 동작하기 때문에 CRUD용 SQL를 직접 작성하지 않아도 되며, 테이블 변경시 JPA의 Entity만 수정하면 된다.
    3. DBMS에 대한 코드 종속성이 줄어든다.
      DBMS란 데이터베이스를 조작하는 소프트웨어이다.
      JPA를 사용하면 데이터베이스에 종속적이지 않아 데이터베이스가 변경되더라도 JPA가 해당 데이터베이스에 맞는 쿼리를 알아서 생성해준다.

    단점

    1. JPA 학습이 어렵고 학습 비용이 높다
    2. 복잡한 쿼리 사용시 어렵다
    3. 잘못 사용시 실제 SQL문을 직접 작성하는 것보다 성능이 떨어질 수 있다.

    JPA 동작방법

    JAVA가 JDBC API에 명령을 내리는 것이 아니라 JPA가 
    JDBC API를 사용해서 DB와 통신하고 SQL을 호출하고 반환하다.
    

    JPA는 자바 진영에서 ORM 기술 표준으로 Application과 JDBC 사이에서 동작한다.

     

    🧐 Hibernate


    💡 JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크중 하나이다.
    • JPA 인터페이스의 실제 구현부를 담당한다.

    장점

    1. 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중할 수 있으며 객체지향 개발이 가능
    2. 테이블 생성, 변경, 관리가 쉽다.
    3. 로직을 쿼리보다 객체 자체에 집중할 수 있다.

    단점

    1. SQL보다 다루기가 어려움
    2. 잘 이해하고 사용하지 않으면 데이터 손실이 발생한다.
      • 객체간의 매핑(Entity Mapping)이 잘못되거나 JPA를 잘못 사용하여 의도치 않은 동작을 할 수 있다.
      • 이를 주의해서 SQL 자체 쿼리를 작성할 수 있다.
    3. 성능상 문제가 있어, 과부하가 걸릴 수 있다.

    📌 Spring Data JPA


    Spring Data JPA란 JPA를 추상화시킨 Repository Interface를 제공하여 개발자가 JPA를 더 편하게 사용할 수 있게 하는 모듈이다.

    Spring Data JPA를 사용하지 않는다면 클래스에 @Repository annotation을 작성하고 JPA를 적용한 다음 EntityManager의 API를 직접 호출해야 entity CRUD가 처리한다.

    SpringData JPA의 Repository Interface(SimpleJpaRepository)에는 EntityManager가 포함되어 있어 직접 작성하지 않아도 내부에서 자동으로 호출된다.

    • @Repository annotation을 작성하지 않아도 spring data JPA가 알아서 Bean으로 등록해준다.

    JPA repository method 작성법

    Repository Interface에 정해진 규칙대로 Method 입력시 Spring이 알아서 method에 적합한 JPQL을 생성해 처리한다.

    • findBy[속성이름] : entity 속성이름으로 검색
    • findBy[속성]Or[속성] : 여러 필드로 검색
    • countBy[속성이름] : entity 속성이름에 해당하는 결과 개수 반환

    참고 자료

    https://velog.io/@evelyn82ny/JPA-vs-Spring-Data-JPA

    https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

    https://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#jpa.sample-app.finders.strategies

    https://velog.io/@alicesykim95/JPA-ORM-JDBC-Hibernate란

    https://dev-coco.tistory.com/74

    '🌱 spring' 카테고리의 다른 글

    JPA - N + 1 문제  (0) 2022.10.11
    영속성 컨텍스트  (0) 2022.10.11
    Spock 로 테스트 해보기  (0) 2022.10.06
    MVCC  (1) 2022.10.05
    QueryDSL  (1) 2022.10.05

    댓글

Designed by Tistory.