TIL #13 220317

Subeeen·2022년 3월 17일
0

Today I Learned

목록 보기
13/18
post-thumbnail

자바 표준 ORM 프로그래밍 기본편 강의를 듣고 정리한 내용입니다.

JPA

JPA는 Java Persistence API로, 자바 진영의 ORM 기술 표준이다.

ORM?

Object-relational mapping(객체 관계 매핑).
객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.
ORM 프레임워크가 그 중간에서 매핑한다.

JPA는 애플리케이션과 JDBC 사이에서 동작한다.

JPA의 특징

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
    저장 : jpa.persist(member)
    조회 : Member member = jpa.find(memberId)
    수정 : member.setName("변경할 이름")
    삭제 : jpa.remove(member)
  • 유지보수
    기존에는 필드 변경 시 모든 SQL문을 수정해야 했지만, JPA는 필드만 추가하면 된다. SQL은 JPA가 처리한다.
  • 객체 상속 관계 저장, 조회가 쉽다.

JPA의 성능 최적화 기능

  1. 1차 캐시와 동일성 보장
  • 같은 트랜잭션 안에서는 같은 엔티티를 반환한다.
  • DB Isolation Level (격리 수준:트랜잭션에서 일관성이 없는 데이터를 허용하는 수준)이 Read Commit 이어도 애플리케이션에서 Repeatable Read (트랜잭션이 범위 내에서 조회한 데이터의 내용이 항상 동일함)를 보장한다.
  1. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
  • INSERT - 트랜잭션을 커밋할 때 까지 INSERT SQL을 모았다가, transaction.commit 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
  • UPDATE - 트랜잭션 커밋 시 UPDATE, DELETE SQL을 실행하고 커밋한다.

지연 로딩과 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 로딩되는 것
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회하는 것

데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속되어 있지 않다.
  • 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 다르다.
  • 가변 문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2
  • 문자열을 자르는 함수 : SQL표준은 SUBSTRING(), Oracle은 SUBSTR()
  • 페이징 : MySQL은 LIMIT, Oracle은 ROWNUM

    방언 : SQL표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

데이터베이스 방언은 persistence.xml 파일에서 hibernate.dialect 속성에 지정한다.

  • H2 : org.hibernate.dialect.H2Dialect
  • Oracle 10g : org.hibernate.dialect.Orcale10Dialect
  • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
    .. 등등 하이버네이트는 40가지 이상의 데이터베이스 방언을 지원한다.
profile
백엔드 개발 공부 중!

0개의 댓글