본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

servlet 이란 무엇인가?

by 미노드 2017. 3. 22.

1. Servlet의 이해

1.1 Servlet 이란

  • Servlet은 웹에서 JAVA 프로그래밍을 구현하기 위해 탄생 함.
  • JAVA 로 구현된 CGI(Common Gateway Interface) 라고들 흔히 말함
  • HTTP protocol 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속하여 개발하며, Servlet은 Container에 의해서 실행되고, 관리된다.
  • HTML 변경시 Servlet을 재컴파일 해야 하는 단점이 있다.

1.2 Servlet Container란

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

1.3 Servlet 동작과정



  • DD (배포서술자, Deployment Descriptor) = web.xml① 사용자가 URL을 클릭하면 HTTP Request를 Servlet Container에 보낸다.
  • ② Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
  • ③ 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. (DD를 참조하여 분석)
  • ④ 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호출된다.
  • ⑤ doGet() or doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
  • ⑥ 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
  • Servlet, Error Page, Listener, Fillter, 보안 설정등 Web Application의 설정 파일이다.
  • URL과 실제 서블릿의 매핑 정보도 담고 있다.
  • 하나의 웹 어플리케이션에 하나만 존재한다.
  • 보통 Web Document Root 디렉토리에 WEB-INF 폴더 아래 web.xml 파일로 존재한다.

1.4 JSP의 동작구조



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




서블릿(Servlet)
 - 자바 플랫폼에서 컴포넌트를 기반으로 한 웹 애플리케이션을 개발할 때 사용하는 핵심 기술.
   이러한 서블릿을 이용하면 웹 애플리케이션 확장이 용이하고 플랫폼에 독립적인 개발이 가능하다.
 - 쉽게 말하면 "클라이언트의 요구를 받아 그에 대한 처리를 한 후, 결과를 되돌려주는 서버 모듈"이다.


서블릿은 JSP에서 컨텐츠와 비즈니스 로직을 분리한다.
JSP가 텍스트 파일 구조인데 비해 서블릿은 자바 클래스 구조이다.


서블릿의 장점
1) 스레드를 기반으로 하기 때문에 웹 애플리케이션 운영에 효율적이다.
2) 자바를 기반으로 하므로 자바 API를 모두 사용할 수 있다.
3) 운영체제나 하드웨어에 영향을 받지 않으므로, 한번 개발된 애플리케이션은 다양한 서버 환경에서 실행 가능
4) 웹 애플리케이션에서 효율적인 자료 공유 방법을 제공한다.


웹 애플리케이션 개발시 서블릿 이용의 장점
1) 컨텐츠와 비즈니스 로직을 분리
2) 컨트롤러와 뷰 역할 분담으로 인해 웹 디자이너와 개발자간의 원활한 작업이 가능.
3) 유지보수가 수월, 기능 확장이 용이하다.
4) 현재와 같이 프로그래머가 HTML, 자바스크립트, 스타일 시트와 같은 복잡한 기술을 모두 알아야 할
    필요는 없다.
5) JSP에 HTML, CSS, 자바스크립트와 자바 소스 코드가 뒤섞이는 문제를 막는다.


서블릿 컨테이너(Servlet Container)

 - 서블릿 구조에서의 가장 큰 특징.
 - 서블릿을 서버에서 실행하기 위한 서버 프로그램. 
   웹 서버는 서블릿 자체를 실행하지 못하므로 JVM을 내장한 컨테이너라는 서블릿 실행환경이 필요하다. 


동작 과정
1) 웹 서버는 클라이언트 요청을 컨테이너로 전달한다. 컨테이너는 서블릿이 메모리에 있는지 확인하고 없을시
   클라이언트 요청을 처리할 스레드를 생성해서 처리한다.
2) 서블릿은 JDBC를 이용해 데이터베이스에 접근할 수 있고, 별도로 제작된 자바 클래스를 통해 다양한 기능을 구현한다.
3) 서블릿에서 수행된 결과는 HTML 형식으로 클라이언트에 전달된다.


아마 둘다 Java 언어로 만드는 것인데 이름이 비슷해서 헷갈릴 것이다.
둘 다 단순한 HTML 문서를 자바 프로그래밍을 이용하여 확장시킨 것으로 볼 수 있다.

애플릿(applet)은 하나의 완성된 자바프로그램이다. 자바가상머신(JVM)만 있으면 컴퓨터에서 실행시킬 수 있다.
쉬운 예로 들면, 플래시가 있는 웹 페이지를 생각해보자. 그 페이지를 접속하면 플래시가 실행된다. 브라우저 안에 플래시를 실행하는 기능이 플러그인

되어 있기 때문에 사용자는 이것이 어떠한 원리로 실행되는지 알 필요 없이 실행되는 것만 보면 된다.

애플릿도 동일하다. 웹 페이지 안에 들어있기 때문에, 그 페이지를 실행시키면, 자동적으로 실행되는 애플릿을 볼 수가 있다. 

애플릿은 완전한 자바 프로그래밍이기 때문에 확장성이 엄청나다. 프로그래밍에 따라서 무척 많은 것을 사용자에게 보여줄 수 있다.



서블릿(Servlet)도 하나의 자바프로그램이긴 한데, 서블릿의 주된 업무는 사용자에게 정보를 입력받아 적절한 HTML 문서를 돌려
주는 역할을 한다. 이러한 일을 하는 프로그램을 자바로 구현한 것이다. 사용자의 입력에 따라서 다른 HTML문서를 만들어내므로 동적인 HTML 문서를 구현할 수가 있게 된 것이다.


서블릿은 서블릿 규격에 맞게 구현해야 한다. 구현해야 하는 함수들이 미리 지정되어 있다. 그리고 서블릿은 서블릿 컨테이너라는 
기능이 있어야 실행이 된다. Tomcat이나 Resin등의 프로그램인데 이는 서버에 있어야하는 것이므로 사용자 입장에서는 신경을 쓰지 않아도 된다.


CGI라는 것이 사용자의 입력을 받아서 동적인 HTML 문서를 만드는 기능을 하는 것인데, 서블릿도 일종의 CGI라고 볼 수도 있다.

자바로 구현한 CGI 말이다. 하지만, 자바의 특성으로 인하여 기존의 CGI보다 훨씬 향상된 성능을 나타내게 된다.


서블릿 규칙은 꽤 복잡하다. 따라서 이를 좀 더 쉽게 프로그래밍하기 위하여 나온 것이 JSP이다. JSP 문서를 실행시켜면 이 문서가 
자동적으로 서블릿으로 컴파일되어 실행되게 된다.