스프링/개념

JPA : 데이터 베이스와의 상호작용을 위한 특징

문상휘파람 2024. 10. 8. 15:25

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와 상호작용 할 수 있습니다.