DevBoi

[Spring] 웹 통신 , 스프링 동작 과정 본문

Develop/[Spring]

[Spring] 웹 통신 , 스프링 동작 과정

HiSmith 2022. 4. 8. 17:01
반응형

Http 

소켓 통신은 계속 연결되어 있기 때문에, 사용자가 늘어남에 따라 부하가 커진다.

그래서 HTTP통신은 연결을 지속시키지 않고 끊어버리는 Stateless방식을 사용한다.

연결이 끊기기 떄문에 부하가 적지만, 이전에 보냈던 요청이나 되돌려준 응답에 대해서는 기억하지 못하는 단점이 있다.

 

1. 톰캣

 

웹서버와 was의 차이

1. 정적페이지와 동적 페이지

정적 페이지란 , 서버에 미리 저장된 파일이 그대로 전달되는 웹 페이지를 말한다.

서버에 저장된 데이터가 수정되지 않는 한 항상 동일한 페이지를 반환한다.

 

반면 동적 페이지는 서버에 있는 데이터들을 스크립트에 의해 가공처리한 후 생성되어 전달 되는 웹 페이지를 말한다.

서버는 사용자의 요청을 해석하여 데이터를 가공한 후 생성 된 웹페이지를 반환하며, 사용자는 상황 시간 요청등에 달라지는 웹 페이지를 보게 된다.

 

웹서버 (Apache,Nginx)

정적인 컨텐츠 제공, was를 거치지 않고 바로 자원을 제공

클라이언트의 요청을 was로 보내고, was가 처리한 결과를 클라이언트에게 전달하는 역할을 한다.

 

 

WAS (Web Application Server) - Tomcat

웹페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야하지만

웹서버만을 이용한다면, 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어놓아야 한다.

DB조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

 

 

 

 

 

우선 인프라적? 서버적 관점이다.

 

1. Web Server는 웹 브라우저 클라이언트로 부터 HTTP 요청을 받는다.

2. Web Server는 클라이언트의 요청을 WAS에 보낸다.

3. WAS는 관련된 Servlet을 메모리에 올린다.

4. WAS는 web.xml을 참조하여, 해당 Servlet에 대한  Thread를 생성한다.

5. HttpServletRquest와 HttpServletResponse 객체를 생성하여, Servlet에 전달 한다.

6. Thread는 Servlet의 service 메서드를 호출한다.

7. service() 메서드는 요청에 맞게 doGet() 또는 doPost()메서드를 호출한다.

8. protected doGet(HttpServletRequest req, HttpServletResponse res) 또는 post메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response객체에 담아 WAS에 전달한다.

9.WAS는 response객체를 httpResponse형태로 바꾸어 WebServer에 전달한다.

10. 생성된 Thread를 종료하고 HttpServletRequest, response를 제거한다.

 

 

Web Server는 정적 컨텐츠만 담당하고

Was는 Web+Server, 서블릿 컨테이너로 구성되어있다.

 

 

 

1. 클라이언트가 웹 브라우저에 URL을 입력하면, 해당하는 request를 해당 서블릿 컨테이너(웹 컨테이너)로 보낸다.

2. 서블릿 컨테이너는 HttpServletRequest,HttpServletResponse 두 객체를 생성한다.

3. 클라이언트가 요청한 URL을 web.xml을 참조해서 어느 서블릿에 대한 요청인지 찾는다

4. Servlet Container 는 service 메소드를 호출해서  doGet, doPost가 호출된다.

5. doGet() 또는 doPost()메소드는 동적인 페이지를 생성하고 HttpServletResponse응답을 보내고, HttpServletRequest,HttpServletResponse를 소멸시킨다.

 

 

 

최종 정리

 

web -> was (web server) -> was(servlet container or web containser) -> 비즈니스 처리

-> 다시 클라이언트로 reponse!

 

 

 

 

 

 

 

 

 

반응형

'Develop > [Spring]' 카테고리의 다른 글

[Spring] static 과 스프링 빈의 차이  (2) 2022.04.29
[Spring] ModelAttribute  (0) 2022.04.28
[Spring] WebClient  (0) 2022.03.30
[Spring] RestTemplate  (0) 2022.03.29
[Spring] Dao와 repository 차이  (0) 2022.03.28