2022.06.19
루키의 Servlet & Spring Web MVC
https://www.youtube.com/watch?v=h0rX720VWCg
초창기 - 정적인 화면만 제공하는 웹서버였음.
-> 동적 컨텐츠 제고을 위해 CGI라는 것이 나옴.
CGI구현체로 부터 동적인 데이터를 웹서버로 부터 받는다.
문제점 : Process가 각 CGI구현체를 생성해서 사용했음. 리소스를 많이 먹는다.
Servlet
Thread programming을 하고, CGI 구현체 생성을 Singleton 패턴을 적용하여 해결함.
개발자는 어떤 이점을 얻나요?
매번 개발자가 요청을 parsing 하고, 응답에 일일해 대응하느게 까다로움. 각 method별 예외처리도 잘 되어있고, 요청받은 부분에 대해서만 처리를 해주면됨.
Servlet Container
서블릿의 생성과 삭제를 담당하고, 필요에 따라 꺼내주고 없애는 역할을 하는듯.
servlet의 문제점 과 해결방법
servlet종속적으로 프로그래밍을 하다보면 공통로직이 발생되는 경우가 많음.
Front controller라는 controller를 하나 만들고, 해당 부분에서 공통로직을 처리한다.
1. client-server 연결
2. 요청에 맞는 컨트롤러를 매핑하여 정보보관
3. 요청이 들어오면 매핑정보를 찾아 호출
4. 전달할 결과를 생성
5. 결과를 사용자에게 반환
-> 하는일이 너무 많으니 조금 나눠주자.
2번 -> 원래는 Hashmap(String, Controller) 형태로 가지고 있다가, Controller에 넘기고, controller의 처리 결과를 넘긴다.
-> Contoller에 파라미터와 모델을 같이 넘긴다.
Front Controller가 객체를 만들어 넘기고, 모델도 같이 넘긴다.
Controller가 servlet의 매개변수로 전달되는 것이 아니라, java obj가 전달된다.
이를 통해 Controller가 servlet에 종속되지 않도록 만들수 있다.
컨트롤러에서는 req의 param들을 hashmap 형태로 만들어 보내고, template의 이름을 가져온다. 이후 view resolver를 통해서 template을 렌더링해서 req에 response한다.
DispatcherServlet을 FrontConroller 대용으로 사용한다. 설정만 잘 잡아주면 Spring Web MVC가 비즈니스 로직에 집중할 수 있도록 하는일을 줄여준다.