SPRING - SPRING FRAMEWORK 3 개념 2

최성현·2023년 10월 5일
0

SPRING FRAMEWORK 3

목록 보기
2/10

스프링 MVC 란?

  • 스프링이 직접 제공하는 서블릿 기반의 MVC 프레임워크이다. 스프링 서블릿 또는 스프링 MVC라고 부른다.
  • 프론트 컨트롤러 역할을 하는 DispatcherServlet을 핵심 엔진으로 사용한다. 스프링이 제공하는 AOP, 트렌젝션 처리,
  • DI 등의 기능을 그대로 사용하면서 MVC 패턴의 기반하여 웹 어플리케이션을 개발할 수 있다.

스프링 MVC의 구성 요소

  • DispatcherServlet : 클라이언트의 요청을 전달받는다. Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
  • HandlerMapping : 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.
  • Controller : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다.
  • ViewResolver : Commander의 처리 결과를 보여줄 View를 결정한다.
  • View : Commander의 처리 결과를 보여줄 응답을 생성한다

구성 요소 간의 메시지 흐름

흐름 정리

  • 클라이언트의 요청이 DispatcherServlet에 전달된다.
  • DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의 요청이 전달될 Controller 객체를 구한다.
  • DispatcherServlet은 Controller 객체의 handleRequest() 메소드를 호출하여 클라이언트의 요청을 처리한다.
  • Controller.handleRequest() 메소드는 처리 결과 정보를 담은 ModelAndView 객체를 리턴한다.
  • DispatcherServlet은 ViewResolver로부터 처리 결과를 보여줄 View를 구한다.
  • View는 클라이언트에 전송할 응답을 생성한다.

기본적인 Spring MVC 설정 잡기

1. web.xml 에 DispatcherServlet 의 설정을 잡는다. (이 곳의 name이 name명-servlet.xml 파일이 설정파일이 된다) 

2. HandlerMapping 을 이용 URL 과 Bean의 name 속성을 같은 것으로 설정한다.

<bean id="beanName" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

참고) 만약 이 설정을 넣지 않으면 자동으로 이 HandlerMapping 이 적용된다.

3. Spring 설정 파일에 name에 URL 을 입력하고 class에 Controller 를 지정한 뒤 작성한다. 

4. Controller 에서는 ModelAndView 객체를 생성해서 직접 갈 곳을 지정해준다.

HandlerMapping 구현 클래스

  1.  SimpleUrlHandlerMapping : 패턴과 컨트롤러 이름을 비교하여, URL 이 패턴에 매칭될 경우 지정 컨트롤러 사용 

  2.  BeanNameUrlHandlerMapping(default) : URL 과 일치하는 bean 이름의 컨트롤러 사용 

  3.  ControllerClassNameHandlerMapping : URL 과 매칭되는 클래스 이름을 갖는 빈을 컨트롤러 사용

  4.  DefaultAnnotationHandlerMapping : @RequestMapping 어노테이션을 이용 컨트롤러 사용

참고) web.xml에 'url-pattern' 태그를 '/path/*'  같이 설정을 할 경우 전체 경로를 다 사용하고 싶으면 HandlerMapping 설정시

<property name="alwaysUseFullPath" value="true">

를 넣어서 설정을 잡는다. 

참고2) 복수개의 HandlerMapping 구현 시 property 로 order 를 넣어서 순서를 정해줄 수도 있다.

Controller 구현 클래스

  1.  Controller, AbstractController : 단순 처리용

  2.  AbstractCommandController : 요청 파라미터를 객체에 자동으로 저장해 주고 검증기능 제공한다.

  3.  SimpleFormController : 폼을 출력하고 폼에 입력한 데이터를 처리할 때 사용

  4.  AbstractWizardFormController : 여러 페이지에 걸쳐 데이터 입력 시 사용

  5.  ParameterizableViewController, UrlFilenameViewController : 
    단순히 뷰로 바로 전달할 때 사용

