본문 바로가기
카테고리 없음

[JPA] 3장 - 영속성 관리

by idea4952 2025. 5. 16.

데이터베이스와 애플리케이션을 연결하는 기술인 JPA(Java Persistence API)를 사용할 때, 가장 중요한 개념은 무엇일까요? 바로 '영속성 관리'입니다. 이 개념을 제대로 이해하지 않으면 JPA를 제대로 활용할 수 없습니다. 그렇다면 영속성 관리는 어떤 것이며, 왜 중요할까요?

 

비용 절감 팁!

 

 

JPA는 객체와 관계형 데이터베이스를 매핑하는 기술입니다. 이때 JPA는 영속성 컨텍스트라는 개념을 통해 객체를 관리하고 데이터베이스와 연동합니다. 따라서 JPA를 제대로 사용하려면 영속성 관리에 대한 이해가 필수적입니다.

 

엔티티 매니저 팩토리와 엔티티 매니저

JPA에서 엔티티 매니저 팩토리는 엔티티 매니저를 생성하는 역할을 합니다. 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 작업을 처리합니다. 개발자 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 됩니다.

 

영속성 컨텍스트란?

JPA에서 가장 중요한 개념은 '영속성 컨텍스트'입니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경입니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면, 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다.

 

엔티티의 생명주기

엔티티에는 4가지 상태가 존재합니다. 비영속(new/transient), 영속(managed), 준영속(detached), 삭제(removed)입니다. 이 상태들은 엔티티 매니저와 영속성 컨텍스트와의 관계에 따라 변화합니다. 엔티티의 상태 변화를 이해하면 JPA를 더 효과적으로 사용할 수 있습니다.

 

영속성 컨텍스트의 특징

1차 캐시

영속성 컨텍스트는 엔티티를 1차 캐시에 보관합니다. 이를 통해 동일성 보장, 성능 향상 등의 이점을 얻을 수 있습니다.

 

트랜잭션을 지원하는 쓰기 지연

영속성 컨텍스트는 트랜잭션을 지원하는 쓰기 지연 기능을 제공합니다. 이를 통해 데이터베이스 접근 횟수를 줄일 수 있습니다.

 

변경 감지

영속성 컨텍스트는 엔티티의 변경 사항을 자동으로 감지하여 데이터베이스에 반영합니다. 이를 통해 개발자가 직접 SQL을 작성할 필요가 없습니다.

 

지연 로딩

영속성 컨텍스트는 연관된 엔티티를 필요한 시점에 로딩하는 지연 로딩 기능을 제공합니다. 이를 통해 불필요한 데이터 로딩을 방지할 수 있습니다.

 

플러시

플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정입니다. 플러시가 실행되면 변경 감지, 쓰기 지연 SQL 저장소 등의 기능이 동작합니다.

 

준영속

준영속 상태는 영속성 컨텍스트에 저장되었다가 분리된 상태입니다. 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없습니다. 엔티티를 준영속 상태로 만드는 방법에는 em.detach(), em.clear(), em.close() 등이 있습니다.

 

정리

JPA에서 영속성 관리는 매우 중요한 개념입니다. 엔티티 매니저 팩토리와 엔티티 매니저, 영속성 컨텍스트, 엔티티의 생명주기, 영속성 컨텍스트의 특징, 플러시, 준영속 등을 이해하면 JPA를 더 효과적으로 활용할 수 있습니다.

 

JPA를 사용할 때 영속성 관리에 대한 이해가 부족하다면 어떤 문제가 발생할 수 있을까요?

 

이 글을 통해 JPA의 핵심 개념인 영속성 관리에 대해 자세히 살펴보았습니다. 이제 JPA를 사용할 때 영속성 컨텍스트와 엔티티의 생명주기를 잘 이해하고 활용할 수 있을 것입니다. 이를 바탕으로 데이터베이스와 애플리케이션을 효과적으로 연동할 수 있을 것입니다. 앞으로 JPA를 사용할 때 어떤 점에 주목해야 할지 고민해 보시기 바랍니다.

 

자주 묻는 질문

엔티티 매니저 팩토리와 엔티티 매니저의 차이는 무엇인가요?

엔티티 매니저 팩토리는 엔티티 매니저를 생성하는 공장 역할을 합니다. 애플리케이션에서 엔티티 매니저 팩토리를 한 번만 생성하고, 필요할 때마다 엔티티 매니저를 생성해서 사용합니다. 엔티티 매니저는 실제로 엔티티를 저장, 수정, 삭제, 조회하는 등의 작업을 수행하는 관리자 역할을 합니다.

 

영속성 컨텍스트란 무엇인가요?

영속성 컨텍스트는 엔티티를 영구 저장하는 환경입니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 영속성 컨텍스트는 엔티티를 식별자 값으로 구분하며, 엔티티의 상태 변화를 감지하고 데이터베이스에 반영하는 등의 역할을 합니다.

 

엔티티의 생명주기에는 어떤 상태가 있나요?

엔티티에는 4가지 상태가 존재합니다: 1) 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 2) 영속(managed): 영속성 컨텍스트에 저장된 상태 3) 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 4) 삭제(removed): 삭제된 상태

 

플러시(flush)는 무엇이며 어떤 역할을 하나요?

플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 역할을 합니다. 플러시를 실행하면 변경 감지가 동작하여 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해 수정된 엔티티를 찾습니다. 그리고 수정된 엔티티에 대한 수정 쿼리를 쓰기 지연 SQL 저장소에 등록하고, 이 쿼리들을 데이터베이스에 전송합니다.

 

준영속 상태의 엔티티는 어떤 특징이 있나요?

준영속 상태의 엔티티는 영속성 컨텍스트가 더 이상 관리하지 않는 상태입니다. 따라서 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없습니다. 영속 상태의 엔티티를 준영속 상태로 만드는 방법에는 em.detach(entity), em.clear(), em.close() 등이 있습니다.