1. 서문 & 언터프라이즈 환경의 서블릿

ㅇ 누구를 위한 책인가 ?
   - 이 책은 자바 언어와 자바 핵심 API에 익숙한 개발자들을 대상으로 한다.
ㅇ 이책에서 다루고 있는 내용
   - 엔터프라이즈 환경에서 서블릿을 사용하기 적합한 곳과 사용법에 대한 전반적인 개념 설명으로 시작한다. 
   - 2,3장에서는 서블릿 API를 다룬다. 
   - 4장에서는 웹 애플리케이션의 구조와 웹 서버에 배치하는 방법을 알아본다 .
   - 5-7장에서는 서블릿의 강력한 특징 중 일부분인 새션관리, 서블릿 영속성, 필터에 대해서 알아 볼것이다. 
   - 8장에서는 자바 서블릿을 보완하는 기술인 JSP에 대해서 알아 볼것이다. 
   - 9-11장에서는 실제 실행하는 환경에 웹 애플리케이션을 배치할 때 발생되는 문제들에 대해서 알아보게 된다. 디버깅 방법에 대해서 알아보고, 틀래스 로딩과 동기화를 고려하지 않았을때 발생될수 있는 문제점들을 알아볼것이다. 
   - 12,13장에서는 성능과 유지보수에 영향을 줄수 있는 효과적인 웹 애플리케이션 설계 방법에 대해서 알아본다. 좋은 애플리케이션을 만들기 위해 사용되는 여러가지 패턴들에 대해서 알아보고, 웹 애플리케이션의 성능과 확장성을 개선하기 위해 사용하는 테크닉과 도구들에 대해서 알아볼것이다. 
   - 마지막으로 14장에서는 웹서비스의 정보에 접근하는 에이전트로 서블릿을사용하는 방법에 대해서 알아볼것이다.

이책의 소스 코드를 다운로드 하는 방법
http://www.wrox.com/에 접속하여, 검색 기능을 이요하면 이책의 코드를 다운로드 할수 있다.

1, 엔터프라이즈 환경의 서블릿
자바는 분산 프렛폼에서 사용할수 있는 이미 검증된기술이다. 이책을 읽고 있는 독자들은 이미 J2SE에 익숙할거싱다. 이책에서 초점을 맞추어 진행 할 내용은 J2EE이다. 좀더 정확하게 말하자면, J2EE의 한 부분인 자바 서블릿 2.3API에 대해서 자세하게 다룰 것이다.
J2SE를 기반으로 한 J2EE는 엔터프라이즈 애플리케이션개발과 배치에 필요한 API와 서비스들을 제공한다. J2SE와 J2EE의 서비스와 라이브러리를 이용하면 플래폼 독립적인 웹 서기반 애플리케이션 개발을 쉽게 할수 있다. 그리고 J2EE 플렛폼에서는 J2EE애플리케이션이 설치되고 작동될 환경을 서버 벤더가 제공할수 있다.
 - 분산 애플리케이션으로 앤터프라이즈 아키텍처를 구성하는 방법과 웹 애플리케이션이 포함되는 계층에 대해서 알아본다.
 - J2EE아키텍처가 웹 컨테이너와 자바 서블릿을 이용하여 쉽게 웹 개발을 하는 방법과 서블릿 개발자들이 애플리케이션을 개발하면서 필요한 J2EE서비스와 라이브러리에 대해 알아본다.
 - 서블릿 2.4 스펙을 이용하여 자바 서블릿으로 웹 애플리케이션을 개발할때 얻을수 잇는 장점에 대해서 알아본다.
 - 컨테이너 제작 업체와 개발자가 서블릿 스펙을 구현할때 각자의 역할에 대해서 이야기 하며, 서블릿 스펙의 참조 구현 웹 컨테이너 / 서버인 톰캣을 소개한다.
 - 이장의 마무리는 앤터프라이즈 애플리케이션에서 서블릿의 역할, 중요성, 적절함 등에 대해서 알아본다.

ㅇ 네트워크와 프로토콜
모든 시스템은 유선등의 물리적인 네트워크로 서로 연결된다. 이러한 네트워크는 컴퓨터 시스템과 그안에서 작동되는 소프트웨어들 사이에 커뮤니케이션을 위한 연결을 제공한다. 기본적인 네트워크 토폴로지들은 아래 내용과 같다.
 - 스타 토폴로지 : 허브라고 불리는 중심점이 되는 컴퓨터에 연결시키는데 사용된다.
 - 링 토폴로지 : 각각의 컴퓨터들이 막힌 루프형태로 서로 연결되어 있다.
 - 공유된 하나의 통로를 이용하여 시스템 커뮤니케이션을 한다.
