JAVA

Servlet 이해

kkumtree 2023. 6. 30. 16:04

업무에 사용하고는 있는데 도대체 서블릿(Servlet)이 뭘까?라는 생각이 갑자기 들었다.

바로 알아보도록 하자!

 

서블릿이란 사용자의 요청에 맞는 로직을 처리하고 결과를 반환하는 기술이라고 한단다.

 

그래서 이게 무슨소리야?

서블릿이 왜 탄생했는지에 대한 배경부터 알아봐야 할 듯 싶다.

 

* 서블릿 탄생 배경

웹이 처음 탄생하였을 때는 단순히 http라는 프로토콜을 이용해 html파일을 주고받기만 했는데, 웹이 인기 끌기 시작했고  정적인 html만을 주고받는 것은 사용자들의 다양한(동적) 요구사항을 충족할 수 없게 된 것.

이를 충족하기 위해 등장한 것이 바로 CGI라고한다. 하지만 CGI 자체로는 문제점이 있었고, 그래서 문제점을 보완하여 등장한 녀석이 바로 Servlet. 우선 CGI에 대해 알아봐야겠다.

 

 ** CGI (Common Gateway Interface) 란?

동적 데이터를 처리하는 Web Server와 프로그램 사이의 인터페이스로

클라이언트(사용자)의 요청에 따라 Web Server에 다른 프로그램을 요청하고, 요청 결과를 클라이언트에게 보내는 방법을 정한것이라고 한다.

 

CGI의 문제점)

1. 클라이언트의 요청(request)이 있을 때마다 프로세스를 만들어서 메모리 사용량이 높고

2. 이로 인해 수백 수천명의 사용자가 일시적으로 같은 요청을 하게되면 사용자의 요청만큼 프로세스가 만들어지게되어 과부하 문제를 일으킨다.

3. 또한, 같은 결과값을 전달한다고 해도 요청된 프로세스가 다르다면 같은 프로세스들을 여러개 만들어야 했다.

 

이 문제점들을 보완하기 위해 

1. request가 있을때 프로세스 대신 쓰레드를 만듦.

2. 동일한 요청이 있을때 최초 생성한 객체를 계속 사용하는 싱글턴 패턴(Singleton Pattern)을 사용한다.

라는 사항을 적용한 것이 지금 알아보고 있는 서블릿인 것이다.

 

* Servlet 이란?

위에서 알아보았듯 클라이언트의 동적인 요청을 처리하기 위한 인터페이스! 근데 Java를 곁들인.

 

그럼 서블릿만 있으면 request와 response의 동작을 할 수 있는가?

 

그렇지 않다. 서블릿을 웹서버와 HTTP통신에 필요한 소켓을 열어서 request와 response를 전달하고 등등등등의 작업을 개발자가 한땀한땀 적용시킬 순 있겠으나 우리에겐 서블릿 컨테이너라는 아주 좋은 녀석이 있다.

 

 * 서블릿 컨테이너란?

우리가 정의한 서블릿을 관리해주는 역할이 바로 서블릿 컨테이너다. request 및 response를 처리함에 있어 HttpServletRequest와 HttpServletResponse 객체를 생성하고, POST/GET 여부에 따라 동적인 페이지를 생성하여 응답을 보낸다.

웹 컨테이너라고도 한다.

 

뭐 예를 들면, 서블릿은 설계/기획자이고 서블릿 컨테이너는 개발자라고 할 수 있을 것 같다.

서블릿 컨테이너는 사용자의 요청을 받고 응답할 수 있게 웹 서버와의 통신으로 소켓을 이용한다.

*서블릿 컨테이너는 WAS 안에 포함되는 범주이다. 

1)도대체 WAS란 정확히 어느정도의 범주일까? 이것도 한 번 알아보긴 해야겠다.

2)서블릿 컨테이너의 대표적인 예시로 tomcat이 있는데 WAS로 사용하는 tomcat이 서블릿 컨테이너를 포함한 범주인지 아니면 서블릿 컨테이너 자체인지는 확인을 해봐야겠다.

 

 * 서블릿 컨테이너의 주요 기능?

1. 생명주기 관리

서블릿 컨테이너가 기동되는 순간 

2. 통신 지원

3. 멀티스레딩 관리

4. 보안관리

 

 * 서블릿 인스턴스가 생성되는 시점

1. 서블릿 컨테이너가 기동되는 시점에 생성되도록 설정되어 있을 때 - web.xml

2. 요청시 서블릿 컨테이너를 통해 처음 호출 될 때

 

그럼 서블릿 컨테이너에서 어떻게 동작하는걸까?

Web Container(Servlet Container) - 사진출처:https://invisible-blog.tistory.com/17

1) 사용자의 http요청을 웹서버에서 받고 WAS로 전달한다. 

2) 요청을 WAS에서는 서블릿 컨테이너에서 request, response 객체를 생성하고 Thread에 할당된다.

3) 그럼 이 Thread는 Servlet객체를 호출하여 request, response 객체를 Servlet에 넘겨준다.

4) 전달받은 Servlet은 비즈니스 로직을 실행하고, 응답결과를 response 객체에 담아서 Thread를 통해 서블릿 컨테이너에 전달하게 된다.

5) 이후 서블릿 컨테이너는 웹서버에 전달하고 http응답 메시지를 생성하여 클라이언트에게 전달된다.


 

 

 

 

 

1, 2) 

WAS는 Web Server + Web Container(Servlet Container)로 구성되어 있다.

