일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 참조키
- foreignkey
- ubuntu
- 예약
- 적용우선순위
- application.yml
- WeNews
- 검색
- subquery
- 서브쿼리
- 외부키
- 추후정리
- appspec
- 포트
- docker명령어
- 메세지수정
- 메소드명
- 컨테이너실행
- appspec.yml
- MySQL
- 테스트메소드
- ㅔㄴ션
- 네이티브쿼리
- querydsl
- 테스트
- 2 > /dev/null
- 커밋메세지수정
- Query
- AuthenticationEntryPoint
- EC2
Archives
- Today
- Total
제뉴어리의 모든것
서블릿 컨테이너란? 본문
서블릿 컨테이너는 개발자가 웹서버와 통신하기 위한 복잡한 일들(소켓 생성, 특정 포트 리스닝, 스트림 생성 등)을 할 필요가 없게 해준다. 컨테이너는 서브릿의 생성부터 소멸까지 일련의 과정을 관리한다. 서블릿 컨테이너는 요청이 들어올 때마다 새로운 자바 스레드를 만든다. 서블릿 컨테이너의 대표적인 예시로는 Tomcat이 있다.
Dispatcher-Servlet이란?
- 개념
클라이언트로부터 어떠한 요청이 들어오면 서블릿 컨테이너가 요청을 받는다. 이 때 제일 앞에서 서버로 들어오는 요청을 처리하는 프론트 컨트롤러를 Dispatcher-Servlet이라고 한다. (Spring에서 정의함)
공통작업에 대한 처리는 Dispatcher-Servlet에서 이루어지지만 세부적인 작업 내용은 해당되는 컨트롤러에 위임하여 처리한다. - 특징
Dispatcher-Servlet이 등장함에 따라 Spring MVC의 web.xml의 역할이 축소되었다. 기존에는 모든 서블릿에 대해 URL 매핑을 활용하기 위해서 web.xml에 모두 등록해주어야만 했다. 그러나 Dispatcher-Servlet이 들어오는 모든 요청을 핸들링해주면서 작업을 상당히 편리하게 할 수 있게 되었다.
Dispatcher Servlet이 요청들을 Controller로 넘겨주는 것은 편해보이지만, 한가지 문제점이 있다. 이미지나 HTML을 불러오는 요청마저 모두 Controller로 넘겨버린다는 것이다. 심지어 JS나 CSS 파일에 대한 요청 모두 Dispatcher-Servlet이 가져가기 때문에 자원 호출이 제대로 이루어지지 않는다. Spring은 이에 대한 해결책으로 <mvc:resources/>를 이용할 수 있도록 내놓았다. 만약 Dispatcher-Servlet에서 해당 요청에 대한 컨트롤러를 찾을 수 없는 경우에, 2차적으로 설정된 경로에서 요청을 탐색하여 자원을 호출할 수 있도록 한 것이다.
Spring MVC의 클라이언트 요청 처리 과정
- 클라이언트가 URL로 접근하여 정보를 요청한다.
- 요청이 DispatcherServlet으로 전달되고 DispatcherServlet은 HandlerMapping을 통해 해당 요청(URL)을 매핑한 컨트롤러가 있는지 검색한다. (@Controller로 등록한 클래스 스캔)
- 해당 요청을 매핑한 컨트롤러에 요청을 전달한다.
- 컨트롤러에서는 해당 요청을 처리할 서비스를 주입 받아 해당 로직을 서비스에 전달한다.
- 서비스는 요청에 필요한 대부분의 작업을 담당하며 DB접근이 필요하면 DAO를 주입 받아 DB처리는 DAO에게 전달한다.
- DAO는 MyBatis 설정을 통해 SQL 쿼리를 날려 DB 정보를 받아 다시 서비스에게 전달한다.
- 모든 로직을 끝낸 서비스가 처리 결과를 컨트롤러에게 반환한다.
- 결과를 받은 컨트롤러는 Model 객체에 결과물을 담고 결과를 출력할 View(JSP)의 이름을 DispatcherServlet에 전달한다.
- DispatcherServlet은 받은 View의 이름을 ViewResolver 에게 전달한다.
- ViewResolver는 전달 받은 View에 처리결과를 송신한다.
- 처리 결과를 받은 View는 전송할 응답을 생성하고 DispatcherServlet으로 전달된다.
- 마지막으로, DispatcherSerlvet에서 View를 클라이언트에게 전달한다.
출처 : 서블릿 컨테이너란?. 서블릿 컨테이너는 개발자가 웹서버와 통신하기 위한 복잡한 일들(소켓… | by Myong Hyo You | Medium