이 토폴로지들은 주로 LAN환경에서 사용된다. 이러한 토폴로지들은 가장 일반적인 구조이며, 서로 조합되거나 파생된 형태의 다른 토폴로지도 존재한다.

프로토콜이란 커뮤니케이션을 위한 규칙의 집합이다. 많은 프로토콜들이 공통 표준과 메시지 형식을 지정하여 개발되었기 때문에, 서로 다른 시스템간에 정보와 데이터를 교환할수 있다. 이러한 프로토콜은 특정 서비스를 제공하도록 설계되었으며, 실뢰성있는 네트워킹 서비스를 제공하기 위하여 계층으로 되어 있다.
물리적 단계에서는 하드웨어적인 물리적 연결이 통신하는 컴퓨터들 사이에 놓이게 된다. 그리고, 필수적으로 네트워크 카드와 유무선 연결이 포함된다. 이러한 연결은 컴퓨터간에 전달하는 메시지가 전달될 매체를 제공된다.

네트워크 레이어에서는 컴퓨터간의 커뮤니케이션을 수비게 해주는 이더넷과 같은 프로토콜을 구현하며, 데이터를 프레임이라는 단위로 나누어 네트워크로전송하는것을 다룬다. 또한 데이터 전송크기와 큰 메시지의 분할과 재조립 방법을 결정혐, 네트워크에 문제가 발생하였을때 처리할 방법도 결정하게 된다.
시스템에서 전송된 메시지들은 계층화된 프로토콜에 쌓여서 네트워크에 있는 다른 시스템으로 전송되며, 메시지를 받은 시스템에서는 반대로 메시지의 프로토콜을 제거한다. 논리적으로 각 레이어는 상대 컴퓨터의 동일한 레이어와 통신하게 된다.

TCP/IP
IP는 패킷의 크기를 결정하고 각 패킷이 목적지로 찾아가는 매커니즘을 정의하게 된다. 이 프로토콜은 연결된 컴퓨터의 IP주소를 이용하여 데이터가 네트워크를 통해 목적지로 찾아 갈수 있게 한다. 그리고 데이터의 유실이나 도착 순서가 바뀌는 등의 문제 ㅁ때문에 비교적 신뢰할수 없는 프로ㅗ콜이기도 하다. TCP는 연결성 통신으로 애플리케이션 레이어를 제공한다. 그리고 데이터의 모든 패킷을 받고 정확한 순서로 재조립하기 땜분에 IP와는 다르게 신뢰성이 있다.

HTTP
주로 애플리케이션 레이어의 통신방법으로 제공된다. 웹애플리케이션에서 가장 많이 사용되는 프로토콜은 HTTP이다. 웹 컨테이너와 J2EE 애플리케이션들은 사용자의 요청, 응답 프로토콜로 HTTP를 지원해야 한다. 웹의 가장 일반적인 최상위 프로토콜이기 때문에 HTTP를 사용하는 애플리케이션은 통신하려는 대부분의 서버들과 메시ㅣ지 교환이 가능하다.
HTTP는 송수신 요청을 정의된 형식으로 제공하며, 서로 다른 시스템과 언어로 개발된 애플리케이션들이 통신할수 있는 공통 언어의 역할을 하게 된다.
HTTP는 다른 프로토콜보다 많은 서버와 클라이언트가 사용하룻 이슨 웹의 표준언어이며, 대부분의 웹 서블릿 개발에 사용되는 궁극적인 프로토콜이다.

ㅇ계층화된 아키텍쳐
엔터프라이즈 애플리이케이션 개발 방식이 점점 3계층이상의 다계층 애플리케이션 모델로 많이 변화되고 있다. 애플리케이션을 논리적으로 서로 다른 여러 계층으로 분리 시키는것은 아래와 같은 장점이 있다.
 - 관련된 규칙과 각 계층에 적합한 기능을 모듈로 캡슐화 할수 있으며, 쉬운 유지보수와 개발이 가능하다.
 - 모듈화는 컴포넌트 기반 개발을 통하여 비즈니스, 프리젠테이션 등 로직의 유연성과 재사용성에 도움을 준다.
 - 다른 계층간의 관계와 제공해야 할 서비스들을 미리 정의한다면, 각 개발자들이 자신이 갖고 있는 기술들을 특정 계층에만 초점을 맞추어 개발 할수 있다.

클라이언트 계층 : 데이터와 정보를 사용자에게 설명하거나 보여주는 계층이다.
서버와 중간계층 : 클라이언트가 요청한 데이터나 액션을 처리하여 응답한다. 여기서는 일반적으로 핵심 애플리케이션 로직이 존재하게 된다. 그러나 중간계층은 다시 두개의 계층으로 구분되게 된다.

