2. 영속성 관리 (JPA 동작 원리)

JPA (Java Persistence API)의 핵심 개념 중 하나는 영속성 관리입니다. 영속성 관리는 JPA가 엔티티의 상태를 추적하고 데이터베이스와의 상호작용을 관리하는 기능을 의미합니다. JPA의 영속성 관리는 다음과 같은 동작 원리를 따릅니다

1. 영속성 컨텍스트 (Persistence Context) 생성

JPA에서 영속성 관리는 엔티티 매니저 (Entity Manager)를 통해 이루어집니다. 엔티티 매니저는 영속성 컨텍스트를 생성하여 엔티티의 영속성 상태를 관리합니다. 영속성 컨텍스트는 논리적인 작업 단위로 동작하며, 엔티티의 상태 변경을 추적하고 데이터베이스와의 동기화를 담당합니다.

2. 엔티티의 영속화 (Persistence)

엔티티 매니저를 사용하여 엔티티를 영속화할 수 있습니다. 영속화란 엔티티를 영속성 컨텍스트에 저장하는 것을 의미합니다. 영속화된 엔티티는 영속성 컨텍스트에 의해 관리되며, 이후의 변경 사항은 자동으로 추적됩니다.

3. 변경 감지 (Dirty Checking)

영속성 컨텍스트는 엔티티의 변경 사항을 지속적으로 추적합니다. 변경 사항이 발생하면 자동으로 데이터베이스에 반영됩니다. 이를 위해 영속성 컨텍스트는 엔티티의 원본 상태와 현재 상태를 비교하여 변경된 속성을 감지합니다. 변경된 속성만을 대상으로 SQL 쿼리를 생성하여 데이터베이스에 반영하므로 효율적인 업데이트가 이루어집니다.

4. 지연 로딩 (Lazy Loading)

JPA는 엔티티의 연관 관계를 지연 로딩으로 설정할 수 있습니다. 지연 로딩은 연관된 엔티티를 실제로 사용할 때까지 로딩을 지연시킴으로써 성능을 최적화할 수 있습니다. 지연 로딩은 실제로 연관된 엔티티를 사용할 때 필요한 데이터를 로딩합니다.

5. 트랜잭션 관리

JPA는 트랜잭션을 사용하여 데이터베이스 작업을 그룹화합니다. 엔티티 매니저를 통해 시작된 트랜잭션 내에서 영속성 컨텍스트는 엔티티의 변경을 추적하고, 트랜잭션이 커밋될 때 변경 사항을 데이터베이스에 반영합니다. 트랜잭션 롤백 시 변경된 엔티티는 이전 상태로 복원됩니다.

JPA의 영속성 관리는 개발자가 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있도록 도와줍니다. 영속성 컨텍스트를 통해 엔티티의 변경을 추적하고, 변경된 엔티티를 효율적으로 데이터베이스에 반영함으로써 개발자는 복잡한 SQL 쿼리 작성이나 데이터베이스 접근 관련 로직에 신경쓰지 않고도 객체 중심의 개발에 집중할 수 있습니다.

Last updated