JPA 란 무엇인가?
JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와 상호작용하기 위한 ORM(Object-Relational Mapping) 표준입니다.
데이터베이스와의 상호작용을 위한 주요 특징
1. 쓰기 지연 (Write-Behind / Write-Delay)
- 쓰기 지연은 JPA에서 성능을 최적화하기 위해 제공하는 기능입니다.
- 엔터티(객체)에 대한 변경 사항이 즉시 데이터베이스에 반영되지 않고, 트랜잭션이 커밋될 때까지 변경 사항을 보류합니다.
- 즉, 여러 변경 사항을 모아서 한 번에 데이터베이스에 반영하는 방식입니다. -> 데이터베이스와의 상호작용 횟수를 줄여 성능을 최적화할 수 있습니다.
2. 더티 체킹 (Dirty Checking)
- 더티 체킹은 JPA가 객체의 상태 변화를 감지하여, 자동으로 데이터베이스에 반영하는 기능입니다.
- 엔터티 객체의 속성 값을 변경하면, JPA는 그 변화를 감지하고, 트랜잭션이 커밋되는 시점에 자동으로 업데이트 쿼리를 생성해 데이터베이스에 반영합니다.
- 개발자가 별도로 update 쿼리를 작성하지 않아도 됩니다.
3. 1차 캐시(First-Level Cache)
- 영속성 컨텍스트는 1차 캐시로 동작합니다.
- 동일한 트랜잭션 내에서 동일한 엔터티를 여러 번 조회할 때, 데이터베이스를 다시 조회하지 않고 영속성 컨텍스트에서 캐시된 엔터티를 반환합니다.
- 이를 통해 데이터베이스 접근 횟수를 줄이고 성능을 최적화할 수 있습니다.
4. 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)
- 지연 로딩(Lazy Loading): 연관된 엔터티를 필요할 때만 로드합니다. 즉, 데이터가 처음 조회될 때는 로드되지 않고, 해당 연관 객체를 실제로 사용할 때 데이터베이스에서 조회됩니다.
- 즉시 로딩(Eager Loading): 엔터티를 조회할 때, 연관된 엔터티도 함께 로드됩니다. 즉시 로딩은 처음부터 모든 데이터를 가져오므로, 나중에 추가적인 데이터베이스 접근이 필요하지 않습니다.
5. JPQL (Java Persistence Query Language)
- JPQL은 SQL과 유사한 구문을 사용하여 엔터티 객체를 대상으로 쿼리를 작성하는 언어입니다.
- 엔터티 클래스와 객체 필드를 대상으로 쿼리를 작성합니다. -> 이를 통해 객체지향적으로 DB와 상호작용 할 수 있습니다.
'스프링 > 개념' 카테고리의 다른 글
트랜잭션(Transaction)에 관하여 (0) | 2024.10.05 |
---|---|
IoC(Inversion Of Control) 컨테이너와 스프링 빈(Bean) (1) | 2024.09.30 |
의존성 주입(DI)과 주입 방식 (0) | 2024.09.30 |
@Data 어노테이션에 관하여 (0) | 2024.09.30 |
Session 과 Session Login (0) | 2024.09.23 |