비즈니스 계층 : 비즈니스 로직을 책임지는 계층이다. 애플리케이션 신뢰도를 위해 비즈니스규칙을 구현하는 것이 중요하다. 

웹 계층(프리젠테이션 계층) : 비즈니스 데이터를 클라이언트에게 보여주기 위해서 재가공하는 계층이다. 클라리언트의 요청을 받아 해당되는 비즈니스 로직이 있는 비즈니스 계층으로 데이터를 포워드 한다.

ㅇ J2EE 플랫폼
자바는 스펙에 따라 표준화도니 많은 서비스와 API가 있기 때문에 개발자가 쉽게 이용할수 있다. 다시말해 표준에 맞는 서버에서 개발한다면, 다른 벤더의 서버에서도 별 다른 어려움 없이 개발된 애플리케이션을 배치 할수 있다는 의미이다.
J2EE 애플리케이션의 자바 기반 클라이언트는 씬 클라이언트의 구조를 이용한다. 씬 클라이언트란 서버와 통신하는 비교적 가벼운 클라이언트 애플리케이션을 의미한다.

ㅇ 웹 컨테이너
웹 애플리케이션을 위한 웹 컴포넌트인 서블릿과 JSP페이지의 실행을 관리하는 자바 실행환경이다. 그리고 웹 서바나 애플리케이션 서벙듸 일부분으로 요청과 응답을 만드는 네트워크 서비스를 제공한다. 웹 컨테이너는 반드시 HTTP를 지원해야 하며, 부가적으로 다른 종류의 프로토콜을 지원할수 있고, 웹 서버의 일부분으로 제작되거나 웹 서버의 플러그인 컴포넌트로 제작될수 도 있다. 웹 컨테이너는 서블릿과 JSP 인스턴스의 라이프 사이클과 실행을 관리한다.

ㅇ EJB 컨테이너
엔터프라이즈 자바빈즈는 비즈니스 규칙과 로직이 있는 비즈니스 컴포넌트이다. EJB에는 두가지 기본적인 종류가 있으며, 구중 하나는 데이터 자체와 강하게 결합되어 데이터 접근과 영속성 관리를 하는 엔티티빈이다. 다른 하나는 세션빈으로 로직을 표현하며, 클라이언트 요청을 처리하거나 데이터 처리 로직을 담당한다.
EJB 컴포넌트는 EJB컨테이너 안에서 실행된다. EJB컴포넌트는 재사용 가능하며 최적화를 위해 인스턴스가 풀링 되고 재활용되도록 설계하였다. EJB컨테이너는 애플리케이션을 위해서 EJB컴포넌트의 실행과 폴링을 관리할 책임이 있다.

ㅇ 자바 서블릿
서블릿은 동적으로 요청을 처리하고 응답을 생성하는 자바 클래스이다. 결국 요청에대해서 동적 HTML 페이지를 응답으로 생성한다는 뜻이다. 그러나, 애플릿이나 자바 애플리케이션에 직렬화된 자바 객체를 응답으로 생성한다는 뜻이다. 그러나, 애플릿이나 자바 애플리케이션에 직렬화된 자바 객체를 응답으로 보낼수 있으며, XML 같은 다른 형태로도 응답의 데이터를 보낼수 있다. 서블릿은 서블릿 컨테이너에서 동작하며 컨테이너가 제공하는 서비스에 접근할수 있다.

ㅇ서블릿 라이프 사이클
1. 컨테이너는 서블릿이 요청을 처리하기 전에 초기화 한다.
2. 서블릿 컴포넌트는 클라이언트 계층의 요청을 받는다. 컨테이너가 실제적으로 요청을 받아 적절한 컴포넌트의 인스턴스와 연결하고, 형식화된 요청과 응답 객체를 컴포넌트에 전달한다.
3. 서블릿은 비즈니스 계층의 로직의 도움을 받거나 직접 데이터베이스나 엔터프라이즈 인포메이션 계층에서 정보를 추출하여 요청을 처리한다.
4. 처리가 끝나면 클라이언트에게 응답을 리턴한다.
5. 최정적으로 컨테이너는 생성된 서블릿 인스턴스를 종료한다.

ㅇ 서블릿 통신
1. 요청/응답 사이클 중에 클라이언트와 하는 통신
2. 컨테이너 호나경에 관한 정보나 JNDI리소스에 접근하기 위해서 서블릿 테이너와 하는 통신
3. 다른 서블릿이나 EJB같은 서버의 다른 리소스와 하는 통신
4. 요청을 처리하기 위해서 데티어베이스나 레거시 시스템, EIS와 하는 통신