ViewResolver 구현 클래스

  1.  InteralResourceViewResolver(default) 
    : JSP 나 tiles(1.x) 연동 위한 View 객체를 리턴
  2.  VelocityViewResolver 
    : Velocity 연동을 위한 View 객체를 리턴
  3.  BeanNameViewResolver 
    : 뷰 이름과 똑같은 이름의 Bean 객체를 View 로 이용
  4.  UrlBasedViewResolver 
    : tiles 2.x 를 쓸 경우 View 로 Tiles viewname 을 이용

Validator 와 Errors

  1.  Validator 인터페이스를 상속받은 클래스로써 command(form)에 들어오는 값들에 대한 검증이 가능하다

  2.  주요 메소드 (Validator 인터페이스를 상속받는 클래스에서 구현하는 메소드)

    • boolean supports(Class clazz) : 인자값으로 들어오는 클래스가 검증대상인지 확인하는 메소드
    • void validate(Object target, Errors errors) : 실제 검증 메소드 (타켓은 command 객체이다)
    a. ValidationUtils 클래스를 통해서 데이터의 검증을 한다.
       혹은 Errors 를 이용해 에러를 저장한다.
    b. 이렇게 저장된 오류는 jsp 화면에서 form:errors 태그 를 이용해 
       오류를 보여주는 것이 가능하다.
    c. Errors 에는 전체적인 오류를 저장하기 위한 reject 메소드와 특정 
       필드에 대한 오류를 저장하기 위한 rejectValue 메소드가 있다.
       
  3.  command 가 쓰이는 Controller xml 설정에 프로퍼티로써 validator 를 적용시켜야 한다.
    ex)

<property name="validator" ref="reboardValidator"></property>

Annotation을 이용한 Controller 셋팅

  1.  XML 셋팅  <context:component-scan base-package="" /> 

  2.  종류 
    <1> @Controller : 대상 컨트롤러 클래스의 위에 선언 

    <2> @RequestMapping : 처리할 주소(value) 및 HTTP METHOD 지정 
    ex) @RequestMapping(value="/index.spring", method=RequestMethod.GET) 

    <3> @RequestParam("parameterName") : 요청 파라미터를 인자 값으로 선언 시 사용 

    <4> @ModelAttribute("commandName") : 인자값에 선언 시 요청 파라미터들을 받 는 커맨드 객체로 사용, 메소드 위에 선언 시 뷰에 세팅될 커맨드객체로 사용

    <5> @SessionAttributes("commandName") : 클래스 위에 선언하여 세션에 커맨드 객체 저장

Controller 클래스의 메소드 선언

<1> 인자타입(parameter type)으로 사용 가능한 타입

a. HttpServletRequest, HttpServletResponse, HttpSession

b. java.util.Locale : 현재 지역정보

c. InputStream, Reader : 요청 컨텐츠에 직접 접근

d. OutputStream, Writer : 응답 컨텐츠로 사용

e. @RequestParam 을 이용한 파라미터 명시

f. Map, ModelMap : 뷰에 전달할 데이터 저장용

g. Command Class : @ModelAttribute 를 사용시 이름이 지정되고, 지정하지 않으면 클래스명이 지정됨(앞글자 소문자)

h. Errors, BindingResult : 커맨드 클래스 바로 뒤에 위치해야 함. 유효성 체크 위해 사용

i. SessionStatus : 폼 처리 완료 시 호출하기 위해 사용 @SessionAttributes 와 같이 사용

return type으로 사용 가능한 타입

a. ModelAndView : 일반적인 컨트롤러 메소드의 리턴 객체

b. Map : 뷰에 전달할 데이터의 집합체, view 이름은 요청 URL로 결정 (RequestToViewNameTranslator) 

c. String : view 이름으로 처리 

d. void : 직접 응답 처리시

Transaction

(1) ACID : 트랜젝션에서 추구했던 기본 4요소

(2) 프로그램적인 트랜젝션 

(3) 선언적인 트랜젝션

profile
백엔드 개발자로서 성장해 나가는 성현이의 블로그~

0개의 댓글