란디의 메모장

#서블렛, 서블릿

  서블렛이 뭐더라  


Q. 서블렛이 뭔지 궁금해서

A. 서블렛은 자바에서 서블렛 인터페이스로 상속받고 HttpServlet를 상속받은 클래스이다.


#

  서블렛이 나온 배경


... 초략

원래는 자바로 개발된 프로그램은 두 가지 형태로 존재했었습니다. 하나는 웹브라우저 내에서 실행되는 애플릿(Applet)이고, 다른 하나는 보통의 애플리케이션처럼 더블클릭으로 실행될 수 있는 애플리케이션(Application)입니다. 전자는 웹브라우져 내에 포함된 JVM(Java Virtual Machine; 자바 가상 머신)상에서 실행되고, 후자는 운영체계 내에 설치된 JVM(Java Runtime을 인스톨하면 설치되는)상에서 동작합니다. 이 외에도 애플릿은 다음과 같은 특징이 있습니다. 대부분 보안을 위해 갖추어진 특징입니다.

  1. 로컬 파일시스템에 접근하지 못한다.
  2. 네트워크상의 다른 시스템에 접근하지 못한다.
  3. 새로운 프로그램을 시작하지 못한다.

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


  애플렛의 단점

사용자 유저 인터페이스 등의 프론트 엔드(front end)를 애플릿으로 만들려다 보면 너무 크기가 커지고, 이는 네트워크를 통해서 실행되어야 하는 애플릿 실행 속도를 현저하게 떨어뜨립니다.
 또한 애플릿이 다른 시스템에 접근하지 못 하게 하려면 애플릿이 있는 웹서버에 DBMS도 함께 존재해야 합니다. 이것은 서버의 큰 로드로 이어집니다. 이런 단점 때문에 나온 것이 서블렛(Servlet)입니다. 


  서블릿의 장점

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

  1. 클라이언트의 요청을 추출: 예를 들면 사용자가 폼에 입력한 값들.
  2. 이를 바탕으로 여러 가지 연산을 수행하거나 DB와 연동.
  3. 그 결과를 out.println("") 형태로 출력해서 클라이언트에 보냄.

클라이언트 쪽에서 요청 --> 서버 쪽에서 적절한 처리(DB 연동...) --> 사용자에 맞게 변형된 내용으로 보내줍니다. 즉, 다이내믹 컨텐트(dynamic content)를 만들어 줍니다. 그런데, 위와 같은 방식으로 작업을 하면 3단계째인 

out.println()

단계가 지나치게 복잡해집니다. 디스플레이와 관계되는 지저분한 html 태그들을 일일이 저런 형식으로 써가며 작업하기는 곤란하기 때문이죠.

그래서 ASP나 PHP 방식처럼 과 문서내에 자바 코드를 실행시킬 부분을 집어넣는 방식을 택합니다. html 안에 다이내믹하게 바뀔 부분만 

<% 자바코드 %>

 형태로 끼워 넣습니다. 다른 랭귀지와 비슷한, 서버 측 스크립팅 방식인데 서버에 있는 JVM을 활용한 Java 기반이라는 것이 다릅니다.

서블렛이 일단 서버의 메모리 내로 읽힌 다음에는 자바 객체 형태로 메모리 내에 머뭅니다. 그러므로 서버가 사용자로부터 요청을 받은 다음 부가적으로 인터프리터가 개입해야 한다거나 변수들이 새롭게 instantiate될 필요가 없습니다. (최초 한 번만 instantiate되면 충분합니다.)

즉, 서블렛은 대단히 효율적인 기술입니다. 서블렛은 마치 경계 상태에 있는 잠수함처럼 존재합니다. 항상 출동 준비를 하고 있는 상태입니다.


그런 점들이 JSP와 무슨 상관이 있을까요? 클라이언트 컴퓨터에서 최초로 JSP 페이지를 요청하면 서버는 자동으로 백그라운드에 있는 자바 서블렛(Java Servlet)을 빌드하고, 컴파일해서 구동합니다. 자바 서블렛은 html 페이지를 만들어 내고 그 html 페이지는 클라이언트 컴퓨터의 웹브라우저로 보내져서 사용자가 보게 됩니다. 중요한 점은, 일단 그렇게 된 다음부터는 JSP 페이지에 또 다시 접근하는 경우에도 다시 컴파일할 필요가 없다는 사실입니다. 그 즉시 데이터베이스에 질의해서 html 페이지를 만들어 내면 됩니다. 왜냐하면 서블렛은 이미 자바 바이트코드(bytecode) 형태로 웹서버의 메모리에 '떠'있기 때문입니다. ASP를 사용한다면 클라이언트가 새로운 요청을 만들어 낼 때마다 코드를 새로 인터프리테이션해서 새롭게 html 페이지를 만들어 내야만 할 것 입니다. 이는 곧 속도 저하로 이어집니다.

... 생략

공유하기

facebook twitter kakaoTalk kakaostory naver band