1. DispatcherServlet
모든 HTTP 요청을 받아 적절한 핸들러(Controller)로 요청을 전달하고 응답을 생성하여 반환하는 Front Controller 역할을 수행
동작과정
- 클라이언트의 요청을 받으면 DispatcherServlet이 가장 먼저 처리
- HandlerMapping을 통해 요청 URL에 맞는 Controller를 참음
- HandlerAdapter를 통해 Controller 메서드를 호출하고 결과(ModelAndView)를 얻음
- ViewResolver를 통해 View를 찾아 응답을 랜더링하여 클라이언트로 전달
2. @RequestMapping, @GetMapping의 차이는?
- @RequestMapping : HTTP 모든 메서드를 처리하는 어노테이션
- @GetMapping : GET 메서드 전용으로 단순화된 어노테이션
3. DTO와 VO, Entity의 차이?
- DTO : 계층 간 데이터 전달 객체(불변성X, setter 허용)
- VO : 값 객체, 불변성을 가집(setter 사용 안 함)
- Entity : DB 테이블과 1:1 매핑, JPA 관리 객체
4. Spring에서 예외 처리하는 방법은?
- @ControllerAdvice, @ExceptionHandler를 활용하여 공통 예외처리
5. Filter, Intrceptor의 차이는?
Spring Filter | Spring Interceptor | |
개념 | Servlet 스펙에 정의된 인터페이스 웹 컨테이너(Tomcat) 레벨에서 동작하며, 요청(request)/응답(response)의 흐름을 가로채어 전역적으로 처리함 |
Spring 프레임워크에서 제공하는 인터페이스 DispatcherServlet을 통과한 요청을 컨트롤러 전후로 처리함 |
용도 | 인증(Authenticatoin), 인가(Authorization) 요청과 응답에 대한 로깅, 인코딩 변환 |
컨트롤러 실행 전/후로 추가 로직 삽입 특정 조건 만족 시 컨트롤러 접근 제한 |
특징 | DispatcherServlet 이전에 수행된 Spring 컨텍스트 외부에서 동작하므로 Spring Bean을 주입받기 어려움 |
DispatcherServlet이 처리한 이후 Controller 진입 전/후에 수행됨 Spring 컨텍스트 내부에서 관리되기 때문에 Bean주입 등 Spring의 기능 활용 가능 |
6. Mybatis에서 파라미터를 전달하는 방식은?
1) #{} - Prepared Statement
- JDBC 드라이버는 이 SQL을 사전에 컴파일(Prepared Statement)하고, 실행 시점에 실제 파라미터 값을 바인딩 한다.
- 안정성 : 파라미터가 별도로 바인딩되기 때문에, SQL 인젝션 공격을 효과적으로 방지할 수 있음
- 성능 : SQL이 사전 컴파일되고 실행 계획이 캐싱될 수 있어, 동일한 쿼리가 반복 사용될 때 성능상의 이점을 얻을 수 있음
- 타입안전 : JDBC에서 제공하는 데이터 타임에 맞게 파라미터가 변환되므로, 올바른 타입으로 전달
2) ${} - 문자열 치환 방식
- SQL 생성 시점에 값이 완전히 치환되어 최종 SQL 문이 만들어 짐
- 동적 SQL : 테이블명, 컬럼명처럼 동적으로 변해야 하는 부분에 유용
- 안전성 : 값이 그대로 삽입되므로, SQL 인젝션 공격에 취약할 수 있음
- 컴파일 및 캐싱 : 문자열 치환으로 인해 사전 컴파일 및 실행 계획 캐싱의 이점을 누릴 수 없음
'백엔드 면접준비 > Spring' 카테고리의 다른 글
5. Spring Data JPA (0) | 2025.03.16 |
---|---|
4. Spring Boot (0) | 2025.03.16 |
2. Spring 핵심개념(기본) (0) | 2025.03.16 |
1. @Async(비동기) (1) | 2025.03.10 |