336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Spring Data JPA
JPA(Java Persistence API)
- 관계형 데이터베이스에 접근하기 위한 표준 ORM 기술을 제공 EJB에서 제공 되었던 엔티티 빈(Entity Bean)을 대체하는 기술
- 장점
- 객체지향적으로 데이터 관리 비즈니스 로직에 집중할 수 있으며 객체지향 개발이 가능
- 테이블 생성 변경 관리가 쉽다
- 로직을 쿼리에 지중하기 보다 객체 자체에 집중할 수 있다
- 빠른 개발이 가능
- 단점
- 어렵다
- 잘 이해하고 사용하지 않으면 데이터 손실 발생
- 성능상 문제가 있을 수 있다
Spring Data
- 오픈 소스 프로젝트이며 Spring 관련 어플리케이션에 새로운 데이터 접근 기술을 쉽게 사용하도록 도와주는 역할
- 단순한 통합 처리
- CRUD + 쿼리
- 동일한 인터페이스
- 페이징 처리
- 메소드 이름으로 쿼리 생성
- 스프링 MVC에서 ID 값만 넘겨도 도메인 클래스로 바인딩
Spring Data JPA (ORM 기술)
- 순수한 JDBC
- Connection Statement ResultSet을 이용한 JDBC
- Spring JDBC Template
- 보다 간단한 Spring의 MyBatis 방식
- Spring + JPA
- ORM 프레임워크가 단순한 CRUD 쿼리를 작성해주기 때문에 쿼리를 짤 필요가 없다
- Spring Data JPA
- 실제로 작성하지 않고 JpaRepository 인터페이스를 상속한다면 이미 정의가 되어 있다
- 그러나 인터페이스에 구현 클래스가 없다 -> 자동 생성이 되기 때문에
Spring Data JPA 기능
- 메소드 이름으로 쿼리 생성
- 메소드 이름으로 NamedQuery 호출
- @ Modify
- Specfication (DDD)
- VO 객체를 넘기면 쿼리가 생성되고 쿼리를 이용함
Spring Data 장점
- 코딩량이 현저히 줄어든다
- 도메인 클래스를 중요하게 다룸
- 비즈니스 로직 이해하기 쉬움
- 기존 쿼리는 다양한 테이블을 조인하기 때문에 가독성이 좋지 않음
- MyBatis는 쿼리를 열어보지 않으면 로직을 이해하기 쉽지 않다
- Spring Data는 쿼리를 열 필요없이 메소드 명만 보면 쿼리를 알 수 있다
- 많은 테스트 케이스 작성 가능
- 너무 복잡할 땐 SQL 사용
- 비즈니스 로직에 집중
Spring Data 주의
- DB, JDBC, Hibernate, JPA를 알아야 하기 때문에 학습하기가 어렵다
- Insert 하나를 실행하기 위해선 다양한 지식이 필요하기 때문에 어렵다
- JPA(하이버네이트)를 모르면 사용하기 어렵다
- 데이터베이스 설계에 많은 공부가 필요함
- 대부분의 문제는 JPA를 모르고 사용하기 때문
JPA 기본 로딩 전략
- N:1 기본값 즉시 로딩
- 사용하지 않는 값들 까지 즉시 로딩하기 때문에 지연로딩 전략 설정
- 최적화 필요시 Fetch Join 설정
JPA 이해
- 영속성 컨텍스트 이해
- 자동 변경 감지 (VO 객체에 값을 Set 시키면 변경 감지한다)
- 트랜잭션 커밋시 자동 DB Update
- 연관관계 매핑중에 mappedBy 이해
- JPQL 한계 인식
Template Callback Pattern (익명 클래스)
- 스프링에서 전략 패턴의 기본 구조로 익명 내부 클래스를 활용한 방식
- 전략 패턴의 컨텍스트를 템플릿이라 부르고 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부름
- 템블릿
- 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀
- 콜백
- 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달되는 오브젝트
'[ Developer ] > Spring Framework' 카테고리의 다른 글
[Spring] 스프링 기반 간단한 게시판 (2) | 2016.06.30 |
---|---|
[Spring] 스프링 웹 소켓이란? 웹 소켓으로 간단한 채팅 만들기 Web Socket (7) | 2016.06.15 |
[Spring] 스프링 JDBC와 OJDBC의 차이 (0) | 2016.06.14 |
[Spring] 스프링 다이나믹 쿼리 Dynamic Query (1) | 2016.06.13 |
[Spring] 스프링 쿼리 Query (0) | 2016.06.13 |