본문 바로가기

백엔드 면접준비/Spring

3. Spring MVC

1. DispatcherServlet

모든 HTTP 요청을 받아 적절한 핸들러(Controller)로 요청을 전달하고 응답을 생성하여 반환하는 Front Controller 역할을 수행

동작과정

  1. 클라이언트의 요청을 받으면 DispatcherServlet이 가장 먼저 처리
  2. HandlerMapping을 통해 요청 URL에 맞는 Controller를 참음
  3. HandlerAdapter를 통해 Controller 메서드를 호출하고 결과(ModelAndView)를 얻음
  4. 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