오늘은 MVC 구조에 대해서 정리하고 넘어가보려 한다!
Model
어플리케이션의 데이터이며, 모든 데이터 정보를 가공하여 가지고 있는 컴포넌트이다.
사용자가 이용하려는 모든 데이터를 가지고 있어야하며, View 또는 Controller에 대해 어떤 정보도 알 수 없어야 한다.
변경이 일어나면 처리 방법을 구현해야 한다.
View
시각적인 UI 요소를 지칭하는 용어이다.
- Model 이 가지고 있는 데이터를 저장하면 안된다.
- Model 이나 Controller 에 대한 정보를 알면 안되며 단순히 표시해주는 역할을 가지고 있다.
- 변경이 일어나면 처리 방법을 구현해야 한다.
Controller
Model 과 View 를 연결해주는 역할을 한다.
- Model 또는 View 에 대한 정보를 알아야 한다.
- Model 또는 View 의 변경을 인지하여 대처를 해야한다.
MVC 처리 순서
1. 클라이언트가 서버에 요청을 하면, front-controller인 DispatcherServlet 클래스가 요청을 받는다.
2. DispatcherServlet은 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임 컨트롤러를
찾아 매핑된 컨트롤러가 존재하면 @RequestMapping 을 통해 요청을 처리할 메소드로 이동한다.
3. 컨트롤러는 해당 요청을 처리할 Service를 받아 비즈니스로직을 서비스에게 위임한다.
DispatcherServlet
Dispatch의 사전적 의미를 먼저 알아보자. 바로 급파하다. 파견하다 등의 의미로, 해석해보자면 받은 요청을 어딘가로
빨리빨리 보내는 Servlet이라는 뜻이다. 프론트 컨트롤러라고 불리기도 한다.
자바 서블릿 ( Java Servlet )
"클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술"
자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 흔히 '서블릿'이라 불린다.
웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML문서 안에
Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술이다.
또한, 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야하는데, 이러한 역할을 하는 자바 프로그램이다.
( 멀티스레딩을 이용한다. )
특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- html을 사용하여 요청에 응답한다.
- Java Thread 를 이용하여 동작한다.
- MVC 패턴에서 Controller로 이용된다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
- UDP 보다 처리 속도가 느리다.
- HTML 변경 시, Servlet을 재컴파일해야 하는 단점이 있다.
Servlet 동작 방식
1. 사용자가 URL을 입력하면 HTTP Request가 Servlet Container로 전송한다.
2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾는다.
4. 해당 서블릿에서 service메소드를 호출한 후, 클라이언트의 GET,POST여부에 따라 doGet() 또는 doPost()를 호출한다.
5. doGet() or doPost() 메소드는 동적페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
6. 응답이 끝나면 HttpServletRequest , HttpServletResponse 두 객체를 소멸시킨다.