Spring Data JPA는 JPA라는 기술을 스프링에서 개발할 수 있도록 돕는 라이브러리입니다.
이를 이용하면 다양한 데이터베이스에 종속적인 SQL문 없이도 개발이 가능하여 개발의 생상성을 높일 수 있습니다.
JPA란
Java 관련 기술 스펙의 하나입니다.
간단히 Java를 이용해서 데이터를 관리(유지)하는 기법으로 하나의 스펙으로 정리한 표준이라 할 수 있습니다.
Java 진영에서는 EJB라는 기술 스펙에서 엔티티 빈이라는 데이터를 처리하는 스펙을 정한 것이 JPA 시초입니다.
JPA를 이해하기 전 ORM를 알아야 합니다.
ORM은 객체지향에서 말하는 객체와 데이터베이스에서 말하는 개체가 상당히 유사합니다.
ORM은 특정한 언어에 종속적이 개념이 아닙니다. 다른 언어에서도 ORM 관련 프레임워크들이 많이 존재하듯
ORM 자체는 객체지향, 관계형 데이터베이스를 매핑시키는 추상화된 개념입니다.
ORM이 일종의 비전에 불과하면 JPA는 Java에서 이를 구현하기 위한 상세화 통과 기준이라 할 수 있습니다.
간단히 기존의 JDBC 등을 이용해서 직접 구현했던 데이터베이스 관련 작업을 대신 처리해 주는 추상화된
계층의 구현 스펙이라 할 수 있습니다.
장점
1. 데이터베이스 관련 코드에 대해 유연함을 얻을 수 있습니다.
- 테이블 생성 등과 같은 작업으로부터 변경되는 DB 설계, Java 설계를 한 번에 처리 가능하여
익숙해지면 빠른 생산성을 얻을 수 있습니다.
2. 데이터베이스와 독립적 관계입니다.
- 특정 데이터베이스에 종속적이지 않아 개발자들은 제품, 버전 변경되는 영향에 자유로워질 수 있습니다.
단점
1. 학습 곡선이 큽니다.
- 새로운 개념, 기술을 익히는 학습 곡선이 크기 때문에 쉽게 적용하기 어렵습니다.
2. 근본적인 객체지향 설계 사상이 반영되어야 합니다.
- JPA는 '어떻게 적합한 객체들의 관계를 작성할 것인가? 가 프로젝트의 성패를 좌우합니다.
- 이과정에서는 충분한 설계, 검토 과정을 거쳐야 합니다.
3. 특정 데이터베이스의 강력함을 활용이 안됩니다.
- JPA를 이용하면 SQL 튜닝 등의 작업에 제약이 생깁니다.
JPA를 이용하면 Java로 작성된 클래스, 객체들과 데이터베이스상에 테이블, 레코드들을
자동으로 관리됩니다.
개발자는 별도의 SQL을 작성이 불필요하고 원하는 객체 지향의 구조를 설계하는 것만 드로 모든
개발을 끝낼 수 있습니다.
엔티티(Entity),
데이터베이스상에 데이터로 관리하는 대상을 의미합니다.
데이터베이스에서는 엔티티를 위해서 일반적으로 테이블을 설계하고
데이터를 추가하고 이렇게 추가된 데이터는 '인스턴스', '레코드' 라는 용어로 호칭합니다.
JPA에서는 '하나의 엔티티 타입을 생성한다' 는 '하나의 클래스'를 작성한다는 의미 입니다.
엔티티 매니저(EntityManager)
여러 엔티티 객체들을 관리하는 역할을 합니다.
자신이 관리해야 하는 엔티티 객체들을 '영속 컨텍스트'라는 곳에 넣어두고 객체들의 생사를 관리 합니다.
영속 컨텍스트
JAP가 엔티티 객체들을 모아두는 '공간'이라고 이해 가능 합니다.
컨텍스트라는 용어는 하나의 공간, 울타리라는 개념으로 이해하는 것이 좋습니다.
New(비영속)
Java 영역에 객체만 존재하고 데이터베이스와 연동된 적이 없는 상태
엔티티 매니저의 관리하에 있는 것이 아닌 순수한 Java 객체
Managed(영속)
데이터베이스에 저장되고 메모리상에서도 같은 상태로 존재하는 상태
객체는 영속 컨텍스트 내에 들어가고 pk값을 통해서 필요한 엔티티객체를 사용할 수 있게 됩니다.
Removed(삭제)
데이터베이스상에 삭제된 상태
객체는 더 이상 영속 컨텍스트에 존재하지 않습니다.
Detached(준영속)
영속 컨텍스트에서 엔티티 객체를 꺼내서 사용하는 상태
해당 상태의 객체는 고유한 PK를 가지고 있지만 데이터베이스와 동기화 되지 않는 상태 입니다.
기존의 JPA개발과 Spring Data JPA
JPA를 이용해서 개발하는 과정이 조금 복잡하지만 JPA에서는 엔티티매니저(EntityManager)라는 존재를
이용하여 '영속성'이라는 것을 관리하게 됩니다.
기존에 Java를 공부하는 경우 Java에서 인터페이스를 설계하고 이를 구현하는 클래스를
만드는 것이 일반적이지만 Spring Data JPA는 동적으로 인터페이스를 구현하는 클래스를 만들어 내는
방식(동적 프록시)를 이용해서 실제 클래스를 작성하지 않아도 자동으로 생성되어 별도의 코드를 작성
할 필요가 없습니다.
ManagedManagedManagedEntityManager
N
Newㄴㅇ
Detached
'백수 > java' 카테고리의 다른 글
자바 기초 (0) | 2022.12.01 |
---|---|
스프링 기초 3 (0) | 2022.11.21 |
java13 기초 (네트워크 프로그랭 기본 개념) (0) | 2022.10.25 |
java기초12(리스트,스택,큐,집합,해시 테이블) (0) | 2022.10.24 |
java기초 11 (제네릭 클래스, 메서드) (0) | 2022.10.20 |