그래서 정적인 컨텐츠를 제공하면서도(Web Server) 웹 컨테이너를 이용해 내부 로직을 거쳐 동적 페이지(Web Container)를 보여줄 수 있게 된다.

 

 * WAS를 통한 Servlet Container 및 Servlet 동작

1. WAS의 Servlet Container가 servlet 객체를 생성(서버 기동시점에 서블릿 인스턴스가 메모리에 존재하지 않을 때)

2. 클라이언트가 해당 servlet을 사용하는 http 요청을 하면, Servlet Container에서 request,response 객체 생성

3. 이때, 쓰레드가 Servlet 객체 호출하고 request,response 객체를 Servlet 객체에 넘겨줌. 

4. request 객체를 활용해 Servlet의 비즈니스 로직 실행. 

5. 응답 결과를 response 객체에 담은 후, Servlet Container에 전달

6. Servlet Container가 http 응답 메시지 생성 후 클라이언트에게 전달 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 및 추가로 볼 내용)

https://docs.oracle.com/javaee/7/tutorial/servlets.htm

 

17 Java Servlet Technology (Release 7)

 

docs.oracle.com

 

https://jojoldu.tistory.com/28

 

ServletContainer? DI Container? Bean? POJO?

매주 월/목요일 저녁마다 박재성(a.k.a 자바지기)님의 Java 강의를 수강중이다. (현재 1기인데 다음 2기가 시작되면 꼭꼭 듣길 추천한다. 참고)매 시간마다 즐거운 깨달음의 연속이지만 특히나 어제

jojoldu.tistory.com

https://charliecharlie.tistory.com/248

 

Servlet은 무엇일까(등장배경 및 동작과정)

Servlet의 등장배경 초창기 web은 정적 데이터만 전달하는 Web Server였음. 사용자의 요청에 따른 다양한 처리(동적인)가 불가능했다. 예를 들면 로그인 시 맞춤 팝업이 뜨거나 UI가 변경되거나. 그래

charliecharlie.tistory.com

https://yozm.wishket.com/magazine/detail/1686/

 

웹 개발자라면 알고 있어야 할 HTTP의 진화 과정 | 요즘IT

하나의 웹 사이트에서 왜 이렇게 다른 버전의 HTTP가 사용되고 있는 걸까요? 각 버전에는 무슨 차이가 있는 걸까요? 왜 HTTP의 버전은 1, 2, 3으로 딱 나누어 떨어지지 않을까요? 그래서 오늘은 HTTP의

yozm.wishket.com

https://coding-factory.tistory.com/742

 

[Web] 서블릿(Servlet)이란 무엇인가? 서블릿 총정리

서블릿(Servlet)이란? 서블릿이란 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술입니다. 웹을 만들때는 다양한 요청(Request)과 응답(Response)이 있기 마련이고 이 요

coding-factory.tistory.com

https://www.inflearn.com/questions/505167/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-was%EA%B0%80-%ED%97%B7%EA%B0%88%EB%A6%BD%EB%8B%88%EB%8B%A4

 

서블릿 컨테이너, was가 헷갈립니다. - 인프런 | 질문 & 답변

안녕하세요 강의 잘 듣고 있습니다.그런데 WAS,서블릿 컨테이너, 서블릿 객체가 헷갈려서 질문드립니다.강의 중, 서블릿 컨테이너는 톰캣처럼 서블릿을 지원하는 WAS라고 하셨습니다.더불어, 다

www.inflearn.com

https://kephilab.tistory.com/109

 

JSP - 서블릿 2. 서블릿 로딩과 초기화(init())

예) NowServlet 코드 public class NowServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); PrintW

kephilab.tistory.com

https://rebeccajo.tistory.com/9

 

[JSP/서블릿] JSP의 컴파일 실행 과정

JSP 컴파일 과정 JSP를 [서블릿 기반의] 서버측 스크립트 언어라고 칭하는 이유는, jsp로 작성된 스크립트가 (실행시,) 자동으로 서블릿 코드로 변환되어 컴파일되고 실행되기 때문이다.그렇기때문

rebeccajo.tistory.com

https://galid1.tistory.com/487

 

Servlet - Servlet 개념

Servlet이란 Servlet이란orcle 문서 : https://javaee.github.io/servlet-spec/downloads/servlet-3.1/Final/servlet-3_1-final.pdf - Java의 CGI 프로그램(WebServer와 WAS가 소통하기위해 CGI의 규칙을 준수한) 즉, 클라이언트 요청에

galid1.tistory.com

https://giron.tistory.com/50

 

Servlet과 Controller(feat. Serializable)

Servlet (서블릿) 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말함 Controller 스프링 서버 개발자 입장에서는 시작점과 끝점으로 보이지만, 사실 스프링이 사

giron.tistory.com

https://mangkyu.tistory.com/14

 

[JSP] 서블릿(Servlet)이란?

1. Servlet(서블릿) 서블릿을 한 줄로 정의하자면 아래와 같습니다. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서,

mangkyu.tistory.com

https://webfirewood.tistory.com/38

 

서블릿(Servlet)의 동작구조

웹 서버의 주된 기능은 웹 페이지를 클라이언트로 전달하는 것입니다. 주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달됩니다. 하지만 이런 웹 서버의 경우 이미 존재하는

webfirewood.tistory.com

https://velog.io/@han_been/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container-%EB%9E%80

 

서블릿 컨테이너(Servlet Container) 란?

서블릿들을 위한 상자(Container) 입니다.

velog.io

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io