그럼에도 불구하고

👨‍💻

[Servlet] Servlet이란 무엇일까? 본문

Java, Servlet/Servlet, Jsp

[Servlet] Servlet이란 무엇일까?

zenghyun 2022. 11. 3. 01:49

서블릿이란?

 

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.

 

자세히 말하자면, 클라이언트가 어떤 요청을 하면 그 결과를 다시 전송해주는 역할을 하는 것이다.

 

서블릿은 웹 서버 측에서 실행되므로 CGI 방식을 따라야 하며, 웹 서버에 존재하는 수많은 자원에 접근할 수 있어야 하며,

 

자바 프로그램이므로 자바 문법을 따라야 하며, 자바 서블릿이 실행될 수 있도록 자바 실행 기능을 지원해 주어야 한다.

 

 

 

 

[ Servlet 특징 ]

  •  클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트이다.
  •  html을 사용하여 요청에 응답한다.
  •  Java Thread를 이용하여 동작한다. (서블릿이 자바 기술을 사용하여 자바의 특성을 갖고 있기 때문이다.)
  • ※ 자바는 프로세스 방식이 아닌 쓰레드 방식으로 동작한다.
  • MVC 패턴에서 Controller로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • UDP보다 처리 속도가 느리다.
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

 

 

 

일반적인 웹서버는 정적인 페이지만 제공한다. 그래서 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 한다. 

 

동적인 페이지란? : 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해주는 것  

 

(여기서 동적인 페이지를 제공할 수 있도록 도와주는 애플리케이션이 서블릿이며, 동적인 페이지를 생성하는 애플리케이션이 CGI이다.)

 

 

 

 

 

※ CGI(Common Gateway interface)

table
CGI는 특별한 라이브러리나 개발 툴을 지칭하는 것이 아니고 웹 서버와 별도로 만들어 놓은 프로그램 간의 데이터 교환 방식을 일컫는 말한다.

CGI방식은 어떤 프로그래밍 언어로도 구현이 가능하고 별도로 만들어 놓은 프로그램에 HTML의 GET이나 POST의 방법을 통해

클라이언트의 데이터를 환경 변수로 전달하고 프로그램의 표준 출력 결과를 그대로 클라이언트에 되돌려 주는 형식이다.

즉, 자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 코딩하는 방식을 말한다.

출처: https://question0921.tistory.com/1070

 

[ Servlet 동작과정 ]

 

① 사용자가 URL을 클릭하면 HTTP Request를 Servlet Container에 보낸다.

 

② Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.

 

③ 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. (DD를 참조하여 분석)

 

④ 컨테이너는 서블릿 service() 메서드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호출된다.

 

⑤ doGet() or doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.

 

⑥ 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

 

 

 

 

 

DD (배포서술자, Deployment Descriptor) = web.xml

  • Servlet, Error Page, Listener, Fillter, 보안 설정 등 Web Application의 설정 파일이다.
  • URL과 실제 서블릿의 매핑 정보도 담고 있다.
  • 하나의 웹 어플리케이션에 하나만 존재한다.
  • 보통 Web Document Root 디렉터리에 WEB-INF 폴더 아래 web.xml 파일로 존재한다.

 

 

 

[ Servlet Container ]

  • HTTP 요청을 받아서 Servlet을 실행시키고, 그 결과를 사용자 브라우저에게 전달해주는 기능을 제공하는 컴포넌트이다.
  • Servlet을 실행하고 생명주기를 관리하는 역할을 한다.
  • Servlet과 웹 서버(Apache, nginx..)가 서버 통신할 수 있는 방법을 제공한다.
  • 멀티 스레딩을 지원하여 클라이언트의 다중 요청을 알아서 처리해준다.
  • 대표적인 Conatainer에는 Tomcat, jetty, jboss 등이 있다.

 

출처: http://wiki.gurubee.net/pages/viewpage.action?pageId=26740202&

 

Comments