Chapter 1: JPA 소개
💡 책에서 기억하고 싶은 내용
1. SQL을 직접 다룰 때 발생하는 문제점
진정한 의미의
계층 분할
이 어렵다엔티티를 신뢰할 수 없다
SQL에 의존적인 개발을 피할 수 없다
1-1. JPA와 문제 해결
JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하는 것이 아니라
JPA가 제공하는 API
를 사용하면 된다그러면 JPA가 개발자 대신에 적절한 SQL을 생성하여 데이터베이스에 전달한다
JPA는 별도의 수정 method를 제공하지 않는다
대신에 객체를 조회해서 값을 변경만 하면, 트랜잭션을 커밋할 때 데이터베이스에 적절한
UPDATE SQL
이 전달된다
2. 패러다임의 불일치
객체는
속성(field)
과기능(method)
을 가진다객체의 기능은 클래스에 정의되어 있으므로, 객체 인스턴스의 상태인
속성
만 저장했다가 필요할 때 불러와서 복구하면 된다
객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다
이것을 객체와 관계형 데이터베이스의
패러다임 불일치
라고 한다
패러다임 불일치로 발생하는 문제점은 아래와 같다
2-1. 상속
객체는 상속이라는 기능을 가지고 있지만, 테이블을 상속이라는 기능이 없다
JPA는 상속과 관련된 패러다임의 불일치를 개발자 대신 해결해 준다
개발자는 마치 자바 컬렉션에 객체를 저장하듯이 JPA에게 객체를 저장하면 된다
JPA의
persist()
method를 사용해서 객체를 저장할 수 있다
2-2. 연관관계
객체는
참조
를 사용해서 다른 객체와연관관계
를 가지고, 참조에 접근해서 연관관계 객체를 조회한다객체는
참조가 있는 방향
으로만 조회할 수 있다
테이블은
외래 키
를 사용해서 다른 테이블과 연관관계를 가지고,JOIN
을 사용해서 연관된 테이블을 조회한다JPA는 참조를 외래키로 변환해서 적절한
INSERT SQL
을 데이터베이스에 전달한다객체를 조회할 때 외래 키를 참조로 변환하는 일도 JPA가 처리해준다
2-3. 객체 그래프 탐색
SQL을 직접 다루면
처음 실행하는 SQL
에 따라 객체 그래프를어디까지 탐색할 수 있는지
정해진다이것은 객체지향 개발자에겐 너무 큰 제약이다
왜냐하면 비즈니스 로직에 따라 사용하는 객체 그래프가 다른데, 언제 끊어질지 모를 객체 그래프를 함부로 탐색할 수는 없기 때문이다
JPA는
연관된 객체를 사용하는 시점
에 적절한 SELECT SQL을 실행한다JPA를 사용하면 연관된 객체를 신뢰하고 마음껏 조회할 수 있다
이 기능은 실제 객체를 사용하는 시점까지 데이터베이스를 미룬다고 해서
지연 로딩
이라 한다
JPA는 지연 로딩을
투명(transparent)
하게 처리한다엔티티에 JPA와 관련된 어떤 코드도 직접 사용하지 않는다
JPA는 연관된 객체를
즉시 함께 조회
할지 아니면실제 사용하는 시점에 지연해서 조회
할지를 간단한 설정으로 정의할 수 있다
2-4. 비교
데이터베이스는
기본 키(PK)
의 값으로 각 row 를 구분한다객체는
동일성(identity)
비교와동등성(equality)
비교라는 두 가지 비교 방법이 있다동일성 비교는
==
비교이며, 객체 인스턴스의주소 값
을 비교한다동등성 비교는
eqauls()
method를 사용해서객체 내부의 값
을 비교한다
JPA는
같은 트랜잭션
일 때, 같은 객체가 조회되는 것을 보장한다
3. JPA란 무엇인가?
JPA(Java Persistence API)는 자바 진영의
ORM 기술 표준
이다자바 ORM 기술에 대한 API 표준 명세다
ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달해주는 것뿐만 아니라, 다양한
패러다임의 불일치 문제
도 해결해 준다따라서 객체 측면에서는
정교한 객체 모델링
을 할 수 있고, 관계형 데이터베이스는 데이터베이스에 맞게 모델링 하면 된다그리고 둘을 어떻게 매핑해야 하는지
매핑 방법
만 ORM 프레임워크에게 알려주면 된다
JPA를 사용해야 하는 이유
생산성
유지보수
패러다임의 불일치 해결
성능
데이터 접근 추상화와 벤더 독립성
표준
Last updated