- 자바 ORM 표준 JPA 프로그래밍(김영한 지음) 책을 읽고 나중에 찾아보기 위한 목적으로 기록.
- 저작권에 문제가 될 시 삭제하겠습니다.
- 진정한 의미의 계층 분할이 어렵다.
- DAO를 열어서 어떤 SQL이 실행되고 어떤 객체들이 함께 조회되는지 일일이 확인해야함.
- 엔티티(비즈니스 요구사항을 모델링한 객체)를 신뢰할 수 없다. : SQL에 의존하기때문
- 하나의 객체가 연관된 다른 객체를 사용할 수 있을지 없을지는 전적으로 사용하는 SQL에 달려 있음
- SQL에 의존적인 개발을 피하기 어렵다.
- 객체 모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다.
- 객체는 참조를 사용해서 다른 객체와 연관관계를 가짐
- 테이블(DB)은 외래 키를 사용해서 다른 테이블과의 연관관계를 가지고 조인을 사용해서 조회
- 따라서, 이 패러다임의 차이를 극복하기 위해 개발자가 너무 많은 시간과 코드를 소비
- 참조와 외래키 차이를 극복하기 위해.
- 시간이 지나면서 객체 모델링은 힘을 잃고 점점 데이터 중심의 모델로 변해간다.
- 이런 문제를 해결하기 위해 JPA의 등장.
- JPA : Java Persistence API, 자바 진영의 ORM 기술 표준
- ORM : Object-Relational Mapping, 객체와 관계형 데이터베이스를 매핑
- 객체와 테이블 패러다임 불일치 문제를 해결 해줌.
- 애플리케이션과 JDBC 사이에서 동작
- 객체 -> ORM 프레임워크에 저장 -> ORM 프레임워크는 Entity 분석, 적절한 SQL 생성, 패러다임 불일치 문제 해결, JDBC API 사용 -> DB에 INSERT
- 과거 엔터프라이즈 자바 빈즈(EJB)에서 엔티티 빈이라는 ORM 기술이 포함되어 있었으나 너무 복잡하고 기술 성숙도가 떨어졌었고
- 이때 하이버네이트 라는 오픈소스 ORM 프레임워크의 등장 -> 많은 개발자들이 사용하기 시작
- 결국 EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어짐 , 이것이 JPA
- JPA는 자바 ORM 기술에 대한 API 표준 명세( 즉, 인터페이스 모음)
- 따라서 JPA를 사용하려면 이를 구현한 ORM 프레임워크를 선택해야 함.
- 생산성
- 지루하고 반복적인 CRUD SQL을 개발자가 직접 작성하지 않아도 됨.
- 유지보수
- SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 SQL과 결과 매핑을 위한 JDBC API 코드를 모두 수정해야 했음. But JPA가 이 과정을 대신 해주므로 유지보수 해야할 코드 수 절감.
- 패러다임 불일치 문제를 해결 따라서 좋은 도메인 모델 설계 가능해짐
- 페러다임 불일치 문제 해결
- 성능
- 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회 제공
- 데이터 접근 추상화와 벤더 독립성
- DB 벤더마다 페이징 처리 방식이 다름.
- 하지만 JPA는 애플리케이션과 DB 사이에 추상화된 데이터 접근 계층을 제공(Dialect)
- 따라서 특정 DB 기술에 종속되지 않음.
- 표준
- 객체와 관계형 데이터베이스를 어떻게 매핑하는지 학습
- 영속성 컨텍스트 이해 필요(JPA 핵심 개념)
- 객체지향, 관계형 데이터 베이스의 기초 필요