※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다.
▶ 기존 SQL 중심적인 개발의 문제점
- 관계형 데이터베이스를 사용하게 되면 SQL에 의존적인 개발을 피할 수 없다.
- 객체 지향이 나오게 된 사상과 관계형 데이터베이스가 나오게 된 사상은 다르기에 패러다임의 불일치가 발생한다.
- 계층형 아키텍쳐를 설계하기가 까다롭고 어렵다.
=> 1980년대부터 이어져 온 고민 : 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까?
▶ JPA 개념
: Java Persistence API
: 자바 진영의 ORM 기술 표준
※ ORM
- Object-Relational Mapping (객체 관계 매핑)
- 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계
- ORM 프레임워크가 중간에서 매핑하는 방식
- 대중적인 언어에는 대부분 ORM 기술이 존재함
▶ JPA의 장점
1. 생산성
→ 저장 : jpa.persist(member)
→ 조회 : Member member = jpa.find(memberId)
→ 수정 : member.setName("이름")
→ 삭제 : jpa.remove(member)
2. 유지보수
→ 기존에는 필드 변경 시 모든 SQL을 수정해야 하지만, JPA는 필드를 추가해주면 JPA가 SQL 자동 처리
3. 패러다임의 불일치 해결
→ 상속 : 관계형 DB에서의 상속관계를 표현하는 복잡한 방식을 간단하게 처리해줌
→ 연관관계
→ 객체 그래프 탐색
▶ JPA의 성능 최적화
- 1차 캐시와 동일성(identity) 보장
→ 같은 트랜잭션 안에서 같은 엔티티 반환 (약간의 조회 성능 향상)
※ 여기서 말하는 캐시는 트랜잭션이 생성되고 빠져나갈 때까지 유지되는 상당히 짧은 캐시
- 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)
→ 트랜잭션을 커밋할 때까지 INSERT SQL을 모으고, JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
- 지연 로딩 (Lazy Loading)
→ 객체가 실제 사용될 때 로딩
※ JPA의 간단한 특징 및 기능
1. JPA와 데이터베이스
: JPA는 특정 데이터베이스에 종속되지 않는다.
→ 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름
→ hibernate.dialect 기능을 통해 40가지 이상의 데이터베이스 방언을 지원해줌
2. 객체와 테이블을 생성하고 매핑하는 기능
- @Entity : JPA가 관리할 객체
- @Id : 데이터베이스 PK와 매핑
3. 주의사항
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드 간에 공유 X -> 사용하고 버려야 함
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
'JVM > JPA' 카테고리의 다른 글
객체지향 쿼리 언어 (JPQL) (0) | 2021.04.18 |
---|---|
값 타입 (0) | 2021.04.16 |
Proxy와 연관관계 관리 (0) | 2021.04.16 |
Entity Mapping (0) | 2021.04.15 |
영속성 관리 (0) | 2021.04.11 |