[Spring Boot] Spring Data JPA
Spring Data JPA
- ORM
- JPA
- 영속성 컨텍스트
ORM
ORM (Object Relational Mapping) : 객체 관계 매핑
자바 클래스와 데이터베이스의 테이블은 다르다.
ORM은 이 사이의 차이와 제약사항을 해결하는 역할이다.
자바 객체를 DB 테이블, 레코드로 사용할 수 있게 하고, 자바 객체에서 DB 읽기, 쓰기가 가능하게 한다.
장점
- 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.
직접 쿼리문을 작성하지 않아도 되고, 코드 가독성도 높아진다.
- 데이터베이스에 대한 종속성이 줄어든다.
DB 교체 시 어떤 DB을 사용하는지 설정만 변경해준다면 알아서 동작한다.
단점
- 서비스 구현에 한계가 있다.
데이터량이 많은 경우 데이터 조회나 처리 시 속도 저하 등의 성능 문제가 발생할 수 있다.
빠른 속도를 위해 직접 쿼리문을 작성해야 하는 경우도 있다.
- 객체와 데이터베이스 관점의 불일치가 발생한다.
- 세분성(Granularity) - 참고
- 상속성(Inheritance) - RDBMS에는 상속의 개념이 없다.
- 식별성(Identity) - RDBMS는 PK(기본키) 값으로 동일성을 정의한다. 자바는 값이 같아도 인스턴스에 따라 다르다고 판단할 수도 있다.
- 연관성(Associations) : RDBMS는 FK(외래 키) 값으로 연관성을 표현한다.
JPA
JPA (Java Persistance API)
JPA는 자바에서 ORM기술 표준으로 채택된 인터페이스이다. JPA가 실제로 동작하는 것이 아니라 동작 방법, 방식을 정리해둔 것으로 보면 된다.
자바에서 사용할 ORM을 구현하기 위한 설계도면.
JPA를 기반으로 하는 구현체로 대표적인 Hibernate [하이버네이트]가 있다.
Spring Data JPA
Spring Data JPA는 JPA를 추상화한 Repository를 제공하여 스프링이 적합한 쿼리를 동적으로 생성해 데이터베이스를 조작한다. Hibernate에서 자주 사용되는 기능을 더 쉽게 사용할 수 있다.
Spring Data JPA는 Hibernate와 같은 JPA 구현체를 필요로 한다.
영속성 컨텍스트
영속성 컨텍스트는 객체를 보관하는 기능을 수행한다.
영속성 컨텍스트는 세션이 생성되면 만들어지고, 세션이 종료되면 사라진다.
엔티티 매니저
엔티티 매니저는 엔티티를 관리하는 객체이다. 영속성 컨텍스트에 등록하거나 삭제 혹은 엔티티 상태를 DB에 저장하는 역할을 한다.
엔티티 생명주기
- New : 영속성 컨텍스트에 추가되지 않은 엔티티 객체의 상태
- Managed : 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
- Detached : 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태
- Removed : 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태.