01. JPA 소개
가장 중요한 강의라 함
왜 이 기술이 나왔고, 어디에 필요한지 알아야함
#
SQL 중심적 개발의 문제점지금 시대는 객체를 관계형 DB로 관리하는 시대
#
문제점- SQL 중심적 코드
- SQL를 뺄 수 없어 SQL 중심적 코드를 작성할 수 밖에 없음
- CRUD 코드를 만들 때 반복되는 쿼리
- 패러다임의 불일치, 객체 vs 쿼리
- 객체를 SQL 변환하여 RDB에 적재해야함
- 개발자가 SQL 매퍼 역할을 해야함
- (차이점) 객체 vs RDB
- 상속
- 테이블은 슈퍼타입, 서브타입 관계가 있음
- 서브타입을 만들면 테이블이 나눠져 있어 두개의 쿼리나 조인 쿼리를 만들고....
- 연관관계
- 객체는 참조, 테이블은 외래키를 사용
- 쿼리에 따라 객체 그래프 탐색에 대한 신뢰문제가 생김
- 계층형 아키텍처의 진정한 의미를 지키기 힘듦
- 데이터 타입
- 데이터 식별 방법
- 상속
- 객체 지향적으로 작업할수록 매핑 작업만 늘어남
#
문제점에 대한 결론- 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까?
- 그 결과가
JPA
#
JPA 소개- JPA: Java Persistence API
- JAVA 진영의 ORM 기술 표준
- ORM: Object-relational Mapping
- 객체는 객체대로 설계
- 테이블은 테이블 대로 설계
- 중간에 차이들은 ORM 프레임워크가 해결해준다는 것
- JPA는 jdbc 를 사용해서 쿼리를 직접 생성해 DB와 통신
- 객체와 관계형 테이블의 페러다임 불일치를 해결
#
역사- EJB: 엔터티 빈 (자바 표준)
- 너무 아마추어적인 기술.. 속도도 느림.. 기능도 잘 안됨...
- 하이버네이트
- 오픈소스
- JPA (자바 표준)
- 하이버네이트를 복사 붙여넣기 하다시피 만든 ORM 표준: JPA
- 표준 스펙으로 만들다보니 깔끔함
- 인터페이스(껍데기)의 모음
- 구현체는
- Hibernate (메인)
- EclipseLink
- DataNucleus
#
왜 JPA를 사용해야하는가- SQL 중심적인 개발에서 객체 중심으로 개발 전환 가능
- 생산성
- java collection 같이
- C:
jpa.persist(member)
- R:
Member member = jpa.find(memberId)
- U:
member.setName("other name")
- D:
jpa.remove(member)
- 유지보수
- 기존 SQL 중심에서는 관련된 객체의 모든 쿼리를 수정해야함
- JPA 를 사용하면 클래스에 필드하나 추가하면 됨
- 페러다임 불일치 해결
- 객체 상속관계는 알아서 insert 쿼리 두개 만듦
- 조회도 알아서 조인 쿼리 만들어줌
- 연관관계, 객체 그래프 탐색 해결
- 신뢰할 수 있는 엔터티, 계층
- 지연 로딩으로 객체를 사용하는 시점에 쿼리를 날려 객체를 가져옴
- 비교하기
- 동일한 트랙잭션에서 가져오는 엔터티는 같음을 보장
- 성능 최적화 기능
- 1차 캐시와 동일성 보장
- 트랜잭션을 지원하는 쓰기 지원 (transactional write-behind)
- 커밋 시점에 쿼리를 한꺼번에 보내줌
- 지연로딩 (lazy-loading)
- 옵션으로 지연로딩/즉시로딩을 왔다갔다 할 수 있음
#
ORMORM은 결국 객체와 RDB 두 기둥위에 있는 기술
- 객체, RDB 둘다 중요하지만
- 보통 RDB의 데이터가 객체 구현보다 더 오래 살아남음