-
[SpringMVC] 서블릿Programming/Spring MVC 2021. 3. 13. 23:52
이 게시글은 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 듣고 느낀점과 배운 것들을 다시 한 번 각색하여 정리한 것입니다.
서블릿
클라이언트는 서버와 다양한 요청을 하고 서버 구성 중 WAS는 이러한 요청 중 처리해야 하는 비즈니스 로직인 동적 리소스를 맡아서 처리하고 응답한다. 클라이언트가 서버에게 요청을 보낼 때, 단순히 처리해야 하는 데이터만 보내는 것은 아니다. 어떤 주소로 보내는지, 보내는 프로토콜은 무엇인지, 보내는 데이터의 타입은 무엇인지 등 다양한 정보들이 HTTP 메시지에 담겨서 전달된다.
일반적인 웹 애플리케이션은 이러한 정보들을 해석하기 위해 서버가 직접 구현해야 한다. 항시 TCP/IP 연결을 대기 해야 하고, HTTP 메소드는 무엇인지 판별해야 하는 등 단순히 보낸 데이터를 처리하는 로직 뿐만 아니라 부가적인 업무를 처리해야 한다.
서블릿은 이러한 부가적인 업무를 편리하게 도와준다. 즉 비즈니스 로직 실행에 좀 더 집중하여 처리할 수 있게 도와준다.
HTTP 요청
- WAS에서 Request, Response 객체를 만들어서 생성되어 있는 서블릿 객체를 호출한다.
- 개발자는 Request 객체에서 요청 정보를 확인하고 사용한다.
HTTP 응답
- 개발자는 Response 객체에 응답 정보가 필요하다면 입력한다.
- WAS는 Response 객체에 담겨있는 내용을 기반으로 HTTP 응답 메시지를 전달한다.
서블릿 컨테이너
서블릿 컨테이너는 서블릿 객체를 관리한다. 이렇게 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 부른다. 서블릿 컨테이너는 서블릿 객체의 생명주기를 관리한다.
HTTP 요청은 무수하게 많이 쏟아지기 때문에 요청 때마다 서블릿 객체를 생성하는 것은 매우 큰 자원 낭비이다. 그렇기 때문에 서블릿 객체는 싱글톤으로 관리된다. 서버를 최초에 가동하고 로딩되는 시점에 서블릿 객체는 생성된다.
그렇기 때문에 서블릿 객체에서 사용되는 공유 변수는 주의해서 사용해야 한다. 다양한 쓰레드들이 서블릿 객체 인스턴스에 접근할 수 있기 때문이다.
이러한 서블릿 컨테이너는 다수의 요청에 대응하기 위하여 멀티 쓰레드 처리를 지원한다. 개발자는 공유 변수 사용에 주의하며 마치 하나의 요청을 처리하는 것 처럼 코드를 작성하면 된다. 쓰레드를 관리하는 것은 WAS의 몫이 된다.
'Programming > Spring MVC' 카테고리의 다른 글
[SpringMVC] SpringMVC 구조 (0) 2021.03.18 [SpringMVC] 프론트 컨트롤러 패턴 (0) 2021.03.15 [SpringMVC] HTML, HTTP API, CSR, SSR (0) 2021.03.14 [SpringMVC] 멀티 쓰레드 (0) 2021.03.14 [SpringMVC] web server와 WAS (0) 2021.03.13