본문으로 바로가기

[JPA] JPA에 관해..

category Back-end/Spring 2016. 5. 4. 09:30

JPA 

Entity Bean 이라는 표준 ORM

자바 퍼시스턴스 API (Java Persistence API, JPA )


JPA를 쓰려면 자바 구현체 하이버네이트를 써야됨.


EJB 없이 해보자 하고 만든 것이 Spring Framework

하이버네이트 :  EJB 엔티티빈 기술을 대체

JPA라는 새로운 표준 정의


데이터 저장은 마이바티스 쓴다.

zeroturnaround 통계

+ JRebel 만든 곳

+ 서버를 중단하지 않고 클래스 파일 대체, 프레임워크에 따라 수정이 많음

+ 전 세계 자바 사용자들이 어떤 프레임워크를 사용하는지 가장 민감한 회사


사실상 표준

Spring JPA Hibernate 사용


Spring Data 쓰면 하둡, 마이에스큐엘, 노드제이에스 등 모두 쓸 수 있다.

단순한 통합 그 이상 

* CRUD+쿼리

* 페이징 처리

* 동일한 인터페이스

* 메서드 이름으로 쿼리 생성

* 스프링 mvc 에서 id 값만 넘겨도 도메인 클레스로 바인딩


[Spring Data JPA]

JDBC ( connection, statement ) -> Spring jdbc Template ( My batis ) -> Spring + JPA ( ORM )

-> Spring Data JPA ( 미리 crud가 다 만들어져 있음 ) 


인터페이스를 만들면 Spring Data JPA가 구현체를 만들어줌

메서드 이름으로 쿼리생성

메서드 이름으로 NamedQuery 호출

Specification 구현 (설명구현)


TDD : Test JUnit을 이용해 개발하는 것

DDD : VO짜고 구조 잡아야 하는것



DTO : Data Transfer Object


장점

* 코딩량이 줄음

* 도메인 클래스를 중요하게 다룸

* 비지니스 로직 이해 쉬움 ( 쿼리만 보고도 로직이 이해가 됨, 메소드명 만으로 쿼리를 짜기 때문에 )

* 더 많은 테스트 케이스 작성 가능


선행 공부되야 할 내용

영속성 컨텍스트

자동 변경 감지 ( VO에 Setter를 호출하는 순간 db에 업데이트 됨) 문제 : 트랜잭션 어떻게 하나?

언제 영속성 컨텍스트가 플러시 되는가 ( 따로 커밋되는 순간이 있음 )


엔티티매니저 = 영속성 컨텍스트

여러개의 엔티티 매니저가  하나의 영속성 컨텍스트에  접근함.

POJO 오로지 JDK로만 쓰여진것 순수 자바 (Plain Old Java Object)


영속성 컨텍스트의 이점

* 캡슐화로 계속 여러 layer로 감싸서 10개의 기능을 쓰기위해 10개 메소드 모두 호출하는 것이 아니라

하나의 메소드만 출력할 수 있도록 만들어준다.

* layer : 여러개의 추상화 클래스를 하나로 이어주는 것 

* 캐싱 : 내가 가진 데이터를 다른이에게 공유하는 것

 - 캐시 클러스터링 : 공유하는 것

* 동일성 보장


* 비영속 객체 : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. ++ 데이터베이스에 들어가지 않은 데이터 캐시에만 있는 데이터

* 영속 객체 :  Entity 객체가 영속 객체가 된 상황은 크게 2가지가 있다. New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우와 DB 테이블에 저장돼 있는 데이터를 find 메소드 또는 query를 사용해 조회한 경우다. 이 상태는 Persistence Context가 관리하는 상태이며, 해당 객체를 수정했는지(자동 변경 감지) 알아낼 수 있다. ++ 데이터베이스에 들어간 데이터



지금만 필요할 때, 준 영속성 JPA 캐시에는 객체가 들어간다.


업데이트 쿼리

* 델타방식 : 바뀐 부분만 업데이트하는 방식

* 바이너리 방식 : 전체바꾸는 방식


dao라고 안씀 -> repository ( spring에서 쓰는말 )


지금만 필요할 때, 준 영속성


싱글톤 : biz, dao등 한번 만들어두면 다시만들 필요없이 다시 오는것



참고 도서 : JPA2, 하이버네이트 

강연자  : 김영한

'Back-end > Spring' 카테고리의 다른 글

[Spring] 공부문제  (2) 2016.05.31
[JPA] 사용해보기  (2) 2016.05.04
[HTML] 자동완성 기능 만들기  (0) 2016.05.03
[HTML] 서버돌리지 않고 창 띄우기  (0) 2016.05.02
[HTML5] WebSocket을 이용한 채팅 만들기  (0) 2016.04.22