본문 바로가기

BackEnd/Spring

서블릿과 톰캣(서블릿 컨테이너)의 관계

반응형

1. 서블릿이란?


html만을 활용해서 웹페이지를 개발하면 정적인 웹페이지밖에 만들지 못한다.


이러한 html의 한계를 극복해서 나오게 된것이 서블릿이다.


즉, 서블릿은 자바에서 동적인 웹페이지를 개발하기 위한 기술중에 하나라고 할 수 있다.


또 다른 말로 하면 , 클라이언트 요청을 처리하고 그 결과를 다시 응답하는 Servlet 클래스의 구현 


규칙을 지킨 자바 프로그램" 이라고 이해하면 될 것 같다.


2.  톰캣 = 서블릿 컨테이너


톰캣(서버)은 WAS(Web Application Server)또는 서블릿 컨테이너라고 불린다.


서블릿 컨테이너는 쉽게 말해 서블릿을 관리해주는 컨테이너다.


서블릿 컨테이너는 서블릿을 담고있는 그릇이다.


톰캣 서버가 시작할때, 서블릿들을 인스턴스를 만들고


서블릿 컨테이너인 그릇에 담아 관리하는것이다. 


담아두고 요청이 들어오면 톰캣은 핵심적으로 서블릿을 실행하는 역할을 한다.


사용자로부터 요청을 받고, 요청 path에 해당하는 서블릿을 매핑하여 서블릿 실행후


다시 사용자에게 응답(html을 만들어 보냄)해주는 것을 톰캣이 하는것이다.


그리고 서블릿 컨테이너는 멀티쓰레드 기반으로 동작한다.


3. 예시코드




4. 서블릿 컨테이너는 서블릿의 생명주기를 관리 한다.



4-1) 처음에 컨테이너라고하는 톰캣 서버가 시작할때 해당 프로젝트에 있는 서블릿들을 생성 해서 가지고 있는 상태가 된다. 



4-2) 클라이언트가 서버로 http 요청을 보내면 컨테이너가 들어온 요청이 서블릿이라는 것을 간

파하곤, 두 객체인 request, response 인스턴스를 생성한다.



4-3) 앞서 생성한 request, response 인스턴스를 서블릿의 메소드 인자로 전달한다. 


그리고 이 서블릿은, 서블릿 컨테이너의 특정 스레드 하나에 할당되어서 실행되는것이다.


그러면 결국 사용자의 요청이 해당 스레드에서 실행되는것이다.




4-4) 그리고 컨테이너가 서블릿의 service()메소드를 호출한다. 이 메소드는 요청한 방식에 따라


doGet() 혹은 doPost()를 호출하게된다. 그리고 사용자 요청에 대한 처리작업을 한다.



4-5) 동적인 페이지의 처리작업이 끝나면 서블릿에서 html을 만들고, 이 html을 Response객체에 실어 컨테이너가 다시 받는다.



4-6) 그러면 컨테이너는 받은 Response객체를 HTTP Response로 전환 하여 브라우저에 전송하


는것이다. 즉 클라이언트의 응답을 완료하면 모든 작업이 끝난다. 



4-7) 그리고 그 완료 시점에 스레드가 해제되고, request, response도 소멸작업을 거친다(가비지 


컬렉터). 하지만 서블릿만큼은 해제되지 않는다. 컨테이너가 한번 시작할때 서블릿 인스턴스는 사


용자의 요청에 대한 응답을 마치고 해제되는것이 아니라, 재사용되어 서비스 되는것이다. 즉 하


나의 서블릿 인스턴스가 여러명의 사용자에게 서비스를 하는것이다.


* 참고 자료

https://finerss.tistory.com/11

https://mangkyu.tistory.com/14

http://blog.naver.com/PostView.nhn?blogId=ssohyuny2000&logNo=155249496

https://www.youtube.com/watch?v=aP4Lw3SfffQ&list=PLqaSEyuwXkSoeqnsxz0gYWZMihw519Kfr&index=6


반응형

'BackEnd > Spring' 카테고리의 다른 글

컨테이너  (0) 2019.07.18
메이븐  (0) 2019.07.18
프레임워크란?  (0) 2019.04.24
스프링의 주요 모듈 목록  (0) 2019.04.12
스프링 메이븐 오라클 jdbc 드라이버 pom.xml에 dependency 설정  (0) 2019.04.11