케네스로그

[JPA] JPA의 등장배경 본문

Dev/JPA

[JPA] JPA의 등장배경

kenasdev 2023. 1. 2. 23:52
반응형

SQL 중심 개발의 문제점

  1. SQL에 의존적인 개발
    객체를 관계형 데이터베이스에 저장하여 관리하게 된다.
    여기서 발생하는 문제는 직접적으로 데이터를 저장하기 위해 SQL을 통해 작업하게 된다.
    이 과정에서 반복적인 작업을 해야하는 불편함이 발생한다.
    또한, 객체를 SQL로, SQL로 받아와서 객체로 전환하는 패러다임 일치 작업이 요구되어 진다.
public class Member {
    private String memberId;
    private String name;
    private String tel;
}
INSERT INTO MEMBER(MEMBER_ID, NAME, TEL) Values
SELECT MEMBER_ID, NAME, TEL FROM MEMBER M
UPDATE MEMBER SET .. TEL = ?
  1. 객체와 관계에 대한 패러다임의 불일치
    객체지향은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등의 다양한 장치를 제공한다.
    이러한 장치를 기반으로 코드를 작성하고 설계하게 된다.
    하지만 데이터베이스에 이러한 기반의 코드를 전달하기 위해서 SQL매핑작업이 요구되어 진다.

객체 -> SQL변환 -> SQL -> RDB

객체와 관계형 데이터베이스의 차이

  • 상속
  • 연관관계
  • 데이터 타입
  • 데이터 식별 방법

JPA?

Java Persistnece API의 약자로, 자바 진영의 ORM 기술 표준을 뜻한다.
ORM: Object-Relational Mapping(객체관계매핑)
객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계할 수 있도록 해준다.

ORM 프레임워크가 중간에서 SQL 매핑작업을 대신해서 수행한다.

JPA의 성능 최적화 기능

1차 캐시와 동일성(identity) 보장
트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
지연 로딩(Lazy loading)
지연 로딩: 객체가 실제 사용될 때 로딩
즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회

데이터베이스의 방언

JPA는 특정 데이터베이스에 종속적이지 않다. 사용하는 DB에 따라 방언을 통해 SQL을 작성하게 된다.

각각의 데이터베이스가 제공하는 SQL문법과 함수 등에는 조금의 차이가 존재한다.

  • 가변문자
    • MySQL: VARCHAR
    • Oracle: VARCHAR2
  • 문자열을 자르는 함수
    • SQL표준: SUBSTRING()
    • Oracle: SUBSTR()
  • 페이징
    • MySQL: LIMIT
    • Oracle: ROWNUM
      이러한 특정 DB마다의 고유한 기능을 방언이라고 한다.

JPA는 hibernate.dialect속성을 통해 방언을 설정할 수 있다.

  • H2: org.hibernate.dialect.H2Dialect
  • Oracle10g: org.hibernate.dialect.Oracle10gDialect
  • MySQL: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate는 위의 예시 방언 뿐 만 아니라 40가지 이상의 방언을 지원한다.
반응형