

여러대의 컴퓨터가 동시에 접속을 하면 action태그나 href속성을 통해서 Controller로 이동한다. 그 사이에 WebContext 영역이 있는데 Filter가 있고 DispatcherServlet으로 가고 DispatcherServlet은 Controller로 이동하는데 그 사이에 intercopter가 있다.
DispatcherServlet은 컴퓨터마다 하나씩 받게 되며 컨트롤러에게 넘게주게 된다. (동작하게 된다) 스레드로 돌아가서 여러 명령을 동시에 처리할 수 있다 (OneProcess multithreaded)
Container에 ServletContext가 있다. ServletContext 영역은 여러개의 Servlet이라는 Bean을 가지고 있고 (Servlet 영역에서 Java코드가 실행될 때 다양한 Bean을 주입 받게 된다), 그 Servlet은 여러개의 DispatcherServlet을 가지고 있다. DispatcherServlet은 멀티스레드로 동작하게 된다.

요청과 응답을 거른 뒤에 정제하는 역할로 SpringContext 외부에 존재하며, Dispatcher 이전에 실행 된다.
요청의 대한 작업 전, 후로 가로챈다(Controller를 호출하기 전, 후로 끼어든다.)
SpringContext 내부에서 Controller에 관한 요청과 응답에 대해 처리한다.
Filter나 Interceptor과 다르게 메소드 전 후의 지점에 자유롭게 설정이 가능하다.
Client Request는 Controller로 가는 일반적인 흐름에서, 종단점으로 공통적인 부분을 만들기 위해 AOP 기능을 사용한다.
Spring은 Client에게 요청을 받으면 그 요청에 맞는 Servlet을 생성하게 된다
(생성된 Servlet을 관리해주는 것이 ServletContainer 역할이다.)
Container는 Bean을 적재하는 곳으로, Spring에서 요청이 들어오면 그 요청에 맞추어 객체를 생성하여 대응을 해주어야 한다. (그것을 인스턴스로 찍어내는 것이 아닌 Spring에서 필요한 객체를 Mapping 해주어 연결을 해준다.) 그 연결해주는 객체를 임시적으로 혹은 생성하여 보관해주는 것이 Container이다.
Repuest에 맞는 Mapping할 Servlet을 생성해주고, 없으면 생성하고 관리해준다.
ServletContainer에서 Servlet을 생성.관리해주는데 대놓고 찍어내는 것이 아닌 싱글톤으로 만든다.
(싱글톤이기 때문에 생성은 하지만 소멸되지 않는다.) 그것을 관리하는 것은 전적으로 ServletContainer에서 한다. 프로세스가 스레드를 생성하고 스레드 안에서 Servlet이라는 Service를 실행한다.
프로그램 단위마다 하나씩 있고 TOMCAT이나 Spring 프로그램이 실행되면 그 안에 필요한 요청에 따라 스레드를 생성 한다. Container는 Client 요청을 받으면 그 요청에 대응하는 Servlet을 생성해야하기 때문에 스레드에게 일을 시켜 그 안에서 Servlet을 생성하게 된다, Servlet은 Mapping에 맞춰 DispatcherServlet에게 일을 할당해준다.
프로세스는 하나의 메모리를 가지고 있다. 스레드마다 메모리를 공유하며 스레드 하나당 DispatcherServlet이 하나씩 있다. 멀티스레드를 사용할 경우엔 메모리가 어떻게 관리되는지에 대해 어려움이 있고 문제가 발생할 수도 있다. > 난이도어렵
Container가 Servlet 언애서 DispatcherServlet를 통해 Mapping 연결한다.
Servlet은 DispatcherServlet을 만들어주고 Client에서 Mapping을 받아 Controller에게 넘긴다. (Handler로 간다고 하는데 Handler는 영역이다 (Controller 영역보다 Handler 영역이 더 커서 둘이 하나라고 봐도 무방하다 > 포함관계))
그리고나서 Service 로직으로 간다. (Handler나 viewResolver 영역은 ServletWebContext 레벨이다. Spring에서 직접적으로 관리하여 개발자가 편하게 개발할 수 있도록 해주는 영역) WebApplicationContext 레벨에서는 Service만 가지고 있다. Service 로직에서 개발자가 집중을 하고 이것만 만들어서 사용하라는 말이다 (콘피그도 수정 가능하다는 것 알고있기.)
Controller > Service > ViewResolver를 통하여 return을 받은 HTML 문서를 다시 Client에게 return을 주게 된다.
Bean 1, 2, 3이 있다. 세개의 모태가 되는 클래스가 동일하게 설정을 해줄 수 있으며 그것을 관리하는 방식을 BeanPostProcessor가 가지고 있다.