클라이언트와 웹 서버, 웹 어플리케이션의 동작 과정
웹 서버
- 웹 서버는 서블릿을 관리하는 역할
- 웹 어플리케이션에서 작성된 서블릿을 웹 서버가 인스턴스화 하여 관리
- 웹 어플리케이션은 서블릿 컨테이너에 의해 실행되며, 서블릿 컨테이너는 웹 어플리케이션 내의 서블릿 컴포넌트를 관리하고 실행. 클라이언트 요청이 발생하면 웹 서버에서 백엔드에서 작성된 서블릿 인스턴스를 조회하여 해당 서블릿을 확인하고 로직 수행
( 서블릿 컨테이너는 HTTP 요청을 받고, 해당 요청을 적절한 서블릿에 전달하여 처리. 서블릿은 이 요청을 처리하고 응답을 생성하는 역할을 수행 )
JSP 기준 웹서버와 백엔드 동작 순서
- 클라이언트가 요청 :
- 클라이언트(웹 브라우저)가 특정 URL로 요청을 보냄
- 웹 어플리케이션의 사용자 인터페이스와 상호작용을 시작
- 웹 서버에서 서블릿 매핑 확인 :
- 웹 서버(예: Apache Tomcat)에서 URL에 매핑된 백엔드 서블릿 인스턴스를 확인
- 웹 서버는 URL을 기반으로 적절한 서블릿을 찾아 요청을 처리
- 백엔드에서 작성한 서블릿 로직 수행 :
- 매핑된 서블릿(예: ProductServlet) 인스턴스는 요청에 대한 메소드(doGet(), doPost 등) 내부의 비즈니스 로직을 수행
- 백엔드 로직이 실행되어 요청에 대한 처리를 담당합니다.
- JSP 페이지 지정 및 데이터 전달 :
- 서블릿은 로직 처리 결과를 담은 데이터와 함께 응답을 위한 JSP 페이지를 지정. 데이터는 HttpServletRequest 객체를 통해 JSP 페이지로 전달
- 처리 결과를 사용자에게 보여주기 위한 뷰를 준비
- 웹 서버에서 해당 JSP를 서블릿으로 변환 :
- 웹 서버 내부의 JSP 엔진은 지정된 JSP 페이지를 서블릿으로 변환
- 웹 서버는 JSP 파일을 서블릿으로 변환하여 HTML 생성 로직을 수행할 수 있게 함
- 변환된 JSP 서블릿에서 HTML 생성 :
- 변환된 JSP 서블릿은 HttpServletRequest 객체에서 받은 데이터를 사용하여 HTML 컨텐츠를 생성
- 변환된 JSP 서블릿은 전달받은 데이터를 기반으로 HTML 컨텐츠를 생성
- 생성된 HTML을 브라우저에 전달 :
- 생성된 HTML 컨텐츠는 클라이언트(브라우저)에게 응답으로 전송
- 최종적으로 생성된 HTML 페이지가 클라이언트에게 전달되어 사용자가 결과를 볼 수 있음
스프링 MVC 및 타임리프 기준 웹서버와 백엔드 동작 순서
- 클라이언트 요청 시작 :
- 사용자의 웹 브라우저가 특정 URL로 HTTP 요청을 보냄
- 이는 웹 애플리케이션 사용자 인터페이스와의 상호작용을 시작하는 단계
- 스프링 MVC에서의 요청 처리 :
- 웹 서버(예: Apache Tomcat)는 스프링 MVC 프레임워크로 요청을 전달
- 스프링 MVC는 요청 URL과 매핑된 컨트롤러를 찾음
- 컨트롤러 로직 수행 :
- 매핑된 컨트롤러의 메소드는 요청에 대한 비즈니스 로직을 수행
- 이 과정에서 데이터베이스 조회, 데이터 처리 등이 이루어짐
- 뷰 이름과 모델 데이터 전달 :
- 컨트롤러는 처리된 결과 데이터와 함께 뷰 이름을 반환
- 이 데이터는 주로 ModelAndView 객체를 통해 전달되며, 타임리프 템플릿으로 지정된 뷰 이름을 포함
- @RestController를 사용하면 타임리프 템플릿 엔진을 사용하여 HTML 뷰를 생성하는 데 적합하지 않음
- 타임리프 템플릿 렌더링 :
- 스프링은 지정된 타임리프 템플릿 뷰를 찾아서 템플릿 엔진에 전달
- 타임리프 템플릿 엔진은 모델 데이터를 사용하여 HTML 컨텐츠를 동적으로 생성
- HTML 응답 생성 및 전송 :
- 생성된 HTML 컨텐츠는 웹 서버를 통해 클라이언트(브라우저)에게 응답으로 전송
- 클라이언트는 최종적으로 생성된 HTML 페이지를 받아 사용자에게 표시