728x90
JPA 란?
자바 언어를 위한 ORM (Object-Relational Mapping) 표준 스펙입니다
JPA 특징
- Entity
- 객체에 특정 어노테이션을 선언하면 DB에 자동으로 맵핑 된다.
- ORM 제공
- DB간의 변환, 영속성 관리, 쿼리 작성을 ORM으로 제공된다.]
- 영속성 : 객체를 메모리에서 DB에 저장 하거나 DB에서 메모리로 로드 하여 객체로 변환
- Transaction 관리
- 애플리케이션의 데이터 변경 작업을 트랜잭션 단위로 묶어서 일관성과 안정성을 유지 할수 있따.
- 커밋, 롤백을 사용하여 DB상태를 유지 할수있다.
- 객체 그래프 탐색
- 연관된 객체들을 탐색 하고 접근 하는 과정
- 지연 로딩(Lazy Loading) : 연관된 엔티티를 실제로 사용 할때 까지 로딩을 지연 시킨다.
- 필요한 엔티티만 로딩 하기 때문에 쿼리 수행 횟수가 줄어든다.
- 연관된 엔티티 사용시 지연 로딩 오류가 발생할수 있다.
- 즉시 로딩(Eager Loading?) : 연관된 엔티티를 바로 로딩 시킨다.
- 한번위 쿼리로 모든 연관된 엔티티를 가져오므로 DB에 부하가 될수 있다.
- 필요하지 않은 엔티티 까지 로딩되므로 메모리 사용량이 증가 할수있다.
- 지연 로딩 오류가 발생할 가능성이 적다.
- 지연 로딩(Lazy Loading) 오류 란?
- 세션(Session)/트랜잭션(Transaction) 종료된 후에 로딩을 시도하는 경우
- 직렬화(Serialization)하여 저장 하거나 네트워크를 통해 전송하는 경우
- JPA에서는 지연 로딩(Lazy Loading)을 통해 연관된 엔티티를 필요한 시점에 로딩 하는데, 이때 객체 그래프 상의 연관된 엔티티들은 실제로 로딩되기전까지 프록시(Proxy) 형태로 존재합니다.
프록시는 DB와의 연결이 필요하기 때문에 DB 연결이 끊어진 이후 데이터를 사용할수있기에 프록시를 로딩할 수 없는 오류가 생깁니다..
- JPA에서는 지연 로딩(Lazy Loading)을 통해 연관된 엔티티를 필요한 시점에 로딩 하는데, 이때 객체 그래프 상의 연관된 엔티티들은 실제로 로딩되기전까지 프록시(Proxy) 형태로 존재합니다.
- 엔티티 외부에서의 로딩 시도
- 만약 지연 로딩으로 설정된 연관관계를 외부에서 로딩하려고 시도할 경우, 영속성 컨텍스트가 없거나 연관된 엔티티를 로딩할 수 있는 세션이 없기 때문에 오류가 발생할 수 있습니다.
- 쿼리 작성과 실행
- JPQL이라는 객체 지향 쿼리 언어를 제공합니다.
- 성능 최적화
- 캐시 기능과 지연 로딩을 통해 성능 최적화를 지원합니다.
- 이식성
- JPA는 자바 표준 스펙으로서 다양한 ORM 프레임 워크에서 구현 될 수 있다.
- (예: Hibernate, EclipseLink)
- 변경 감지(Dirty Checking)
- 영속성 컨텍스트가 엔티티의 상태 변화를 감지하여 자동으로 데이터베이스에 변경 사항을 반영하는 기능을 말합니다.
JPA의 장단점
장점
- 생산성 향상
- JPA는 객체와 데이터베이스 간의 매핑을 자동화하고, SQL 작성 및 데이터베이스 연동 작업을 간소화하여 개발자의 생산성을 향상시킵니다.
객체지향적인 코드를 작성할 수 있으며, CRUD 작업을 간단한 API로 처리할 수 있습니다.
- JPA는 객체와 데이터베이스 간의 매핑을 자동화하고, SQL 작성 및 데이터베이스 연동 작업을 간소화하여 개발자의 생산성을 향상시킵니다.
- 이식성(포터빌리티)
- JPA는 플랫폼 독립적인 표준 인터페이스를 제공하므로, 다양한 데이터베이스 시스템에서 동일한 코드를 사용할 수 있습니다.
데이터베이스 변경 시에도 소스 코드 수정을 최소화하고, 다른 JPA 구현체로의 전환도 비교적 쉽게 이루어집니다.
- JPA는 플랫폼 독립적인 표준 인터페이스를 제공하므로, 다양한 데이터베이스 시스템에서 동일한 코드를 사용할 수 있습니다.
- 유지보수 및 확장성 향상
- JPA를 사용하면 데이터베이스 스키마의 변경에 유연하게 대응할 수 있습니다.
엔티티 클래스를 수정하는 것만으로 스키마 변경에 대한 대부분의 작업을 처리할 수 있습니다.
또한, JPA는 다양한 기능과 성능 향상을 위한 옵션과 설정을 제공하여 애플리케이션의 유지보수성과 확장성을 향상시킬 수 있습니다.
- JPA를 사용하면 데이터베이스 스키마의 변경에 유연하게 대응할 수 있습니다.
단점
- 학습 곡선과 복잡성
- JPA는 ORM(Object-Relational Mapping) 기술로서 객체와 데이터베이스 간의 매핑을 추상화하고 자동화하기 때문에 학습 곡선이 존재합니다.
JPA의 기능과 설정에 대한 이해와 숙달이 필요하며, 복잡한 데이터베이스 구조나 성능 최적화를 위해서는 추가적인 고려 사항이 필요할 수 있습니다.
- JPA는 ORM(Object-Relational Mapping) 기술로서 객체와 데이터베이스 간의 매핑을 추상화하고 자동화하기 때문에 학습 곡선이 존재합니다.
- 성능 문제
- JPA는 매핑과 관련된 작업을 자동으로 처리하기 때문에 일부 상황에서 성능 문제가 발생할 수 있습니다.
잘못된 쿼리 생성, 지연 로딩과 즉시 로딩 설정의 적절한 선택, 캐시 관리 등을 고려하여 성능을 최적화해야 합니다.
- JPA는 매핑과 관련된 작업을 자동으로 처리하기 때문에 일부 상황에서 성능 문제가 발생할 수 있습니다.
- 제한된 데이터베이스 특성 활용
- JPA는 데이터베이스의 모든 기능을 직접적으로 활용하기 보다는 표준 인터페이스로 추상화하고 일부 공통 기능만을 제공합니다.
따라서 데이터베이스 특정 기능이나 최적화된 쿼리 작성을 위해서는 JPA보다는 네이티브 SQL 쿼리나 데이터베이스 특화 기술을 활용해야 할 수 있습니다.
- JPA는 데이터베이스의 모든 기능을 직접적으로 활용하기 보다는 표준 인터페이스로 추상화하고 일부 공통 기능만을 제공합니다.
728x90
'BackEnd > Spring Boot' 카테고리의 다른 글
JPA의 ddl-auto 속성과 그 특징 (0) | 2023.06.09 |
---|---|
JPA 적응기_1 (0) | 2023.05.21 |
영속성 이란? (0) | 2023.05.21 |
JPA Entity 작성_1 (공통, 같은 테이블) (0) | 2023.05.15 |
jasypt 설정 하기 (0) | 2023.05.01 |