일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 아이템29
- Immutable Object
- 아이템30
- 최범균
- 아이템 23
- 아이템 25
- criteriaquery
- cicd
- 아이템 24
- 아이템 26
- 이펙티브자바
- JPQL
- 아이템 27
- Domain Driven Design
- Spring Batch
- ddd
- java
- 아이템 22
- 객체지향 쿼리 언어
- 아이템31
- 일ㅊ
- GitHub Actions
- jdbc
- 자바 ORM 표준 JPA 프로그래밍
- Github Actions Cache
- JPA
- 도메인 주도 개발 시작하기
- Docker cache
- Docker Layer
- 아이템 28
- Today
- Total
코딩은 마라톤
[자바 ORM 표준 JPA 프로그래밍] 1장. JPA 소개 본문
JDBC
- JDBC를 사용하여 DB에 접근할 경우, JDBC API를 사용해서 SQL을 DB에 전달한다.
1. SQL을 직접 다룰 경우 생기는 문제점
- SQL을 직접 다룰 경우, CRUD용 SQL을 반복해서 작성해야하는 비생산적인 과정을 수행해야한다.
- SQL에 의존적인 개발을 하게 된다. (테이블에 컬럼을 추가시 연관된 SQL을 모두 수정해야한다.)
2. 객체지향 DB의 패러다임 불일치
- 상속 : 객체는 상속 기능 O VS 테이블은 상속 기능 X
- 연관관계 : 객체는 참조를 통해 연관 객체 조회 VS 테이블은 외래키와 조인을 사용해서 조회
- 객체 그래프 탐색 : SQL을 직접 다룰 경우, SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다.
- 비교 : 동일성(==) 비교시 같은 멤버 id에서 꺼내오더라도 두 객체는 같지 않다.
=> 이를 JPA가 해결해준다.
JPA
- 자바 진영의 ORM(Object-Relational-Mapping) 기술 표준
- 자바 ORM 기술에 대한 API 표준 명세
- 애플리케이션과 JDBC 사이에서 동작
ORM
- 객체와 관계형 데이터베이스를 매핑
- 위에 기술한 객체와 테이블의 패러다임 불일치 문제를 개발자 대신 해결
=> 객체 측면에서는 정교한 객체 모델링을 할 수 있고, 관계형 DB에서는 데이터베이스에 맞도록 모델링 하면 된다.
=> 둘을 어떻게 매핑해야하는지 매핑 방법만 ORM 프레임워크에 알려주면 된다.
JPA 사용 이유
- 생산성
jpa.persist(member); // 저장
Member member = jpa.find(memberId) // 조회
- 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다.
- 유지보수
- SQL을 직접 다룰 경우, 엔티티에 필드 하나만 추가해도 관련된 모든 JDBC API 코드를 모두 변경해야한다.
- JPA는 대신 처리해주므로 유지보수해야하는 코드 수가 줄어든다.
- 패러다임의 불일치 해결
- 성능
Long memberId = 1L;
Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);
- 같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 코드에서 JDBC API를 사용하면 SELECT SQL을 두 번 사용한다.
=> JPA를 사용하면 회원 조회 SELECT SQL을 한번만 DB에 전달하고 두 번째는 조회한 회원 객체를 재사용한다.
- 데이터 접근 추상화와 벤더 독립성
- 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.
ex) dev : MySQL, local : h2 일 경우, h2에서 JPA를 사용하다가 개발 환경에서 MySQL로 옮겨 사용할 수 있다.
- 표준
- JPA는 자바 진영의 ORM 기술 표준이다.
- 표준이기 때문에 다른 구현 기술로 손쉽게 변경할 수 있다.
출처 : 자바 ORM 표준 JPA 프로그래밍 책
'Backend > JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 5장. 연관관계 매핑 기초 (0) | 2024.02.04 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 4장. 엔티티 매핑 (0) | 2024.02.02 |
[자바 ORM 표준 JPA 프로그래밍] 3장. 영속성 관리 (0) | 2024.01.29 |
[자바 ORM 표준 JPA 프로그래밍] 2장. Java + Gradle 설정 (1) | 2024.01.28 |
Entity Listener의 활용 (AuditingEntityListener) (0) | 2023.11.03 |