Spring Data JPA란 무엇인가
JPA, Hibernate, 그리고 Spring Data JPA의 차이점
- Hibernate를 저수준으로 직접 사용하려면, 영속성 컨텍스트를 개발자가 직접 소스코드 내에서 관리해야 한다
- 영속성 컨텍스트 팩토리 생성 → 영속성 컨텍스트 생성 → 트랜잭션 선언 → 쿼리 수행 → 트랜잭션 종료 → 영속성 컨텍스트 종료
- Spring Data JPA는 각종 JPA 구현체(Hibernate)등을 사용하기 쉽게 추상화 해주는 역할
- Repository 클래스를 만들어 놓고, find, save, delete를 를 호출하면 조회/저장/삭제가 수행된다 된다
Spring MVC상의 데이터 전달 이해
<aside>
💡 Spring data JPA는 대부분 Spring MVC와 함께 사용됩니다. Spring MVC의 가장 핵심 기능인 '데이터베이스에서 데이터를 꺼내 클라이언트에 전달한다'에서 데이터베이스와 연결되어 데이터를 꺼내오는 Repository와 Entity 부분을 처리하는 데 사용되는데요.
여기서는 Spring MVC의 전체적인 흐름에서, Spring data JPA가 어느 부분에서 어떤 역할을 담당하고, 어떻게 불리우는지 설명합니다.
</aside>

- MVC패턴에서 각 객체들은 자기만의 역할이 존재한다
- 객체의 역할은 크게 3가지로 나뉜다
- 데이터의 형태를 정의하는 객체
- 데이터를 DB에서 꺼내오는 객체
- 데이터를 운반하는 객체
데이터의 형태를 정의하는 객체 : Entity
- 비즈니스 로직의 도메인에 필요한 데이터의 형태를 정의하는 객체
- 쇼핑몰 웹서비스를 만든다고 가정하자
- 쇼핑몰에는 당연히 고객과 상품이 필요하다
- 고객에 대한 정의 → 고객은 id, name, address, grade를 가진다.
- 상품에 대한 정의 → 상품은 id, name, price를 가진다
- 엔티티와 그 필드는 실제 데이터베이스의 테이블/컬럼과 매핑됨
- User 클래스는 실제로 User 테이블에 저장된다
- id 필드는 id 컬럼에 매핑, name 필드는 name 컬럼과 매핑...
데이터를 DB에서 꺼내오는 객체 : DAO, Repository
- DAO : Servlet에게 요청을 받아, DB에 접근한 뒤 조회된 데이터를 DTO에 담는 메서드들을 가지는 클래스
DAO vs Repository 비교
DAO와 Repository의 차이점에 대해 알고 싶습니다.
데이터를 운반하는 객체 : DTO, Model, VO
- Repository에서 꺼내온 데이터는 기본적으로 Entity 클래스의 인스턴스 내에 저장이 된다
- 그러나, 소스코드상에서 Entity 인스턴스를 직접 주고받아서는 안된다
- MVC의 Controller, Service의 메서드에서 Entity를 직접 인자로 받거나, Entity의 field에 직접 접근해서는 안된다