Java Spring Framework 주니어 기술면접
새 면접Q. Spring Boot의 자동 설정(Auto Configuration) 기능이 무엇인지 설명하고, @SpringBootApplication 어노테이션이 포함하는 주요 어노테이션 3가지와 각각의 역할을 말씀해주세요.
@SpringBootApplication은 @Configuration, @EnableAutoConfiguration, @ComponentScan을 포함합니다. @Configuration은 해당 클래스를 설정 클래스로 지정하고, @EnableAutoConfiguration은 클래스패스의 라이브러리를 기반으로 자동으로 Bean을 등록하며, @ComponentScan은 현재 패키지 이하의 컴포넌트들을 스캔하여 Bean으로 등록합니다. 이를 통해 개발자가 복잡한 설정 없이도 Spring 애플리케이션을 빠르게 시작할 수 있습니다.
- • @SpringBootApplication은 @Configuration, @EnableAutoConfiguration, @ComponentScan을 포함
- • @EnableAutoConfiguration은 클래스패스 기반 자동 Bean 등록
- • @ComponentScan은 패키지 내 컴포넌트 자동 스캔
- • 복잡한 XML 설정 없이 빠른 애플리케이션 구성 가능
특정 자동 설정을 제외하고 싶을 때는 어떻게 해야 하며, application.properties와 application.yml의 차이점은 무엇인가요?
Q. JPA의 영속성 컨텍스트(Persistence Context)가 무엇인지 설명하고, 엔티티의 생명주기 4가지 상태(New, Managed, Detached, Removed)에 대해 설명해주세요.
영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로, 1차 캐시와 변경 감지 기능을 제공합니다. New는 영속성 컨텍스트와 관계없는 새로운 상태, Managed는 영속성 컨텍스트에 의해 관리되는 상태, Detached는 영속성 컨텍스트에서 분리된 상태, Removed는 삭제된 상태입니다. persist() 호출 시 New에서 Managed로, clear()나 detach() 호출 시 Managed에서 Detached로, remove() 호출 시 Removed 상태로 전환됩니다.
- • 영속성 컨텍스트는 엔티티 관리 환경으로 1차 캐시 제공
- • New(비영속), Managed(영속), Detached(준영속), Removed(삭제) 4가지 상태
- • Managed 상태에서만 변경 감지(Dirty Checking) 동작
- • 트랜잭션 커밋 시점에 변경사항이 DB에 반영됨
N+1 문제가 무엇이며, 이를 해결하기 위한 Fetch Join과 @EntityGraph의 차이점은 무엇인가요?
Q. Spring에서 예외를 전역적으로 처리하는 방법과 @ExceptionHandler, @ControllerAdvice의 역할을 설명하고, 비즈니스 예외와 시스템 예외를 구분하여 처리해야 하는 이유를 말씀해주세요.
@ControllerAdvice는 전역 예외 처리를 위한 클래스를 지정하고, @ExceptionHandler는 특정 예외를 처리하는 메서드를 지정합니다. 비즈니스 예외는 사용자에게 명확한 메시지를 전달해야 하므로 400번대 상태 코드와 함께 상세 정보를 제공하고, 시스템 예외는 보안을 위해 500번 상태 코드와 함께 일반적인 메시지만 제공해야 합니다. 이를 통해 일관된 예외 응답 구조를 유지하고 보안과 사용자 경험을 모두 개선할 수 있습니다.
- • @ControllerAdvice로 전역 예외 처리 클래스 정의
- • @ExceptionHandler로 특정 예외 타입별 처리 메서드 구현
- • 비즈니스 예외는 상세 메시지, 시스템 예외는 일반 메시지 반환
- • 일관된 예외 응답 구조로 클라이언트 처리 용이
RuntimeException과 Checked Exception의 차이점은 무엇이며, Spring에서는 어떤 예외를 사용하는 것이 좋을까요?
Q. Spring에서 요청 데이터 검증을 위해 사용하는 Bean Validation의 주요 어노테이션(@NotNull, @NotEmpty, @NotBlank, @Valid)의 차이점을 설명하고, BindingResult의 역할을 말씀해주세요.
@NotNull은 null만 체크하고, @NotEmpty는 null과 빈 문자열/컬렉션을 체크하며, @NotBlank는 null, 빈 문자열, 공백만 있는 문자열을 모두 체크합니다. @Valid는 객체의 필드에 선언된 검증 어노테이션을 실행하도록 지시합니다. BindingResult는 검증 오류 정보를 담는 객체로, 컨트롤러 메서드의 파라미터로 선언하면 검증 실패 시 예외가 발생하지 않고 오류 정보를 직접 처리할 수 있습니다.
- • @NotNull(null 체크), @NotEmpty(null과 빈값), @NotBlank(null, 빈값, 공백)
- • @Valid로 중첩 객체 검증 활성화
- • BindingResult로 검증 오류 정보 직접 처리 가능
- • @Validated는 그룹 검증 지원
커스텀 Validator를 만들어야 하는 경우는 언제이며, 어떻게 구현할 수 있나요?
Q. Spring의 Interceptor와 Servlet Filter의 차이점을 실행 시점, 관리 주체, 예외 처리 측면에서 비교 설명하고, 각각 어떤 상황에서 사용하는 것이 적합한지 예시와 함께 말씀해주세요.
Filter는 Servlet Container가 관리하며 DispatcherServlet 이전에 실행되고, Interceptor는 Spring Container가 관리하며 DispatcherServlet 이후 Controller 이전에 실행됩니다. Filter는 Spring 빈을 주입받기 어렵고 예외 처리가 제한적이지만, Interceptor는 Spring 빈 주입이 가능하고 @ControllerAdvice로 예외 처리가 가능합니다. Filter는 인코딩, 보안, XSS 방어 등 웹 전반적인 처리에 사용하고, Interceptor는 로그인 체크, 권한 검증, 로깅 등 비즈니스 로직과 연관된 처리에 사용합니다.
- • Filter는 Servlet Container, Interceptor는 Spring Container 관리
- • Filter는 DispatcherServlet 전, Interceptor는 Controller 전 실행
- • Interceptor는 Spring 빈 주입 가능하고 예외 처리 용이
- • Filter는 웹 공통 처리, Interceptor는 비즈니스 관련 처리에 적합
HandlerInterceptor의 preHandle, postHandle, afterCompletion 메서드의 실행 시점과 각각의 용도를 설명해주세요.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!