"JSP를 이용한 웹 Content 개발에 따른 Skill 조사"1. 동적 content 기술의 변천사1.1 초기의 웹인터넷은 TCP/IP를 기반으로 전세계에 연결된 세계 최대의 네트웍을 의미한다. 인터넷의 역사를 간단하게 살펴보면, 1956년 미 국방부내에 ARPA(Advanced Research Project Agency)가 창설 되면서 "패킷 스위칭 기술"을 적용하여 서로 다른 장소에 있는 컴퓨터를 연결하고 연구원끼리 E-mail을 주고 받는 등 정보를 공유하는 시스템을 개발하게 되었고, 이것이 바로 ARPANET을 탄생하게 만들었다.1970년대 ARPANET은 이기종 컴퓨터 네트웍 간의 데이터 교환을 위하여 새로운 프로토콜 규칙을 개발하도록 지원하였고, 그 노력으로 탄생한 것이 오늘날 인터넷의 표준이 된 TCP/IP 프로토콜이다.TCP/IP는 OSI 7Layer로 보면 3계층인 네트웍 층과 4계층인 전송층에 대응하며, 1,2 계층을 통합하여 서브네트웍 레이어를 갖는 것은 네트웍 연결이 전화망, 데이터망, 무선망, 위성망을 가리지 않고 연결이 될 수 있으며, 네트웍층에 대응하는 IP 레이어의 IP주소로 전세계 서브네트웍에 연결된 단말기 노드를 찾아 갈 수 있는 것이다. 이러한 TCP/IP 기반 위의 인터넷 서비스들은 1980년대 Telnet, FTP, 메일(SMTP), 도메인 이름 서비스(DNS)등 잘 알려진 서비스를 제공하고 있었지만 대중적인 폭발력을 갖지는 못하다가 1990년에 HTML이 개발되고, 1991년 최초의 웹 브라우져로 소개된 모자익이 제공되면서 콘솔 기반의 텍스트 위주의 인터넷 서비스가 GUI기반의 멀티미디어 서비스로 발전하게 되면서 대중적인 웹 서비스로 괄목할 발전을 시작하였다.웹의 역사는 실제 1990년도 초반의 HTML 서비스로 시작하고 있다. 이를 1세대 웹 서비스라고 하는데, 처음엔 정적인 HTML문서 전달을 기반으로 발전하였고, 단방향 기술이었다. 그러나 HTML문서는 인터넷 상에서 그래픽, 사운드, 동영상 등의 멀티미디어 파일세스 기반의 CGI 스크립트 문제를 해결하기 위해 Netscape나 MS(IIS)에서는 웹 서버의 프로세스를 확장하는 외부 라이브러리 호출에 CGI 프로토콜을 적용할 수 있는 NSAPI와 ISAPI를 소개하였다. 이것을 웹 서버 제공 API 라이브러리를 이용해 CGI 서비스를 프로세스 방식이 아니라 동적 라이브러리 방식으로 작성하여 한번 프로세스에 비해 로딩 속도를 향상 시키고, 한번 로딩되면 웹 서버 프로세스 내에서 수행되기 때문에 메모리에 상주하는 서비스가 가능하게 되었다. 그러나 이 역시 문제가 되는 것은 API라이브러리를 이용하는 개발이 전문성을 요구하고, 웹서버 마다 API 라이브러리가 달라 이식성이 떨어지고, 특정 CGI라이브러리에서 문제를 발생시키면 프로세스 자체를 내려야 하기 때문에 상주 서비스를 해야 하는 웹서버를 내려야 하는 문제등이 있었다. 그래서 웹 서버 API를 확장해 독립적으로 메모리를 사용하고, 프로세싱하는 방식이 고안되기 시작했는데, 이를 확장 CGI라고 한다.1.3 Server-Side Script 방식의 웹 기술컨텐트를 동적으로 생성해 내려면 웹 서버가 런타임에 사용자의 요청을 처리하여 그에 적합한 응답 정보를 만들어야 한다. 필연적으로 이러한 처리를 수행하는 어떤 명령이 있어야 하기 때문에, 프로그래밍이란 것이 필요하다. 최근에 각광을 받고 있는 대부분의 동적 컨텐트 시스템에서는 스크립팅 언어(Scripting Language)를 사용하고 있다. 이러한 시스템의 대표적인 예는 Sun이 제시한 Java Servlet/JSP(Java Server Page), MS의 ASP(Active Server Page) 등이 있고, 국내에는 한국 컴퓨터 공학에서 제시하는 UniTcl 등이 있다. 최근에 유행하고 있는 PHP방식도 확장 CGI를 응용한 것으로 알고 있다. 또한 상태 정보를 관리하기 위해 Netscape브라우져에서 처음으로 소개된 Cookie가 많이 적용되고, 최근에는 서버에서 상태 정보를 관리할 수 있게끔 확장 CGI에서는 서버 웹 개발자는 기존에 사용하던 동적 웹 페이지 개발 툴이나 인터페이스를 그대로 사용할 수 있다. 또한 어플리케이션 로직(비즈니스 로직)은 서버 상의 자원( JavaBeans 컴포넌트 또는 EJB 컴포넌트등 )으로 제공하고, 웹 문서에서는 JSP 태그를 사용하여 해당 어플리케이션 컴포넌트를 접근할 수 있다. 이렇게 웹 페이지 설계와 어플리케이션 로직을 분리함으로써 재사용 가능한 컴포넌트 기반의 설계를 할 수 있으며, JSP 기술은 그것을 기존의 웹 어플리케이션 개발방식에 비해 훨씬 쉽고 빠르게 개발할 수 있는 환경을 제공한다.JSP 명세서는 Sun Microsystems이 주도하는 Web산업 전반의 주도적인 제품이 될 것이다. Sun은 모든 웹서버와 어플리케이션 서버가 JSP 인터페이스를 지원하게 하는 목표를 같고 , JSP 명세서를 개발자들이 무료로 사용할 수 있게 했다. 보다 많은 산업계의 벤더들이 JSP 기술을 자신들의 제품에서 지원함으로서, 웹을 도입하는 조직들은 개발 툴과 플랫폼 선정에서 자유롭고, 웹기반의 사용자 인터페이스 설계 시 산업표준(HTML, XML) 을 사용할 수 있다.JSP 페이지는 Java 기술의 "Write Once, Run Anywhere" 특징을 갖으며, JSP 기술은 Java 2 Platform, Enterprise Edition 기술들의 웹 확장성을 지원하는 핵심 기술이다.2.1.1 Java Server Page의 주요 특징 정리(1) 웹 페이지 생성이 간단하다HTML관련 태그와 Java 언어로 작성한 스크립렛은 웹 페이지의 컨텐트 생성 로직을 인캡슐레이션 했다. 표준 HTML 또는 XML 태그 포맷과 설계를 처리한다. 웹 페이지 디자인을 데이타를 생성하는 어플리케이션 로직과 분리시켜, JSP는 기업들이 어플리케이션 기능들을 Java 컴포넌트들로 잘 나누고, JSP 명세에서 지원하는 태그를 통해 재사용 하거나 공유하기 쉽다.(2) 재사용 가능한 S/W 컴포넌트와 Tag 라이브러리 지원JSP는 JavaBeans 컴포넌트, EJB erprise Edition(J2EE) API의 하나로 산업계의 표준으로 발전하고 있다.Java Servlet은 Java 2 Platform Enterprise Edition(J2EE) API에서 제공하는 엔터프라이즈 기술의 하나로 Sun Microsystems를 위시한 산업계의 영향력 있는 업체들이 같이 참여해 웹 환경 개발 및 수행환경의 표준으로 명세서 작업에 참여하고 있고, 지원하는 서블릿 컨테이너와 어플리케이션 서버들을 제공하고 있다. Apache Group에서도 현재 Java Servlet 2.2와 JSP1.1을 지원하는 무료 서블릿 컨테이너 Tomcat 3.1을 지원하고 있어서 많은 개발자 그룹의 참여를 유도하고 있다. 현재 Java Servlet 2.2 API 명세서가 제공 중이다. Java Servlet 2.0 API는 javax.servlet과 javax.servlet.http 두 개의 패키지로 제공된다.Java Servlet은 기본적으로 Java Technology가 제공하는 장점을 다 가지고 있어서 어떠한 서버에서든 JVM만 지원 된다면 실행 가능 하므로 웹 서버 플랫폼에 독립적이고, 서버 기능 확장이 쉽다.[Multiple Thread 처리]Java Servlet은 클라이언트의 요청에 대해 서블릿 컨테이너에 의해 독립된 Thread기반으로 서비스가 되는 Multiple Thread 서비스가 기본적으로 제공이 되어 프로세스 기반의 서비스에 비해 수행 속도가 빠르다. 또한 javax.servlet.SingleThreadModel 인터페이스가 제공이 되어 싱글 쓰레드로도 서비스 할 수 있어 쓰레드 기반의 서비스가 쉽다.[Java Servlet 2.2에서 향상된 기능들]2.2에서는 웹 어플리케이션 개념 및 웹 어플리케이션 아카이브 파일(war)을 도입하였고, 응답 버퍼링과 분산 서블릿을 도입하여 보다 더 엔터프라이즈 환경에 적합한 기능들을 제공하고 있다. Java Servlet 2.2에서 향상된 기능들에 대해서는 Appendix D를 참고로 하기O/S, 서버 플랫폼 환경에서 지원될 수 있는 API엔진을 개발할 수 있으므로 자바 표준을 지원하는 것이 유리하다.2.2.3 Java Servlet 컨테이너Java Servlet이 수행되기 위해서는 웹 서버에 Java Servlet Class를 실행시킬 수 있는JVM(Java Virtual Machine)이 있어야 하고, JVM상에서 웹서비스를 위한 시스템 서비스를 서블릿 응용 클래스에 제공하는 Java Servlet API의 추상 클래스, 인터페이스 등을 구현하여 서비스 해주는 자바 프로그램을 서블릿 컨테이너라고 한다.서블릿 컨테이너는 클라이언트의 HTTP요청을 응용 서블릿에 전달하고, 서블릿의 HTTP응답 메시지를 클라이언트에 돌려주는 역할을 한다. 서블릿 컨테이너는 Java Servlet API를 구현하고 있지만 구현 상세 내용은 엔진간에 서로 다르다. 그러나 Java Servlet API표준을 지원함으로 Java Servlet API를 이용해 개발한 서블릿 응용 클래스들은 모든 서블릿 컨테이너에서 바이트 코드상태로 이식이 가능하다. 이러한 서블릿 컨테이너는 서블릿 API를 구현하고, 서블릿과 직접 통신하기 때문에 대부분 순수 자바 코드로 작성된 자바 어플리케이션이다.JDBC API를 이용하여 Java로 Database 연동 어플리케이션을 수행할 때 반드시 해당 Database에 대한 JDBC Driver( JDBC API를 해당 DB에 맞게 지원하는 Java 패키지)가 있어야 하듯이 자바 서블릿이 수행되기 위해서는 해당 Web Server를 지원하는 자바 서블릿 컨테이너가 있어야 한다. 이러한 서블릿 컨테이너는 웹 서버와 같이 구현되어 일체로 나온 제품들도 있고, 기존 웹 서버를 지원하기 위해 웹서버와 연동을 지원할 수 있도록 나온 제품들도 있다.Servlet Container의 종류는Sun Microsystems 이 제공하는 Servlet 컨테이너들인 JSDK, JSWDK, J2EE, Java Web Server등이 있고 Apache가 제공하는 Ser 있다.