JPA에 대해 알아보려고 네이버에서 검색을 했습니다.
이일민님이 아주 좋은 글을 쓰신걸 발견하고 요약 해보겠습니다.
문제가 된다면 삭제 하겠습니다.


- 자바의 퍼시스턴스 기술은 자바 표준에 스펙을 정하고 그 구현을 각 DB벤더와 전문 업체들에게 맡기는 구조의 JDBC 라는 기술에서 출발함
- 90년대 후반에 등장한 EJB 기술에서는 그러한 JDBC을 기반으로 한 트랜잭션 스트립트 방식을 탈피해서 자바 객체의 특성을 유지한 채로 퍼시스턴스 기술을 적용할 수 있는 엔티티빈이 소개됨
- 엔터프라이즈 환경의 컴포넌트 기술인 EJB자체도 주목을 받았지만 그 중에서도 엔티티빈은 자바 클래스로 만든 빈을 이용해서 데이터 처리를 손쉽게 할 수 있다는 면에서 큰 관심의 대상이 됨

JPA의 등장전
- EJB와 엔티티빈에 열광한 많은 개발자들이 엔티티빈 기술을 적극 홍보
- 많은 개발자들이 엔티티빈 기술을 애플리케이션의 퍼시스턴스 기술로 사용하려는 시도함
- 엔티티빈을 적용한 시스템은 이전에 SQL 스크립트를 사용한 JDBC 방식에 비해서 터무니없이 데이터베이스에 걸 리는 부하가 큼
- EJB 1.x 시절 엔티티빈의 미숙한 기술을 발전시키려는 노력이 자바서버 벤더와 커뮤니티 사이에서 많이 진행
- 개발자가 JDBC 코드를 전혀 만들지 않더라도 매핑정보에 의해서 동작하는 발전된 CMP(Container Managed Persistence)기술로 무장한 EJB 2.0이 화려하게 등장
- CMP에서 문제점으로 지적되었던 엔티티 사이의 관계부분도 CMR(Container Managed Relationship)을 이용해서 선언적으로 처리
- 하지만 복잡한 퍼시스턴스 기능을 감당하기에 엔티티빈 2.0은 여전히 역부족
- 결국 2004년에 미국에서 조사된 바에 따르면 EJB 사용하는 엔터프라이즈 환경에서 CMP를 사용하는 비율이 1% 미만이라는 참담한 결과

엔티티빈의 대안 기술
JDO
- 인터페이스 기반의 퍼시스턴스 자바모델을 지향
- 엔터프라이즈 환경이 아닌 곳에서도 사용될 수 있는 자바 모델기반의 퍼시스턴스 기술
- 스펙의 이상주의적인 접근과 실질적인 한계 때문에 현장에서 그다지 사용되지 못하고 한 두 뛰어난 JDO 제품 벤더의 제품만 성공

하이버네이트
- POJO 기반의 가벼운 프레임워크라는 점과 관계형 데이터베이스(RDB)와의 실제적인 연동
- 객체-관계형디비-매핑(ORM)이라는 명칭을 사용
- POJO라는 반 EJB 캐치프레이즈를 모토로 삼아서 투명한 퍼시스턴스 기술을 지향
- 고가의 복합한 자바엔터프라이즈 환경을 선택하지 않아도 어떠한 자바환경에서도 동작하는 POJO 기술이라는 것도 엔티티빈에 비해서 뛰어난 장점

EJB 3.0의 등장
- 엔티티빈의 대안으로 오픈소스의 하이버네이트와 상용 퍼시스턴스 기술인 톱링크, 그리고 표준 기술인 JDO의 세 가지가 대두되면서 EJB 진영 내부에서 점차 반성의 목소리가 흘러나오기 시작
- 여러 가지 대안 기술이 오히려 현장에서 발전하고 있는 동안 EJB의 명성을 다시 찾기 위해서 엔티티빈 기술을 대폭적으로 손대야 한다는 목소리가 크게 나옴
- 초기 EJB 스펙을 설계하는 주도적인 역할에 참여한 사람은 하이버네이트의 창시자이자 개빈 킹
- 개빈 킹은 그의 하이버네이트를 통한 POJO 기반의 퍼시스턴스 프레임워크에 대한 기술적인 확신과 경험을 담아 EJB3.0의 엔티티빈 스펙을 완전히 새롭게 구성해 나가기 시작
- 개빈 킹이 만든 EJB3.0의 POJO 방식의 엔티티빈은 하이버네이트의 설계구조와 그 흐름이 유사한 모습