일반적으로는 서블릿의 역할은 클라이언트와의 통신이다. 컩테이너와의 통신은 클라이언트에게 리턴하기 위하여 데이터를 만드는 것과 달리 서비스를 제공하는 리소스에 접근한다. 실제로 유용하게 사용하기 위해서 스블릿은 다른 서버 컴포넌트나 데이터베이스 같은 외부 백엔드 리소스와도 통신한다.

ㅇ서블릿-클라이언트 통신
클라이언트와의 통신은 여러 형태로 할수 있짐나, 텍스트기반의 통신을 한다.
HTTP통신에서 일부 또는 모든 정보 파라미터는 요청의 일부분으로 전달된다. 서버의 응답으로 부터 클라이언트에 리턴할수 있는 데이터의 형식은 클라이언트에 따라서 다르다.

ㅇ서블릿의 이점
동적으로 생성되는 페이지가 필요하였고 CGI가 개발되어 이러한 역할을 수행하였다. CGI는 분리된 프로세스로 동작하는 CGI프로그램으로 요청을 넘겨 처리하게 되어 있다. 그러나, CGI 스크립트를 분리된 새로운 프로세스로 실행시키기 위해서는 처리시간이나 서버 리소스가 낭비되고 결국 확장성에 문제가 있게 되었다. 한번 실행된후에는 서버의 리소스나 정보에 접근할수 없다는 단점을 갖고 있다. 그리고 CGI 스크립트는 데이터베이스 커넥션 같은 리소스를 공유하거나 풀링 할수 없기 대문에 성능상의 문제가 있다.
이러한 CGI를 대체하기 위해여 서버 벤더들이 만든 기술이 있다.
CGI와 자바의 가장 분명한 차이는 프로세스 실행방식이다. CGI 스크립트는 개별적인 프로세스로 동작하는 데 비하여 자바 서블릿은 서버 프로세서ㅡ의 일부로 동작하기 때문에, 확실한 성능상의 이익이다. 그리고 서블릿 인스턴스는 각각의 호출 사이에 유지되기 때문에 매번 호출될 때마다 다시 생성할 필요가 없다. 또한 서블릿은 서블릿 컨테이너와 서블릿이 실행되는 실행 환경에 접근할수 잇다. 이것은 서블릿이 데이터베이스 같은 공유자원에 접근할수 있다는 뜻이다.

서블릿은 요청-응답 형식의 모든 CGI서비스를 제공하며, J2SE, API 서블릿 API 전체 J2EE API를 포함하여 여러가지 자바 라이브러리를 사용할수 있다. 그리고 외부 벤더가 제공하는 JDBC 드라이버나 XML 파서 같은 외부의 다른 API들도 사용할수 있으며, 이러한 라이브러리와 API는 플렛폼과 서버에 독립적으로 사용할수 있다.

ㅇ프로토콜의 유연성
 - javax.servlet
 - javax.servlet.http

ㅇJSP 컴포넌트
JSP 는 서블릿 기술을 웹 컨텐츠를 생성하는 일부분으로써 확장한 기술이다. JSP는 directive 태그, scriptlets로 불리는 일반 자바코드와 HTML을 포함할수 있으며 태그와 scrptlet은 동적 컨텐츠를 생성하는데 사용된다. JSP페이지는 최초로 호출할때 서블릿으로 컴파일되어 실행된다.

J2EE Connector아키텍처 있는 표준 아키텍처를 제공한다. 즉, 프로그래머에게 기본 정보 시스템에 접근할수 있는
Connector 아키텍처는 개발자들에게 J2EE와 다양한 EIS접근할수 API를 제공하는 것이다.
J2EE Connector 아키텍처는 엔터프라이즈 정보 시스템과 데이터를 주고 받게 된다. Connector API를 사용하여 엔터프라이즈 정보 시스템에 접근하기 위해서는 데이터베이스를 접근하기위한 JDBC와 유사하게 동작하는 resource adapter가 필요하다.

ㅇ자바 트랜잭션 서비스
JTS는 복잡한 분산 트랜잭션 처리를 위한 API를 제공하고commit과 rollback으로 고수준의 트랜잭션을 제어할수 있게한다. 이러한 트랜잭션 서비스는 여러 데이터베이스를 하나의 트랜잭션으로 관리할 수 있게 한다. 여러 트랜잭션 중에 하나라도 실패한다면 모든 트랜잭션이 rollback 되고 반대로 실패한 트랜잭션이 없으며 전체 트랜잭션이 commit 되게 한다.

ㅇ웹애플리케이션에서 서블릿의 역할
1. 적절한 요청 파라미터를 추출하여 데이터베이스 쿼리를 만든다.
2. 데이터베이스와 연결하고 데이터베이스로부터 결과를 받는다.
3. 마지막으로 클라이언트에 적하ㅏㅂ하게 결과를 보여준다.


저작자 표시

Trackback 0 Comment 0