본문 바로가기

프로그래밍/자바

[JAVA] 서블릿(servlet)이란 _ 자바

[JAVA] 서블릿(servlet)이란 _ 자바




서블릿(Servlet)이란   | [출처 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF]

- 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양. 흔히 "서블릿"이라 불린다. 

- 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 

- 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.


비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.


* 추가   |  WAS

서블릿은 자바언어로 구현된 클래스이다. (더 정확히는 서블릿 인터페이스를 상속받은 HttpServlet 클래스를 상속받아 사용한다.)  서블릿을 사용하여 웹어플리케이션을 작동시키는 것인데, 이는 자바언어로 구현되어있으니 당연히 JVM이 필요하다. 그러니 그냥 웹서버는 자바언어를 해독하지 못한다. 자연스럽게 이를 구동시키기 위한 웹컨테이너(jsp&servlet를 구동 시키는 녀석)를 사용하는 것이다. 




서블릿(Servlet) 발생과정   | [출처 : http://www.emh.co.kr/content.pl?server_side_scripting_languages]


1. 애플릿

원래는 자바로 개발된 프로그램은 두 가지 형태로 존재 했었습니다. 하나는 웹브라우져내에서 실행되는 애플릿(Applet) _ 웹브라우져내에 포함된 JVM(Java Virtual Machine, 자바 가상 머신)상에서 실행되고, 다른 하나는 보통의 애플리케이션처럼 더블클릭으로 실행될 수 있는 애플리케이션(Application) _ 운영체계내에 설치된 JVM(Java Runtime을 인스톨하면 설치되는)상에서 동작합니다. 


2. 애플릿 특징&단점

이 외에도 애플릿은 다음과 같은 특징이 있습니다. (대부분 보안을 위해 갖추어진 특징입니다.)

- 로컬 파일시스템에 접근하지 못한다.

- 네트웍상의 다른 시스템에 접근하지 못한다.

- 새로운 프로그램을 시작하지 못한다.


애플릿이 만약 로컬 파일시스템에 접근할 수 있다면 악의적인 애플릿을 만들어서 그 애플릿을 실행하는 모든 사용자들의 하드디스크를 뒤질 수 있습니다. 또는 뭔가를 심어둘 수도 있습니다. 네트웍상의 다른 시스템도 마찬가지입니다. 그래서 보안을 목적으로 위와 같은 제한점을 두었습니다. 그런데 이런 특징들이 오히려 기업체 컴퓨팅에서의 자바의 활용을 제한하게 됩니다. 


3. 서블릿 발생

이런 단점 때문에 나온 것이 서블릿(Servlet)입니다. 

서블릿은 JVM을 클라이언트 쪽에 두지 않고 웹서버에 두는 데서 출발한 개념입니다. 애플릿처럼 클라이언트 쪽 웹브라우져로 건너가서 실행될 필요없이 웹서버에서 바로 실행, 그 결과만 보내면 되므로 네트웍상에서도 보다 원할하게 사용할 수 있습니다. 그리고 써버에서 실행되는 것이므로 보안에 대해 큰 걱정을 하지 않아도 됩니다. 얼마든지 로드가 많이 걸리는 작업을 분산할 수 있습니다. 


4. 서블릿 동작 방식

이러한 써블렛이 동작하는 방식은 크게 3단계로 이뤄집니다. 클라이언트가 써버에 어떤 것을 요청하면,

- 클라이언트의 요청을 추출: 예를 들면 사용자가 폼에 입력한 값들.

- 이를 바탕으로 여러 가지 연산을 수행하거나 DB와 연동.

- 그 결과를 out.println("") 형태로 출력해서 클라이언트에 보냄.

즉, 다이내믹 컨텐트(dynamic content)를 만들어 줍니다. 그런데, 위와 같은 방식으로 작업을 하면 3단계째인 out.println() 단계가 지나치게 복잡해집니다. 


그래서 ASP나 PHP 방식처럼 문서(html)내에 자바 코드를 실행시킬 부분을 집어넣는 방식을 택합니다. html 안에 다이내믹하게 바뀔 부분만 <% 자바코드 %> 형태로 끼워 넣습니다. 다른 랭귀지와 비슷한, 서버 측 스크립팅 방식인데 서버에 있는 JVM을 활용한 Java 기반이라는 것이 다릅니다.