JPA의 독립
- EJB3.0 스펙작업을 하고 있던 전문가 그룹으로부터 엔티티빈/CMP파트를 독립적인 스펙으로 분리 발표
- J2EE WAS를 구매할 때 CMP 엔진은 다른 벤더 제품을 쓸 수도 있음
- 예를 들어 WebLogic 서버를 사용하면서 엔티티빈 엔진은 하이버네이트 기반의 CMP엔진을 써도 됨
- 결과적으로 EJB3.0 스펙은 두 가지로 구분이 됨. 첫째는 SessionBean과 MessageDriven Bean에 관한 것이고, 두 번째가 EJB3 Java Persistence API(JPA)
- JPA는 스펙이 분리된 후 이름이 엔티티빈에서 JPA로 변경
- JPA는 EJB 엔티티빈의 경량화와 개선에 머무른 것이 아니라 새로운 이름으로 자바의 모든 기술과 환경에서 사용할 수 있는 독립적인 POJO 기반의 퍼시스턴스 프레임워크로 새롭게 시작된 기술

JPA의 구성요소
JPA는 크게 여섯 가지 구성요소로 구분
(도메인오브젝트 모델,메타데이터 설정, API, 쿼리 작성방법, 라이프사이클, 콜백)

도메인 오브젝트(엔티티)
- JPA의 핵심 구성요소
- POJO

JPA 메타데이터
- 도메인 오브젝트 모델의 논리적인 구성정보로서의 메타데이터
- 오브젝트 모델을 실제 데이터베이스 스키마에 어떻게 연동할 것인가를 다루는 매핑 메타데이터
- 메타데이터는 자바5 이상의 어노테이션을 사용할 수 있고 동시에 XML을 이용한 메타정보 설정 가능

Java Persistence API
- JPA의 API는 javax.persistence 패키지 안에 정의
- API의 핵심 인터페이스는 EntityManager와 Query 두 가지

JPQL
- JPQL은 EJB2.x에서 사용하던 EJBQL2와 호환이 되는 JPA의 Query Langauge
- 오브젝트 구조의 쿼리란 점을 제외하면 SQL과 비슷한 문법
- 메타정보에 정의된 관계정보를 이용하면 복잡한 Join 설정 등이 필요하지 않기 때문에 훨씬 간결

Optimistic Locking
- 낙관적 락킹이라고 불리는 옵티미스틱 락킹(optimistic locking)은 사용자 트랜잭션이 긴 웹 기반의 애플리케이션에서 매우 유용한 락킹 기법의 하나
- 해당 레코드를 가져올 때의 버전이 후에 수정할 때 버전과 일치하면 그대로 커밋하고 그렇지 않으면 다른 사용자에 의해서 먼저 수정 되었다고 판단하고 예외를 발생

'이건뭐지?' 카테고리의 다른 글

JPA(Java Persistence API) 가 뭐지?  (3) 2008.01.17
Posted by 째코
TAG

댓글을 달아 주세요

  1. 기선 2008.01.17 22:40 신고  댓글주소  수정/삭제  댓글쓰기

    훨씬 정리를 잘 해두셨네요.
    많은 도움이 됐습니다. ㄳㄳ

  2. 시리니 2008.01.18 21:36  댓글주소  수정/삭제  댓글쓰기

    좋은 글 잘 읽었습니다. :)
    요새 자바에 사랑이 싹트고 있어서(이 무슨 망발...)그런지 잘 모르는 내용임에도 고개가 끄덕입니다. ^^;;

  3. 째코 2008.01.19 12:59 신고  댓글주소  수정/삭제  댓글쓰기

    이거 제가 쓴거 아니구요 이일민님이 쓰신거에요