예전에 실무를 하게 되면서 JPA 강의를 듣게 되었는데 기억이 안나는 부분도 있고, 복습을 하고 싶어서 다시 학습을 시작했다.
나는 Inflearn에서 김영한의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의로 학습했다.
강의를 들으면서 핵심 내용이나 내가 기록하고 싶은 내용 위주로 정리를 해보려고 한다.
1. JPA란?
- Java Persistence API
- 자바 진영의 ORM 기술 표준
2. ORM이란?
- 객체 관계 매핑 (Object-relational mapping)
- 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계
3. JPA를 사용해야 하는 이유
- SQL 중심적 개발에서 객체 중심으로 개발하기 위함
- 생산성
: CRUD(저장, 조회, 수정, 삭제)가 편리함
- 유지보수
: 기존엔 빌드 변경시 모든 SQL을 수정해야 했지만 JPA는 필드만 추가하면 됨
- 패러다임 불일치 해결
: 상속, 연관관계, 객체 그래프 탐색에서 개발자가 할 일이 줄어듦 (JPA가 쿼리를 처리해줌)
: JPA와 비교하기 -> 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장
- 성능 최적화 기능
: 1차 캐시와 동일성 보장
-> 같은 트랜잭션 안에서는 같은 엔티티를 반환
: 쓰기 지연
-> INSERT (커밋하는 순간 데이터베이스에서 INSERT SQL을 모아서 보냄)
-> UPDATE (커밋하는 순간 데이터베이스에 UPDATE, DELETE SQL을 보냄)
: 지연 로딩
-> 지연 로딩 (객체가 실제 사용될 때 로딩)
-> 즉시 로등 (JOIN SQL로 한 번에 연관된 객체까지 미리 조회)
4. 객체와 테이블을 생성하고 매핑하기
- @Entity : JPA가 관리할 객체
- @Id : 데이터베이스 PK와 매핑
주의
- 엔티티 매니저는 다 사용 후에 버려야함 (close() 해줘야함)
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
5. JPQL(Java Persistence Query Language)
- JPA를 사용하면 엔티티 객체를 중심으로 개발
- 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL 필요
- JPQL은 엔티티 객체를 대상으로 쿼리 날림 (SQL은 데이터베이스 테이블 대상)
- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
- 특정 데이터베이스 SQL에 의존하지 않음 (방언을 바꿔도 JPQL 코드를 바꿀 필요 없음)
- 객체지향 SQL임
'학습' 카테고리의 다른 글
[Java] JPA 강의 - 4 (엔티티 매핑) (0) | 2024.01.17 |
---|---|
[Java] JPA 강의 - 3 (영속성 관리) (0) | 2024.01.11 |
[Java] Arrays 클래스 (0) | 2023.10.17 |
[Java] Stack & Queue (0) | 2023.10.16 |
[Java] HashMap, TreeSet (0) | 2023.10.13 |