티스토리 뷰
Web Server
- Apache, nginx
정적인 콘텐츠 (html, .css, image)를 제공하는 서버
브라우저에서 요청이 들어오면 웹서버가 요청을 보고 정적컨텐츠인지 동적컨텐츠인지 확인 후 동적컨텐츠라면 WAS로 정적컨텐츠라면 웹 서버에서 직접 응답을 한다
WAS가 있는데 Web Server를 앞에 두어 사용하는 이유는 웹 서버에서 정적인 콘텐츠만을 처리하도록 기능을 분배하여 서버의 부담을 줄이거나, 뒤에 애플리케이션을 두어 보안을 강화하거나 Gateway를 위해 사용되기도 한다.
CGI(Common GateWay Interface)
사용자의 폼(입력 데이터)와 요청 url에 따라 동적으로 변하는 페이지를 처리하기 위한 인터페이스
서버와 응용프로그램간에 데이터를 주고받기 위한 방법 (웹서버와 was 사이의 통신 인터페이스)
- 웹 브라우저의 폼을 통해 요청이 웹 서버로 들어온다
- 웹 서버는 요청의 url 주소가 CGI 프로그램에 대응되는지 확인한다
- 대응될 경우 해당 프로그램을 실행, 표준 입력 형태로 요청을 웹 서버에 전달한다
- 웹 서버는 CGI 프로그램이 표준 출력으로 돌려보낸 내용을 그대로 응답으로 돌려 준다.
하지만 CGI는 멀티프로세스 방식으로 진행되기 때문에 여러개의 요청이 동시에 들어올 경우 프로세스 자원을 상당히 많이 차지하므로 이를 해결하기 위해 멀티프로세스가 아닌 멀티스레드 방식인 Servlet이 등장하였다
Servlet
자바에서 만든 확장된 CGI이다. 다른점은 멀티스레드 방식으로 작동하는 것이고 역할은 비슷하다
서블릿은 동적 컨텐츠에 대한 실행 이러한 서블릿을 생성 관리 하는 것은 WAS(서블릿 컨테이너)
WAS(Web Application Server)
- Apache Tomcat, jetty
앞서 말했듯 동적인 컨텐츠를 담당하는 서버이다.
동적인 컨텐츠에 대한 처리를 하는 것이 Servlet이고 , 이러한 서블릿을 관리하는 것이 WAS(서블릿 컨테이너)이다.
WAS는 동적 컨텐츠 뿐만 아니라 정적 컨텐츠도 처리할 수 있고(웹 서버의 역할도 가능) DB를 조회하는 역할도 담당한다.
자바의 대표적인 서블릿 컨테이너 Apache Tomact은 각 서블릿을 실행하고 관리하는 역할을 대신해준다. 요청마다 스레드를 만들고 통신을 위한 소켓 연결을 하고, 서블릿의 생성과 소멸 주기를 모두 관리하는 컨테이너이다
Spring MVC
: 웹 애플리케이션
사용자가 스프링 애플리케이션에게 요청을 보내게 되면
Request -> Web Server -> WAS -> 스프링의 ServletDispatcher 순으로 요청을 전달하게 된다
spring mvc는 serveletDispatcher라는 Servlet으로 요청이 오면 요청의 url을 분석하여 해당 요청을 수행 할 수 있는 springBean(Controller)에게 요청을 보내준다.
톰캣이 실행되면 DispatcherServlet을 생성하고 등록한다. DispatcherServlet이 초기화 될 때 DI Container도 생성되고 초기화된다.
-> web.xml에서 두 컨테이너를 설정하게 된다.
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring] - Filter,Interceptor,AOP의 개념 및 차이 (0) | 2020.10.09 |
---|---|
[Spring Security] - 스프링 시큐리티 동작과정 (0) | 2020.10.09 |
[spring] - spring MVC 와 RESTFul 방식의 차이 (0) | 2020.08.23 |
[spring] - Spring Data JPA를 사용한 페이징 처리 (0) | 2020.08.09 |
[Debug] - (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 에러 해결 (0) | 2020.08.08 |