일급 컬렉션에 대해서 설명해 주세요.
·
백엔드 면접
일급 컬렉션(First-Class Collection)은 하나의 컬렉션을 감싸는 클래스를 만들고, 해당 클래스에서 컬렉션과 관련된 비즈니스 로직을 관리하는 패턴을 말합니다.// 일급 컬렉션public class Orders { private final List orders; public Orders(List orders) { validate(orders); // 검증 수행 ... } public void add(Order order) { if (order == null) { throw new IllegalArgumentException("Order cannot be null"); } orders.add..
Checked Exception과 Unchecked Exception에 대해서 설명해 주세요.
·
백엔드 면접
Checked Exception은 컴파일 시점에 확인되며, 반드시 처리해야 하는 예외입니다. 자바에서는 IOException, SQLException 등이 이에 속합니다. Checked Exception을 유발하는 메서드를 호출하는 경우, 메서드에 throws를 명시적으로 선언해 호출자에게 예외를 위임하거나 메서드 내에서 try-catch를 사용하여 해당 예외를 반드시 처리해야 합니다. Unchecked Exception은 런타임 시점에 발생하는 예외로, 컴파일러가 처리 여부를 강제하지 않습니다. 자바에서는 RuntimeException을 상속한 예외들이 해당됩니다. 일반적으로 개발자의 실수나 코드 오류로 인해 발생합니다. 각각 언제 사용해야 할까요? Checked Exception은 외부 환경과의 상호..
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..
@Value 어노테이션 사용 시 주의할 점을 설명해 주세요.
·
백엔드 면접
@Value 어노테이션 주의점@Value는 설정 파일에 설정한 값을 주입할 수 있는 어노테이션입니다.첫 번째로 주의해야 할 점은 주입 시점입니다. @Value 어노테이션은 대상 컴포넌트가 스프링 빈으로 등록되고 의존 관계를 주입할 때 동작합니다. 따라서 환경 변수를 주입받는 대상 클래스가 스프링 빈으로 등록되지 않았다면 해당 클래스는 @Value 어노테이션이 동작하지 않습니다. 또한 상황에 따라서 적절한 주입 방식을 선택해야 합니다. 빈을 주입받을 때와 마찬가지로 @Value 어노테이션을 사용할 때도 필드 주입, 생성자 주입, setter 주입 등의 방식을 사용할 수 있습니다. 따라서 상황에 따라 적절한 주입 방식을 선택해야 합니다. 마지막으로 프로퍼티 파일의 경로와 스코프를 확인해야 합니다. appli..
RAID 기술에 대해서 설명해주세요.
·
백엔드 면접
RAID (Redundant Array of Independent Disks)RAID는 수많은 데이터들을 안전하게 저장하거나 성능을 높이기 위해 여러 하드 디스크나 SSD를 마치 하나의 장치처럼 사용하는 기술입니다.  RAID 구성 방식(종류)에 대해서 설명해 주세요. RAID 0은 여러 보조기억장치에 데이터를 나누어 저장하는 구성 방식입니다. 데이터를 저장할 때 하드 디스크는 각 장치에 번갈아 가며 데이터를 저장합니다. 이때 줄무늬처럼 분산되어 저장된 데이터를 스트라이프라고 하며, 분산하여 저장하는 방식을 스트라이핑이라고 합니다.데이터를 분산하여 저장하기 때문에 저장된 데이터를 읽고 쓰는 속도가 빨라집니다. 하나의 대용량 저장 장치를 사용하면 여러 번에 걸쳐 읽고 써야 하는 데이터를 동시에 읽고 쓸 수..
OSIV 옵션에 대해서 설명해주세요.
·
백엔드 면접
OSIV (Open Session In View)OSIV는 영속성 컨텍스트를 뷰까지 열어둔다는 의미입니다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지될 수 있어, 뷰에서도 지연 로딩을 사용할 수 있습니다. OSIV의 핵심은 뷰에서도 지연 로딩이 가능하도록 하는 것입니다. 가장 단순한 구현은 클라이언트 요청이 들어올 때 필터나 인터셉터에서 트랜잭션을 시작하는 방법이 있습니다. 이를 트랜잭션 방식 OSIV 라고 합니다. 하지만, 트랜잭션 방식 OSIV는 표현 계층에서도 엔티티를 수정할 수 있기 때문에 유지보수하기 어려운 코드를 만들 수 있습니다.트랜잭션 방식의 OSIV 문제는 어떻게 해결할 수 있을까요?최신 방식의 OSIV는 트랜잭션 방식의 문제를 해결합니다. 스프링 OSIV는 OSIV를 사용하..