Java

Servlet의 역사

Yukart 2022. 1. 11. 14:01
반응형

🧐 서블릿의 역사

 

 

🧐 서블릿의 역사

Servlet은 Java EE의 발전과 같은 맥락으로 함께 하고 있다. JSP, Servlet은 Java EE 버전에 따라 종속 되고 하위 기술로써 그 역할을 한다.

Java EE는 Java Enterprise Edition을 의미한다. Java EE에는 기업용 어플리케이션과 클라우드 어플리케이션 개발에 필요한 여러가지 복합적인 기술들이 정의되고 모아져있다. www.oracle.com에서 Java EE 버전 별 기술 사양 버전을 확인할 수 있다.

 

서블릿API

이름 출시 일 플랫폼 중요 변경 사항
자카르타 서블릿 5.0.0 M1 2020년 6월 자카르타 EE 9 API가 패키지 javax.servlet에서 다음 으로 이동 했습니다.jakarta.servlet
자카르타 서블릿 4.0.3 2019년 8월 자카르타 EE 8 "Java" 상표에서 이름 변경
자바 서블릿 4.0 2017년 9월 자바 EE 8 HTTP/2(HTTP 네트워크 프로토콜 의 주요 개정판)
자바 서블릿 3.1 2013년 5월 자바 EE 7 비차단 I/O, HTTP 프로토콜 업그레이드 메커니즘( WebSocket ) [14]
자바 서블릿 3.0 2009년 12월 자바 EE 6, 자바 SE 6 플러그 가능성, 개발 용이성, 비동기 서블릿, 보안, 파일 업로드
자바 서블릿 2.5 2005년 자바 EE 5, 자바 SE 5  
자바 서블릿 2.4 2003년 J2EE 1.4, J2SE 1.3 web.xml은 XML 스키마를 사용합니다.
자바 서블릿 2.3 2001년 J2EE 1.3, J2SE 1.2  
자바 서블릿 2.2 1999년 J2EE 1.2, J2SE 1.2 J2EE의 일부가 되어 .war 파일에 독립 웹 애플리케이션 도입
자바 서블릿 2.1 1998년   첫 번째 공식 사양이 추가되었습니다 RequestDispatcher.ServletContext
자바 서블릿 2.0 1997년 JDK 1.1  
자바 서블릿 1.0 1996년    

 

🔍 세부내용

먼저 서블릿의 역사를 알기 위해 서블릿이 왜 생겨나야 했나 이해해야한다. 그것을 위해서는 먼저 CGI(Common Gateway Interface) 개념부터 살펴보자.

 

💡 CGI

서버에서 다른 프로그램을 동적으로 실행시켜 요청,결과를 주고받는 표준 혹은 형식!

CGI는 호환성이 좋고, 간편하지만 사용자가 한번 요청할 때마다 웹서버가 프로세스를 하나씩 만들게 하기 때문에 사용자가 많아질수록 문제가 생긴다.

그렇기 때문에 새로운 규약들이 등장하게 되었는데, 그 중 하나가 Java 진영의 서블릿이다. 서블릿은

프로세스 단위가 아닌 쓰레드 단위로 동작 함으로써 그 문제를 해결하고자 하였다.

또한 동일한 작업의 경우 서블릿은 초기화를 매번 진행하지 않고 메모리에 존재하는 서블릿을 재사용 한다는 점이 있다.

💡 서블릿 2.4 ~

Servlet 2.4 버전 부터의 중요 변경 사항은 web.xml의 형식 변경이다. 원래 쓰던 DTD가 아닌 XSD방식을 사용한다.

XSD는 (XML Schema Definition)의 약자이다. XSD는 문서의 유효성 검증을 통해 특정 자료형들에 종속적인 정보들의 묶음을 만들어 내자는 의도로 설계되었다.

DTD를 보완하고자 만들었으며 2001년 탄생 했다.

  • 네임스페이스를 지원합니다.
  • XML 문법으로 작성할 수 있어 재사용, 확장이 쉽습니다.
  • 정수, 문자열 등의 다양한 타입을 지원합니다.

 

🪶 XML 코드 예제

<?xml version="1.0" encoding="UTF-8" ?>

<food>

    <name>상추</name>

    <type>야채</type>

    <cost>2000</cost>

</food>

🪶 DTD 코드 예제

