ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 7일차 (JPA)

ssungcohol 2023. 2. 10. 01:05

JPA (Java Persistence API)

 - 자바의 ORM 기술의 표준이다.

 - 자바 ORM에 대한 API 표준 명세로써 인터페이스의 모음

 - 따라서, JPA를 사용하기 위해선 ORM 프레임워크를 선택해야 한다. (가장 대중적인 것은 하이버네이트)

 - SQL을 직접 다루는 것이 아니라 JPA를 통해 SQL를 다루게 되는 것

 

여기서 ORM 이란?!

ORM (Object-Relational Mapping)

 - 객체와 관계형 데이터베이스를 매핑한다는 뜻!

 - ORM은 프레임 워크로써 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해준다.

 - 객채는 객체대로, DB는 DB에 맞도록 설계가 가능하다! 고로, 우리는 이를 매핑하는 방법만 잘 전달해주면 된다!

 

JPA 동작과정

출처 : https://girawhale.tistory.com/119

 - JPA는 애플리케이션과 JDBC 사이에서 동작

 - JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신

 - 우리가 ORM에 저장하면 적절한 INSERT SQL을 생성해 DB에 저장하고, 검색을 하면 SELECT SQL을 생성해 객체에 매핑 후 전달

 

사용 이유

  1. 생산성
     - 자바 컬렉션에 저장하듯, JPA에게 저장할 객체를 전달하면 된다
     -  코드의 반복이 줄어들고, DDL문도 자동 생성해주어 DB 설계 중심을 객체 설계 중심으로 변경 가능
    (DDL => 데이터 정의 언어로, 테이블이나 관계의 구조를 생성하는데 사용 CREATE, ALTER, DROP, TRUNCATE 등이 있다)
  2. 유지보수
    - 필드 생성 시 관련 SQL, JDBC 코드를 전부 수행했지만, JPA가 대신 처리해주어 유지보수 코드 감소
  3. 패러다임 불일치 해결
     - JPA는 연관 객체를 사용하는 시점에 SQL을 전달할 수 있고, 같은 트랜잭션 내에서 조회할 때 동일성도 보장하기에 패러다임 불일치를 해결
  4. 성능 최적화
     - 같은 트랜잭션 안에서는 같은 엔티티를 반환하기 때문에 DB와의 통신 횟수를 줄임
     - 트랜잭션을 commit 하기 전까지 메모리에 쌓고 한 번에 SQL을 전송
  5. 데이터 접근 추상화와 벤더 독립성
     - RDB는 같은 기능이라도 벤더마다 사용법이 다르기에 처음 선택한 DB에 종속되고 변경이 어려움
     - JPA는 애플리케이션과 DB 사이에서 추상화된 데이터 접근을 제공하기 때문에 종속 되지 않도록함
      (만약, DB가 변경되더라도 JPA에게 알려주면 간단하게 변경 가능)
728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

Spring - 9일차  (0) 2023.02.11
spring - 8일차  (0) 2023.02.11
spring - 6일차  (0) 2023.02.09
spring - 5일차  (0) 2023.02.08
spring - 4일차 (메모장 만들기)  (0) 2023.02.07