본문으로 바로가기

Spring 이론(재) - MVC구조

category 웹/Spring 2019. 7. 18. 17:23

MVC 구조

스프링 MVC는 스프링의 서브 프로젝트입니다.

 

스프링 프레임워크에는 여러 서브 프로젝트가 존재하는데 MVC는 이중 일부입니다.

 

MVC는 servlet-context.xml에서 관리하며 코어와 마이바티스 등 DB는 root-context.xml에서 관리합니다.

 

root-context.xml에서는 이미 존재하는 클래스를 통해 bean을 생성할 때 필요합니다.(dataSoruce)

 

프로젝트 구동

  • web.xml에서 Context Listener가 제일 먼저 구동이 됨
  • root-context.xml이 설정되면 빈이 스프링 영역에서(Context)에서 생성되고 관리됩니다.
  • 이후에 DispatcherServlet이 동작합니다.
  • 이때 servlet-context.xml이 사용됩니다. 이때 만들어진 빈은 앞서 만든 빈들과 연동이 됩니다.

위 그림처럼 스프링 MVC를 이용하면 내부적으로 처리가 되기 때문에 개발자 입장에서는 HttpServletRequest 등 API를 직접적으로 사용하지 않아도 됩니다. 흔히 어노테이션들로 작성이 됩니다.

 

Spring MVC 모델 2 방식으로 처리가 됩니다.

 

흔히 모델 2는 '로직과 화면을 분리' 라고 불립니다.

 

위 그림이 MVC 구조입니다.

 

Controller를 호출하게 되는데 이유는 View를 교체하더라도 사용자가 호출하는 URL 자체에 변화를 없게하기 위함입니다.

 

  • 컨트롤러는 데이터 처리를 위해 Model(데이터)를 처리하고 Response할 때 필요한 데이터를 View로 전달합니다.
  • Servelt은 RequestDispatcher API를 이용해서 구현을 직접해주어야 합니다.
  • 스프링은 이를 암묵적으로 수행..

 

 

좀 더 구조를 자세히 살펴봅시다.

  • 사용자의 요청은 DispatcherServlet을 통해 처리
  • Web.xml에서 모든 Request를 DispatcherServlet이 받도록 작성됨.
  • HandlerMapping은 Request의 처리를 담당하는 컨트롤러를 찾음(@RequestMapping)
  • 컨트롤러를 찾으면 HandlerAdapter를 이용해서 컨트롤러 동작 시킴
  • Controller는 실제로 작성자가 요청을 처리하는 로직을 작성 이때 View로 전달 Model를 객체에 담아 전송
  • 이를 ViewResolver가 담당
  • 어떤 뷰로 가야 적절할지 ViewResolver가 해결
  • View는 실제로 응답을 보내야하는 데이터를 jsp등을 이용해 생성하는 역할

아래는 https://walbatrossw.github.io/spring-mvc/2017/11/25/spring-mvc-structure.html 에서 참조하여 그림을 따옴.

https://walbatrossw.github.io/spring-mvc/2017/11/25/spring-mvc-structure.html

 

  1. 사용자의 요청을 Front Controller에 전달
  2. 전달된 요청은 적절한 Controller를 찾아 호출
  3. Controller는 해당 Service 객체를 찾아 호출
  4. Service객체는 DAO객체를 이용하여 원하는 Data를 요청
  5. DAO객체는 MyBatis를 이용하는 Mapper를 통해 작업을 수행(CRUD)
  6. Service를 통해 처리한 데이터를 Controller에게 전달
  7. Controller는 다시 스프링 MVC쪽으로 데이터를 전달

어노테이션

@Controller Controller 객체임을 명시
@Repository DAO 객채임을 명시
@Service Service 객체임을 명시
@RequestMapping 특정 URI에 매칭되는 클래스나, 메서드임을 명시
@RequestParam 요청에서 특정한 파라미터 값을 찾아낼 때 사용
@RequestHeader 요청에서 특정 HTTP 헤더 정보를 추출할 때 사용
@PathVariable 현재의 URI에서 원하는 정보를 추출할 때 사용
@CookieValue 현재 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키 값을 추출
@ModelAttribute 자동으로 해당 객체를 뷰까지 전달하도록 만드는 애너테이션
@SessionAttribute 세션상에서 모델의 정보를 유지하고 싶은 경우 사용
@InitBinder 파라미터를 수집해서 객체로 만들 경우
@ResponseBody 리턴타입이 HTTP의 응답메시지로 전송
@RequestBody 요청 문자열이 그대로 파라미터로 전달

 

' > Spring' 카테고리의 다른 글

Spring 이론(재) - AOP  (0) 2019.07.21
Spring 이론(재) - controller  (0) 2019.07.20
Spring 이론(재) - 특징과 의존성 주입  (0) 2019.07.17
Spring 이론(재) - 간단히 spring project 생성  (0) 2019.07.17
CKEditor 버전 문제 해결  (0) 2019.06.25