<!ELEMENT food (name,type,cost)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT type (#PCDATA)>

<!ELEMENT cost (#PCDATA)>

🪶 XSD 코드 예제

<?xml version="1.0" encoding="UTF-8" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

    targetNamespace="http://codingsam.com"

    xmlns="http://codingsam.com"

    elementFormDefault="qualified">

 

<xs:element name="food">

    <xs:complexType>

        <xs:sequence>

            <xs:element name="name" type="xs:string"/>

            <xs:element name="type" type="xs:string"/>

            <xs:element name="cost" type="xs:string"/>

        </xs:sequence>

    </xs:complexType>

</xs:element>

 

</xs:schema>

💡 서블릿 3.0 ~

자바 서블릿 3.0의 가장 큰 특징은 4가지로 나눌 수 있다.

  1. 어노테이션 지원서블릿의 이름이나 필터를 web.xml에 등록하지 않고 @WebServlet 혹은 @WebFilter를 클래스로 설정할 수 있고, 컴파일해서 WEB-INF/classes에 넣거나 JAR 파일로 묶어서 WEB-INF/lib 폴더에 넣으면 자동으로 동작하게 해주는 기능이다. web.xml을 수정할 필요가 없기 때문에 플러그인 형태의 배포가 가능해진다.
  1. 파일 업로드 이전까지는 웹서비스 API에서 직접적으로 파일 업로드를 지원하지 않았다. 그래서 Commons 파일 업로드 라이브러리와 COS 멀티파트 파서를 이용하곤 했는데, 이제부터는 스펙에서 기본으로 파일 업로드 기능을 제공한다.
  1. web.xml 모듈화 그것뿐 아니라, web.xml을 여러 설정 조각으로 분리해서 각 JAR 파일의 META-INF 디렉토리에 분산시킬 수도 있다. 이때 각 설정 조각은 반드시 web-fragment.xml이라는 이름이어야 하며, 해당 설정 XML의 탑 레벨 엘리먼트는 web-fragment여야 한다.
  1. 비동기 웹서비스와 코멧 지원 @WebServlet 어노테이션의 속성인 asyncSupported의 값을 true로 설정하면 해당 서블릿이 요청을 비동기적으로 처리하게 할 수 있다.

 

💡 서블릿 4.0 ~

가장 큰 변경 사항은 HTTP 프로토콜의 두 번째 버전인 HTTP/2를 지원한다는 것이다. HTTP2의 특징에는 다음과 같이 두드러진 점이 보인다.

  • 클라이언트와 서버가 HTTP 1.1, 2.0 혹은 다른 비 HTTP 프로토콜 사용을 협상할 수 있는 메카니즘 구현
  • HTTP 1.1과 호환성 유지

 

💡 자카르타 서블릿

자카르타 서블릿은 Java EE 8 이상부터 Eclipse 로 넘어가면서 부터 명칭만이 아닌 새로운 패러다임으로 진화하려고 합니다. 대략적인 히스토리는 아래 그림으로 대체합니다.

 

자카르타EE는 자바EE를 대체하지 않았고 둘 다 공존하고 있습니다. 자카르타EE는 자바EE 8에서 하드포크된 새로운 플랫폼으로 기존 자바EE와 호환되지 않습니다. 자바EE는 계속 유지되지만 8 버전을 마지막으로 더 이상의 릴리즈와 추가 기능은 제공되지 않고 있습니다.

 

자카르타EE의 핵심 목표는 '클라우드 네이티브 환경을 위한 엔터프라이즈 자바 기술'로 마이크로서비스, 컨테이너 등의 최신 기술 트렌드를 반영하고자 합니다.

 

자카르타EE 10에 추가되는 첫 번째 기술 사양은 자카르타 NoSQL입니다. 자카르타 NoSQL은 자바 애플리케이션과 NoSQL 데이터베이스를 통합하기 위한 표준으로 RDBMS의 통합을 위한 JDBC(Java DataBase Connectivity) 사양과 비슷한 개념입니다.


반응형

'Java' 카테고리의 다른 글

Java Thread 기초  (0) 2022.02.04
java 자주 발생하는 예외  (0) 2022.02.04
Java 메모리 영역(Static, Stack, Heap)  (0) 2022.01.11
Java Servlet이란  (0) 2022.01.11
DBMS별 JDBC Driver  (0) 2022.01.11