JPA의 N + 1 문제에 대해서 설명해 주세요.
·
백엔드 면접
JPA N + 1 문제는 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상입니다. 예를 들어 블로그 게시글과 댓글이 있는 경우, 게시글을 조회한 후 각 게시글마다 댓글을 조회하기 위해 추가 쿼리가 발생한다면 N + 1 문제가 발생한 것입니다. 댓글 10개가 달린 게시글 1개를 조회하는 데 총 11개의 쿼리(게시글 조회 1개 + 게시글의 댓글 조회 10개)가 실행된 것이지요.  findAll 메서드의 글로벌 페치 전략별 N + 1 문제 상황에 대해서 설명해 주세요.글로벌 페치 전략을 즉시로딩으로 설정하고 findAll()을 실행하면 N + 1 문제가 발생합니다. findAll()은 select e from Entity e라는 JPQL 구문을 생성..
엔티티 매니저에 대해 설명해 주세요.
·
백엔드 면접
엔티티 매니저를 설명하기 위해서는 먼저 영속성 컨텍스트에 대한 설명이 필요합니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐시, 쓰기 지연, 변경 감지 등을 통해 영속 로직을 효율적으로 할 수 있게 해 줍니다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 합니다. 이런 작업을 도와주는 것이 엔티티 매니저입니다. 엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용 함으로써 영속 로직을 수행하는 역할을 가지고 있습니다. 조금 더 구체적으로 엔티티 매니저의 역할을 설명해 주세요.엔티티는 영속성 컨텍스트와 관련하여 4가지 상태를 가질 수 있습니다. 엔티티 매니저는 persist, merge, remove, close 등의 메서드를 사용해 엔티티..
JPA의 ddl-auto 옵션에 대해서 설명해 주세요.
·
백엔드 면접
ddl-auto 옵션은 스프링 부트 애플리케이션에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정입니다. 이 옵션은 application.properties 또는 application.yml 파일에서 설정할 수 있으며, 다양한 값에 따라 데이터베이스 스키마에 대해 동작을 수행합니다. 옵션에는 none, validate, update, create, create-drop 등이 있습니다.  각 옵션에 대해 설명 해주세요.none은 데이터베이스 스키마와 관련된 어떠한 작업도 수행하지 않습니다. 데이터베이스 스키마를 수동으로 관리하고 싶을 때 유용하며, 프로덕션 환경에서 주로 사용됩니다. validate는 애플리케이션이 시작될 때, 엔티티 매핑이 데이터베이스 스키마..
Spring Data JPA에서 새로운 Entity인지 판단하는 방법은 무엇일까요?
·
백엔드 면접
새로운 엔티티인지 여부는 일반적인 경우 JpaEntityInformation 인터페이스의 구현체인 JpaMetamodelEntityInformation 클래스가 동작합니다. 이 클래스의 isNew(T entity) 에 의해 판단됩니다.  @Version이 사용된 필드가 없거나 @Version이 사용된 필드가 primitive 타입이면 AbstractEntityInformation의 isNew(T entity)를 호출해 값이 0인지를 확인합니다. @Version이 사용된 필드가 래퍼 클래스면 null 여부를 확인합니다.  @Version이 사용된 필드가 없어서 AbstractEntityInformation 클래스가 동작하면 @Id 어노테이션을 사용한 필드를 확인해서 primitive 타입이 아니라면 nul..
OSIV 옵션에 대해서 설명해주세요.
·
백엔드 면접
OSIV (Open Session In View)OSIV는 영속성 컨텍스트를 뷰까지 열어둔다는 의미입니다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지될 수 있어, 뷰에서도 지연 로딩을 사용할 수 있습니다. OSIV의 핵심은 뷰에서도 지연 로딩이 가능하도록 하는 것입니다. 가장 단순한 구현은 클라이언트 요청이 들어올 때 필터나 인터셉터에서 트랜잭션을 시작하는 방법이 있습니다. 이를 트랜잭션 방식 OSIV 라고 합니다. 하지만, 트랜잭션 방식 OSIV는 표현 계층에서도 엔티티를 수정할 수 있기 때문에 유지보수하기 어려운 코드를 만들 수 있습니다.트랜잭션 방식의 OSIV 문제는 어떻게 해결할 수 있을까요?최신 방식의 OSIV는 트랜잭션 방식의 문제를 해결합니다. 스프링 OSIV는 OSIV를 사용하..