스프링 프레임워크를 공부를 끝내고, 새롭게 들어간 자바 ORM 표준 JPA 프로그래밍을 들으면서 알게된 내용들을 정리해보자 한다. 먼저 JPA를 설명하기 전에 ORM에 대해서 알아보자면,
ORM(Object-relational mapping)
기존 객체와 관계형 데이터베이스 사이에 있는 패러다임 불일치
를 해결하기 위해 생겨났다. ORM은 객체 관계 매핑이라고 하며, 객체(Object)와 관계형 데이터베이스(RDB)의 매핑을 시켜주는 프레임워크이다.
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- 대부분 알고있는 언어들은 ORM 기술이 존재한다.
JPA(Java Persistence API)
ORM을 사용할 수 있는 인터페이스들의 모음이며, 마치 자바 컬렉션에 저장하고 꺼내는 것처럼 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
- 애플리케이션과 JDBC 사이에서 동작한다.
- 개발자가 직접 JDBC API를 호출해서 사용하는 것이 아니라 JPA에게 명령을 하면 JDBC API를 사용해서 SQL로 DB에 접근한 다음, 결과를 가져와 준다.
- 캐시를 사용하기 때문에 같은 트랜잭션에서 조회한 엔티티는 항상 똑같다.
- ORM에 대한 자바 API 규격
- 구현체 : Hibernate, EclipseLink, DataNucleus 등
- CRUD
- 저장 : jpa.persist(member)
- 조회 : Member member = jpa.find(memberId)
- 수정 : member.setName("변경할 이름")
- 삭제 : jpa.remove(member)
- 성능 최적화
- 1차 캐시와 동일성(identity) 보장
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 지연 로딩(Lazy loading)