영속성 컨텍스트의 기능 중 Lazy loading, Eager loading에 대해 공부하다보니 N + 1문제를 접했다. JPA를 쓰다 보면 N + 1 문제를 흔히 접할 수 있고, 면접의 질문으로도 많이 나온다고 한다. N + 1문제에 대해 알아보자N + 1 문제란?N + 1문제는 엔티티의 연관관계를 통해 다른 엔티티를 조회할 때, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상이다. 예를 들어, 블로그 게시글과 댓글이 있는 경우, 게시글 목록을 조회한 후(1번의 쿼리) 각 게시글마다 댓글을 조회하기 위한 추가 쿼리(N번의 쿼리)가 발생할 수 있다. // 엔티티 관계 설정@Entitypublic class Post { @Id private Long id; priv..
개발자는 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다고 이전 시간에 알아보았다. 그럼 엔티티 매니저는 정확히 무엇이며 어떤 역할을 할까?엔티티 매니저(Entity Manager)엔티티 매니저는 영속성 컨텍스트라는 메모리 공간을 관리하는 객체이다. 엔티티 매니저 팩토리(Entity Manager Factory)엔티티 매니저 팩토리는 엔티티 매니저 인스턴스를 생성하는 팩토리다. 💡왜 엔티티 매니저 팩토리는 팩토리 패턴으로 만들어 졌을까? 엔티티 매니저는 가벼운 객체지만, 이를 생성하는 데 필요한 메타데이터 초기화는 무거운 작업이다. 팩토리 패턴을 사용하면 이런 무거운 초기화 작업을 한 번만 수행하고, 이후에는 가벼운 엔티티 매니저 인스턴스를 효율적으로 생성할 수 있다. 팩토리 패턴은 애플리케이..
영속성 컨텍스트는 JPA에서 중요한 핵심 개념이라고 많이 들었는데 영속성 컨텍스트는 정확히 뭘까?영속성 컨텍스트영속성 컨텍스트는 '엔티티를 영구 저장하는 환경'으로, JPA가 관리하는 엔티티 객체의 집합이다. 엔티티 매니저를 통해 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 물리적으로 JVM 메모리(Heap 영역)에 할당되지만 개발자가 직접 접근할 수 없고, EntityManager를 통해서 간접적으로 사용하는 논리적인 개념이다. 영속성 컨텍스트는 Map 형태의 자료구조를 가지며 [ 키: @Id, 값: 엔티티 인스턴스 ] 형태를 띈다. `Map` 영속성 컨텍스트의 동작을 이해하기 위해선 엔티티 생명주기를 먼저 알아야 한다.엔티티의 생명주기비영속(n..
개발을 하다보면, 넣어 놓은 dump data로 테스트를 진행한다. 이 때, `ddl-auto: create`로 설정해 다 날리곤 했다.보통 `create`와 `update`만을 사용했는데, 다른 옵션은 어떤 것들이 있는지 궁금해졌다. ddl-auto란?`ddl-auto` 옵션은 스프링 부트 애플리케이션에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정이다. 이 옵션은 `application.properties` 또는 `application.yml` 파일에서 설정하며, 각 옵션 값에 따라 데이터 베이스 스키마에 대해 다른 동작을 수행한다. `ddl-auto` 옵션에는 `none`, `validate`, `update`, `create`, `create-dr..
JpaMetamodelEntityInformation의 isNew()public class JpaMetamodelEntityInformation extends AbstractEntityInformation implements JpaEntityInformation { private final Optional> versionAttribute; // 생성자와 다른 필드 및 메서드들... @Override public boolean isNew(T entity) { if(versionAttribute.isEmpty() // @Version 어노테이션이 적용된 필드가 없는지 확인 || versionAttribute.map..