1장_ JPA 소개
Updated:
1. SQL을 직접 다룰 때 발생하는 문제점
- 진정한 의미의 계층 분할이 어렵다
- 엔티티를 신뢰할 수 없다
- SQL에 의존적인 개발을 피하기 어렵다
JPA는 이러한 문제들을 해결한다!
개발자가 직접 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면 된다.
그러면 JPA가 개발자 대신에 적절한 SQL을 생성해서 데이터베이스에 전달한다.
// 저장 기능
jpa.persist(member);
// 조회 기능
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId);
// 수정 기능
member.setName("이름변경");
// 연관된 객체 조회
Team team = member.getTeam();
2. 패러다임의 불일치
- 상속
- 객체는 상속이라는 기능을 가지고 있지만 테이블은 상속이라는 기능이 없다
- JDBC API를 사용해서 코드를 완성하려면 부모 객체에서 부모 데이터만 꺼내서 SQL을 작성하고, 자식 객체에서 자식 데이터만 꺼내서 SQL을 작성해야 하는데, 작성해야할 코드량이 만만치 않다
- 연관관계
- 객체는 참조를 사용해서 다른 객체와 연관관계를 가지고 참조에 접근해서 연관된 객체를 조회한다
- 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회한다
- 객체 그래프 탐색
- SQL을 직접 다루면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다
- 비즈니스 로직에 따라 사용하는 객체 그래프가 다르므로, 언제 끊어질지 모를 객체 그래프를 함부로 탐색할 수 없는 문제가 있다
- JPA를 사용하면 객체 그래프를 마음껏 탐색할 수 있다
member.getOrder().getOrderItem()...
- JPA는 실제 객체를 사용하는 시점까지 데이터베이스 조회를 미룬다고 해서 지연 로딩이라 한다.
- 비교
- 데이터베이스는 기본 키의 값으로 각 로우(row)를 구분한다
- 객체는 동일성(identity) 비교와 동등성(equality) 비교라는 두 가지 비교 방법이 있다
- 동일성 비교는 == 비교다. 객체 인스턴스의 주소 값을 비교한다
- 동등성 비교는 equals() 메소드를 사용해서 객체 내부의 값을 비교한다
Leave a comment