[기술 면접 대비 CS] Spring MVC

쩡쎈·2021년 9월 9일
0

CS

목록 보기
2/7

MVC 패턴의 각 컴포넌트 역할

Controller(컨트롤러)

  • 일종의 조정자.
  • 클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출
  • 클라이언트가 보낸 데이터가 있다면, 모델에 전달하기 쉽게 데이터를 가공
  • 모델이 업무를 마치면 그 결과를 뷰에게 전달

Model(모델)

  • 컨트롤러가 호출할 때 요청에 맞는 역할을 수행
  • 비즈니스 로직을 구현하는 영역으로 응용 프로그램에서 데이터를 처리하는 부분
  • 비즈니스 로직 : 업무에 필요한 데이터 처리를 수행하는 응용 프로그램의 일부
  • DB에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행 (DB 연결 및 데이터 다루기!)
  • 상태의 변화가 있을 때 컨트롤러와 뷰에 통보해 후속 조치 명령을 받을 수 있게 함

View(뷰)

  • 컨트롤러로부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 함
  • 만들어진 화면을 웹브라우저에 전송하여 웹브라우저가 출력하게 하는 것
  • 화면에 표시되는 부분으로 추출한 데이터나 일반적인 텍스트 데이터를 표시하거나 입력폼 또는 사용자와의 상호작용을 위한 인터페이스를 표시하는 영역

MVC패턴의 처리 과정

MVC 프로세스

Spring MVC 처리 순서

  1. 클라이언트(Client)가 서버에 어떤 요청(Request)을 한다면 스프링에서 제공하는 DispatcherServlet 이라는 클래스(일종의 front controller)가 요청을 가로챈다.

(web.xml에 살펴보면 모든 url ( / )에 서블릿 매핑을하여 모든 요청을 DispatcherServlet이 가로채게 해둠(변경 가능))

  1. 요청을 가로챈 DispatcherServlet은 HandlerMapping(URL 분석등..)에게 어떤 컨트롤러에게 요청을 위임하면 좋을지 물어본다.

(HandlerMapping은 servlet-context.xml에서 @Controller로 등록한 것들을 스캔해서 찾아놨기 때문에 어느 컨트롤러에게 요청을 위임해야할지 알고 있다.)

  1. 요청에 매핑된 컨트롤러가 있다면 @RequestMapping을 통하여 요청을 처리할 메서드에 도달한다.

  2. 컨트롤러에서는 해당 요청을 처리할 Service를 주입(DI)받아 비즈니스로직을 Service에게 위임한다.

  3. Service에서는 요청에 필요한 작업 대부분(코딩)을 담당하며 데이터베이스에 접근이 필요하면 DAO를 주입받아 DB처리는 DAO에게 위임한다.

  4. DAO는 mybatis(또는 hibernate등) 설정을 이용해서 SQL 쿼리를 날려 DB에 저장되어있는 정보를 받아 서비스에게 다시 돌려준다.

(이 때, 보통 Request와 함께 날아온 DTO 객체(@RequestParam, @RequestBody, ...)로 부터 DB 조회에 필요한 데이터를 받아와 쿼리를 만들어 보내고, 결과로 받은 Entity 객체를 가지고 Response에 필요한 DTO객체로 변환한다.)

  1. 모든 비즈니스 로직을 끝낸 서비스가 결과물을 컨트롤러에게 넘긴다.

  2. 결과물을 받은 컨트롤러는 필요에 따라 Model객체에 결과물 넣거나, 어떤 view(jsp)파일을 보여줄 것인지등의 정보를 담아 DispatcherServlet에게 보낸다.

  3. DispatcherServlet은 ViewResolver에게 받은 뷰의 대한 정보를 넘긴다.

  4. ViewResolver는 해당 JSP를 찾아서(응답할 View를 찾음) DispatcherServlet에게 알려준다.

(servlet-context.xml에서 suffix, prefix를 통해 /WEB-INF/views/index.jsp 이렇게 만들어주는 것도 ViewResolver)

  1. DispatcherServlet은 응답할 View에게 Render를 지시하고 View는 응답 로직을 처리한다.

  2. 결과적으로 DispatcherServlet이 클라이언트에게 렌더링된 View를 응답한다.

출처: https://jeong-pro.tistory.com/96?category=793347 [기본기를 쌓는 정아마추어 코딩블로그]

profile
모르지만 알아가고 있어요!

0개의 댓글