728x90
📌 SQL을 직접 다룰 때 발생하는 문제점
✔️ 반복, 반복 그리고 반복
- DB는 객체 구조와는 다른 데이터 구조를 가져 객체를 DB에 직접 저장하거나 조회할 수 없다. 따라서 개발자가 직접 애플리케이션과 API 중간에서 변환 작업을 직접 해야 한다.
- 객체를 DB에 CRUD하려면 너무 많은 코드를 작성해야 한다. 즉, 비슷한 일을 계속 반복해야 한다.
✔️ SQL에 의존적인 개발
- 기능을 모두 개발하고 나서 추가적인 요청이 들어왔을 때 너무 많은 코드(등록, 수정, 연관 객체 등)를 수정해야 한다.
- 엔티티를 신뢰하고 사용할 수 없다. 일일이 확인해야 한다.
- 강한 의존관계를 가져 진정한 의미의 계층 분할이 아니다.
✔️ JPA와 문제 해결
- JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때 JPA가 제공하는 API를 사용한다.
- persist() : 저장 기능. 객체와 매핑 정보를 보고 적절한 INSERT SQL을 생성해서 전달한다.
jpa.persist(member); // 저장
- find() : 조회 기능. 객체와 매핑 정보를 보고 적절한 SELECT SQL을 생성해서 데이터베이스에 전달하고 그 결과로 객체를 생성해서 반환한다.
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId) // 조회
- JPA에서는 별도의 수정 메서드는 제공하지 않지만 객체를 조회해서 값을 변경하면 트랜잭션을 커밋할 때 데이터베이스에 적절한 UPDATE SQL이 전달된다.
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경") // 수정
- JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행한다. 쉽게 연관된 객체를 조회할 수 있다.
📌 패러다임의 불일치
데이터베이스에서는 객체지향의 추상화, 상속, 다형성 같은 개념이 없다.
객체와 관계형 데이터베이스는 지향하는 목적이 서로 달라 기능도 표현법도 다르다. → 패러다임의 불일치
✔️ 상속
- 데이터베이스에서는 상속이 없어 JDBC API를 이용해 표현하려면 부모 객체에서 데이터를 꺼내고 자식 객체에서 데이터를 꺼내는 과정이 필요하다.
- JPA는 Java 컬렉션에 저장하듯 사용하면 된다.
✔️ 연관관계
- 객체는 참조로 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회한다.
- 반면에 테이블은 외래 키로 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회한다.
- 객체를 테이블에 맞춰 모델링하면 저장과 조회가 쉽다. 하지만 좋은 모델링을 기대하기 어렵고 결국 객체지향의 특징을 잃어버리게 된다.
- 반대로 객체지향 모델링을 하면 저장과 조회가 어렵다. 중간에 개발자가 변환 역할을 해야 한다.
- JPA는 관계를 설정하고 저장하면 된다. 알아서 참조를 외래키로 변환해 SQL을 전달한다.
✔️ 객체 그래프 탐색
- 객체 그래프 탐색이란? 객체에서 참조를 사용해 연관된 객체를 찾는 것.
- SQL을 직접 다루면 SQL에 따라 탐색할 수 있는 범위가 정해지는 큰 제약이 생긴다. 로직에 따라 객체 그래프가 다르기 때문이다.
- JPA는 연관된 객체를 신뢰성 있게 조회할 수 있다. 이 기능은 실제 객체를 사용하는 시점까지 데이터베이스의 조회를 미룬다고 해서 지연 로딩이라고 한다.
✔️ 비교
- 객체를 구분하는 방법과 테이블의 로우를 구분하는 방법은 너무 차이가 나서 같은 인스턴스를 반환하도록 구현하는 것은 쉽지 않다.
- JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.
📌 JPA란 무엇인가?
JPA(Java Persistence API)는 Java 진영의 ORM 기술 표준.
JDBC(Java Database Connectivity) : Java에서 DB를 접속하는 JAVA API
ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻.
ORM 프레임워크가 개발자 대신 패러다임의 불일치 문제를 해결해준다.
✔️ JPA 소개
- EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준을 만들었다. 그게 JPA
- JPA를 구현한 ORM 프레임워크는 Hibernate, EclipseLink, DataNucleus가 있다.
✔️ 왜 JPA를 사용해야 하는가?
- 생산성 : 반복적인 일을 대신 처리해준다.
- 유지보수 : SQL과 JDBC API 코드를 대신 처리해줘서 코드 수가 줄어든다.
- 패러다임의 불일치 해결
- 성능 : 애플리케이션과 데이터베이스 사이 성능 최적화 기회를 제공한다.
- 데이터 접근 추상화와 벤더 독립성 : 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.
'개인 공부 > JPA (자바 ORM 표준 JPA 프로그래밍)' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 (6장) (0) | 2022.12.02 |
---|---|
자바 ORM 표준 JPA 프로그래밍 : 연관관계 매핑 기초 (5장) (0) | 2022.11.18 |
자바 ORM 표준 JPA 프로그래밍 : 엔티티 매핑 (4장) (1) | 2022.10.06 |
자바 ORM 표준 JPA 프로그래밍 : 영속성 관리 (3장) (0) | 2022.09.26 |
자바 ORM 표준 JPA 프로그래밍 : JPA 시작 (2장) (0) | 2022.09.15 |
댓글