잡학개발공간
article thumbnail
Published 2023. 10. 23. 17:02
[Spring] Spring MVC 패턴 Web 백엔드/Spring

Spring MVC 구성요소

  • DispatcherServlet: 클라이언트의 요청을 최초로 받는 프론트 컨트롤러. 적절한 컨트롤러에 요청을 전달하며, 응답을 클라이언트에 반환
  • HandlerMapper: 클라이언트의 요청 URL을 기반으로 해당 요청을 처리할 컨트롤러를 찾아주는 컴포넌트
  • Controller: 실제 요청을 처리하는 로직이 들어있는 클래스. @Controller로 정의.
  • Service: 비즈니스 로직을 수행하는 계층. @Service로 정의
  • Dao (Data Access Object): 데이터베이스와의 통신을 담당하는 계층
  • ModelAndView: 컨트롤러가 처리 결과(데이터)와 뷰 이름을 함께 반환하는 객체
  • ViewResolver: 컨트롤러에서 반환된 뷰 이름을 실제 뷰로 변환해주는 컴포넌트.
    예를 들면, 뷰 이름 "home"을 "/WEB-INF/views/home.jsp"로 변환
  • Controller에서 Return하는 String의 의미
    • "viewName": 해당 이름의 뷰로 forward.
    • "redirect:/url": 주어진 URL로 redirect.
    • 예시:
      • return "home";home 뷰로 forward.
      • return "redirect:/index";/index로 redirect.

 

 

Spring MVC 흐름


1. 클라이언트가 HTTP 요청을 보낸다.

  • GET : 브라우저 주소창 엔터
  • 주소 뒤에 ?paramter=value 를 붙여서 파라미터를 보낼 수 있음
  • POST : form에 데이터를 입력해서 전송

 

2. 요청을 처리할 Controller(핸들러)를 찾는 과정을 거친 후, Controller는 결과를 반환한다.

  • Service : 비즈니스로직 영역
  • DAO : DB에 접근하는 객체
  • DB : 데이터 저장소

 

3. Model and View 객체는 Controller가 처리한 결과와 View에 대한 정보를 담는다.

 

4. View Resolver는 적절한 View를 선택하여 응답으로 보내준다.

 

5. 클라이언트는 결과 화면을 보게 된다.

 

각각의 과정은 담당하는 객체(Bean)가 역할을 수행함

 

 

Filter, Interceptor, AOP

Filter

  • 웹 애플리케이션에서 요청과 응답을 가로채 처리하는 컴포넌트. 주로 인코딩, 로깅, 인증 등을 처리.
  • 요청과 응답 데이터를 필터링하여 제어, 변경하는 역할
  • 사용자의 요청이 Servlet에 전달되어지기 전에 Filter를 거침, 반대로 Servlet으로부터의 응답이 사용자에게 전달되어지기 전에 Filter를 거침

 

Interceptor

  • preHandle: 컨트롤러 실행 전에 호출. false 반환 시 나머지 실행 중지.
  • postHandle: 컨트롤러 실행 후, 뷰 반환 전에 호출.
  • afterCompletion: 요청 처리 완료 후 호출.
  • 비즈니스 로직 처리 전후에 특별한 작업이 필요할 때 사용.

Filter, AOP, Interceptor의 차이

  • Filter
    • 웹 애플리케이션에서 요청 및 응답에 관한 전/후처리를 담당
    • 주로 인코딩, 보안(인증 및 권한), 로깅 등의 기능을 수행
    • 서블릿 명세의 일부로, 모든 웹 애플리케이션에서 사용할 수 있음
    • 예시: 사용자가 로그인한 상태인지 확인하는 Filter.
  • AOP(Aspect-Oriented Programming)
    • 관점지향 프로그래밍으로, 특정 로직을 핵심 로직에서 분리하여 관점(Aspect)로 모듈화하는 것을 의미
    • 로깅, 트랜잭션 관리, 보안 등 여러 모듈에서 공통으로 필요한 기능을 분리/재사용하기 좋음
    • Spring에서는 @Aspect를 사용하여 AOP를 구현
    • 예시: 모든 메소드 호출 시 실행 시간을 로깅하는 Aspect.
  • Interceptor
    • Spring MVC에서 제공하는 기능으로, 요청 처리의 전/후에 특정 작업을 수행할 때 사용.
    • Controller로의 요청을 가로채거나, Controller에서의 응답을 가로채는 역할
    • 주로 로깅, 인증 및 권한 확인, 프로그램 실행 시간 계산 등에 사용
    • 예시: 특정 페이지에 대한 접근 권한을 확인하는 Interceptor.
  • 적용 시점이 다름
  • 적용 방식이 다름
    Filter – web.xml / Interceptor : servlet-context.xml
  • 실행 위치가 다름
    Filter – WAS 웹 컨텍스트에서 실행
    Interceptor : 스프링 컨텍스트에서 실행
    AOP : 메소드 앞에 Proxy 패턴의 형태로 실행
  • 정리
    Filter : 전체적인 Request 단에서 어떤 처리가 필요할 때
    Ex) 인증, 이미지 변환, 데이터 압축, 암호화 필터, URL 및 기타 정보를 캐시하는 필터, 문자 인코딩
    Interceptor : 세션 및 쿠키 체크하는 http 프로토콜 단위로 처리해야 하는 업무
    Ex) 로그인 세션 체크 등
    AOP : 비즈니스 단에서 세밀하게 조정하고 싶을 때
    Ex) 로깅, 트랜잭션, 에러 처리

세 가지 모두 비즈니스 로직의 전/후에 실행되는 로직을 분리하여 관리하는 것에 중점을 둔다. 하지만 사용하는 범위, 목적, 그리고 활용 방식에 따라 각각 다른 특징을 지니고 있다.

 

 

Spring의 각종 Annotation

  • @Component: 스프링 빈임을 알려주는 어노테이션
  • @Controller: MVC 패턴의 컨트롤러 빈 객체
  • @Autowired: 자동으로 의존성 주입을 받기위한 어노테이션
  • @Service: 서비스 빈 객체
  • @Qualifier: 의존성 주입 지정해서 받기
  • @Configuration: Spring 설정 클래스로 정의.
  • @Bean: 메소드 위에 사용하여, 해당 메소드가 반환하는 객체를 Spring 컨테이너에 빈으로 등록.
  • @RequestParam: HTTP 파라미터를 메소드 파라미터로 바인딩.
  • @ModelAttribute: 모델 데이터를 객체로 바인딩. 폼 데이터와 객체 바인딩에 유용.
  • @RequestMapping: 요청 경로 혹은 요청 패턴에 매칭

 

 

XML 설정 파일들의 역할

  • root-context.xml: 애플리케이션 전체 설정 정보를 담당. 주로 데이터 소스, 서비스, DAO 빈 정의.
  • servlet-context.xml: 웹 관련 설정 정보를 담당. 주로 뷰 리졸버, 핸들러 맵퍼, 컨트롤러 빈 정의.
  • web.xml: 웹 애플리케이션 전체의 설정 파일. 서블릿 정의, 필터 설정, 리스너 설정 등.

'Web 백엔드 > Spring' 카테고리의 다른 글

[Spring] 스프링 프레임워크와 특징  (1) 2023.10.23

검색 태그