더보기
Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.
마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.
Servlet
만약 WAS를 바닥부터 전부 구현한다면...?
사용자의 POST 요청을 받아서 DB에 저장하는 WAS를 바닥부터 전부 구현한다고 가정해보자.
- WAS를 구현하기 위해서 좌측의 동작을 전부 수행하는 프로그램을 작성해야 한다.
- 하지만 실제 의미있는 비즈니스 로직(사용자가 보낸 정보를 DB에 저장)은 초록색 네모 쳐진 부분 뿐이다.
- 나머지는 모든 WAS(혹은 웹 서버)가 동일하게 수행하는 작업이다.
- 모든 WAS 개발자가 해당 코드를 작성해야 한다면 너무 비효율적이다.
- 서블릿을 사용한다면 WAS 개발자는 실제로 의미있는 비즈니스 로직만 구현하면 된다.
- 나머지 모든 WAS에서 동일하게 동작하는 부분들은 서블릿이 알아서 해준다.
Servlet
HttpServlet
을 상속 받아서 비즈니스 로직만 작성하면 된다.HttpServletRequest
객체를 사용하면, 잘 파싱 된 HTTP 요청 정보에 접근할 수 있다.HttpServletReponse
객체를 사용하면 HTTP 응답 메시지를 쉽게 만들 수 있다.- 즉 Servlet을 통해서 HTTP 스펙에 맞는 코드를 편리하게 작성할 수 있다.
Servlet 동작 방식
- 웹 브라우저에서 HTTP request가 들어온다.
- WAS에서 요청 메시지를 기반으로
HttpServletRequest
객체와HttpServletReponse
객체를 만든다. - 서블릿 컨테이너에 있는
helloServlet
에 만든 객체를 넘겨준다. helloServlet
이 비즈니스 로직을 실행한다.- 비즈니스 로직 실행이 끝나면, WAS가
helloServlet
이 비즈니스 로직을 실행하며 조작한HttpServletReponse
를 기반으로 응답 메시지를 만들어 브라우저에게 전달한다.
즉 정리하면,
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다.
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용할 수 있다.
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력할 수 있다.
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.
Servlet Container
- Tomcat처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
- 개발자가 작성한 서블릿 클래스의 객체를 생성, 초기화, 호출, 관리해주는 역할을 한다.
- 서블릿 객체는 싱글톤으로 관리된다.
- 최초 로딩 시점에 서블릿 객체를 미리 만들어 두고 계속 재사용한다.
- 동일한 타입의 요청은 동일한 서블릿 객체가 처리한다.
- 객체가 하나만 존재하기 때문에, 멤버 변수 값이 모든 요청에 대해 공유된다. 이 것 때문에 문제가 생기지 않게끔 주의해야한다.
- 서블릿 컨테이너가 종료되면 사라진다.
- JSP도 서블릿으로 변환 되어서 사용된다.
- 서블릿 컨테이너는 동시 요청을 위한 멀티 스레드 처리를 지원한다.
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] 6. 서블릿 등록과 사용(Spring Boot 환경) (0) | 2022.11.23 |
---|---|
[Spring MVC] 5. Java 진영 Web 기술의 역사 (0) | 2022.11.23 |
[Spring MVC] 4. HTML, HTTP, API, CSR, SSR (1) | 2022.11.23 |
[Spring MVC] 3. Servlet Container와 멀티 쓰레드 (0) | 2022.11.23 |
[Spring MVC] 1. Web Server와 Web Application Server(WAS) (0) | 2022.11.23 |
댓글