분산 시스템의 소개
시스템 환경 변화
- 1-tier 시스템 : 메인 프레임 중심
- 2-tier Client/Server 개방형 시스템
- 3-tier 미들웨어 시스템 등장 : 2-tier 시스템에 대해 보완을 하기 위해
- 
N-tier 시스템 등장 - 
시스템 구성 - 3-tier 환경을 극복하기 위하여 개발된 환경
- EJB 컴포넌트 기반으로 작성되므로 내부적으로 RMI를 사용하여 통신한다.
- EJB 아키텍쳐는 개발자가 분산환경을 쉽게 개발할 수 있게 되어 있다.
 
- 
N-tier 시스템 설계시 유의사항 - 확장성 고려, 계층간 의존성 최소화
- 이식성
- 어플리케이션 설치 시 시스템 환경에 대한 영향 최소화
- 네트웍 트래픽 고려
- 특정 벤더의 솔루션에 의존하지 말아야
 
 
- 
- 
미들웨어의 종류 - TP-Moniter : 이질적인 분산환경에서 트랜잭션을 처리하고 각종 처리절차를 관리하는 기능을 제공
- Web Application Server : 웹상에서 트랜잭션 처리, 이기종간 상호 통신 기능(J2EE) <= Jeus가 여기에 속함
- Messaging Oriented Middleware : 메시지를 큐라고 불리는 전달 중계소에 넣어 처리하고 큐에 의한 메시지 관리 기능 제공(비동기적)
- Object Request Broker : 클라이언트 객체가 ORB라는 소프트웨어 버스를 이용하여 원격지 서버의 메소드를 호출하는 기능 제공
 
J2EE의 이해
- 
Java TM - 목적 : To Ensure "Write Once, Run Anywhere"
- 플랫폼 : J2SE, J2EE, J2ME
 
- 
J2EE란? - 
엔터프라이즈 환경에서 자바를 이용한 어플리케이션 개발을 위한 표준 - 데이타베이스 처리(JDBC, JTS, JTA)
- 비동기 메시지 처리(JMS)
- 분산 트랜잭션 컴포넌트(EJB)
- 분산 객체(RMI)
- 웹 어플리케이션(Servlet, JSP)
 
- J2EE의 모든 스펙들은 벤터들에 의해서 구현되며 개발자들은 표준 API를 이용하여 개발한다.
 
- 
- 
J2EE - JDBC - Java DataBase Connectivity
- 표준화된 데이타베이스 접근 방법(API)을 제공한다.
 
- 
J2EE - JNDI - Java Naming And Directory Interface
- Naming and Directory 서비스를위한 자바 API
- 네트워크상에 존재하는 도든 리소스들에 대해서 물지적인 위치를 몰라도 디렉토리와 이름 구조로 접근할 수 있다.
- DNS, NDS(노벨), LDAP 등의 Naming & Directory 서버에 대한 표준화된 접근 방식 제공
 
- 
J2EE - RMI - Remote Method Invocation
- 리모트 상에 존재하는 객체의 method를 호출하는 프로토콜
- 
stub, skeleton은 네트워크에 관련된 처리와 해당 프랫폼에 맞는 데이터 형식으로 변환하는 작업을 처리한다. - 로컬 method를 호출하는 것과 같은 느낌
- 다른 네트워크 프로토콜과도 인터페이스 할 수 있다.
- RMI-IIOP 프로토콜은 RMI 클라이언트가 코바 객체를 호출하거나 코바 클라이언트가 RMI객체를 호출할 수 잇다.
 
 
- 
J2EE - Servlet - 동적인 HTML을 생성한다 (CGI와 같은 개념을 가지는 자바기반의 표준)
- 클라이언트와는 HTTP 프로토콜을 기반을 두고 인터페이스한다.
- 클라이언트(브라우저)입장에서는 하나의 웹 페이지를 호출하는 것과 같아.
- 브라우저의 호출에 의해 데이타베이스나 레거시 시스템과의 연계를 할 수 있고 비즈니스 로직을 처리할 수 있다.
- 멀티 쓰레드로 동작, CGI보다 부하가 적으며 세션 관리를 위한 자체 메커니즘을 제공
- Jeus는 동적일 파일을 처리 하고, WebToB는 정적인 파일을 처리한다.
 
- 
J2EE - JSP - 서블릿의 개발상의 단점 보완(HTML과 JAVA 코드를 분리, 웹 어플리케이션 개발시 컨탠츠 변경 및 관리가 쉽다)
- 텍스트 기반의 HTML문서에 자바코드를 삽입하는 형태를 가진다.(XML기반의 태그에 자바코드를 삽입. 컨텐츠 생성을 위한 로직 처리의 캡슐화)
- 하나의 JSP 파일은 하나의 서블릿으로 변경, 실시간에 바로 적용된다.
 
- 
J2EE - EJB - 비즈니스 로직에 대한 서버측 컴포넌트
- 비즈니스 로직에 대한 재사용성
- 다른 EJB 서버로도 쉽게 적용될 수 있다.
- 트랜잭션 처리, 보안, 동시 사용자 처리 등을 EJB서버가 처리함으로써 업무 로직에 집중할 수 있다.
- 배치 디스크립터를 통해 배치에 관련된 사항이나 환경에 관련된 사항을 소스와 분리시킴으로써 다른 환경에 쉽게 적용할 수 있다.
 
- 
Java 기반의 인터넷 플랫폼 - 
클라이언트 층 - 클라이언트는 웹 브라우저나 모바일 폰과 같은 무선 장비상의 다양한 Markup Language 브라우저를 통해 주로 UI(User Interface)를 담당하거나, Applet 또는 Java application 형태로 구현될 수도 있다.
 
- 
프리젠테이션 층 - 주로 JSP, Servlet 응용 프로그램으로 클라이언트의 요구를 받아 어플리케이션 층에 전달하고 수행결과를 받아 다양한 클라이언트 측 응용 프로그램의 요구에 맞게끔 결과를 전달하는 역할을 한다.
 
- 
어플리케이션 층 - 비즈니스 로직을 포함하고 있는 엔터프라이즈 자바 빈즈(EJB) 컴포넌트들의 집합으로 데이터베이스나 EPR 등이 포함된 기업 정보 시스템(EIS)에 직접 접근하고 그 결과만을 프리젠테이션 층에 전달한다.
 
 
- 
- 
J2EE의 장점 - OS 등 플랫폼에 영향을 받지 않는다
- 표준 API을 이용하여 개발을 함으로써 서버 플랫폼 변경 시에도 포팅이 쉽다.
- 복잡한 트랜잭션 처리, 비동기 처리, 동시사용자 처리 등에 대한 부담을 개발자로부터 덜어주고, 표준화된 분산 컴포넌트의 사용으로 확장성을 높인다.
 
Web server와 WAS의 이해
- Web Server의 정의 : Web Client(웹 브라우저)에게 컨텐츠를 제공하는 서버, 정적인 HTML이나 jpeg, gif 같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 전송함 => WebToB
- 
WAS(Web Application Server)의 정의 - Server 단에서 Application을 동작할 수 잇도록 지원함. => Jeus
- 기존 웹 서버와 달리 동적인 요구에 대응하기 위해 적합한 형태로 변화, Web Client(브라우저)에게는 결과값만 전송함.
- Container(컨테이너)라는 용어로 쓰이며, 초창기는 CGI, 그 후에서는 Servlet, JSP, ASP 등의 프로그램으로 사용됨
 
- 
웹서버와 WAS의 구성에 따른 분류 - WAS & WebServer : 모든 컨텐츠를 한고에 집중시켜, 웹서버와 WAS의 역할을 동시에 수행, 스위치를 통한 로드 밸런싱, 사용자가 적을 경우 효율적
- WAS X WebServer : 웹서버와 WAS의 기능적 분류를 통해 효과적인 분산을 유도, 정적인 데이터는 웹서버에서 처리, 동적인 데이터는 WAS가 처리
- WAS X WAS X WebServer : WAS단을 프리젠테이션 로직와 비즈니스 로직으로 구분하여 구성, 특정 logic의 부하에 따라 적절한 대응, 구성이 복잡해지는 단점
 
WAS 도입효과 및 기술표준
- 
WAS 도입효과 - 안정된 시스템 구성 : 안정적 서비스 보장, 자동적인 어플리케이션 복구기능 제공, 업무 로직이 중간 어플리케이션 서버에 존재, 쉽고 빠르게 구축할 수 있다.
- DB 성능 보장 : WAS서버가 DB서버와의 최적 사용을 조절화, DB connection pool을 총해 DB connection 관리 및 트랜잭션 처리
- 비용절감 : 서버 리소스의 원할한 사용
 
- 
WAS 기술 표준 - J2EE : Java 기반의 분산객체 아키텍쳐
 
- WAS는 J2EE 아키텍쳐를 구현한 플랫폼 솔루션
- 
WAS의 일반적인 기능 - Web 환경을 위한 n-tier Architecture 플랫폼
- Presentation(GUI)과 Business Logic의 분리 운영
- Thread 관리
- 부하조절(Load Balancing) 기능 지원
- 장애대책(Fail-Over) 기능 지원
- Transaction 처리 자동화
- Web Service 플랫폼으로써의 역할
 
Overview of JEUS 5
JEUS 개요
- JEUS 소개 : JEUS => Java Enterprise User Solution
- 
JEUS 특장점 - 대규모 부하처리 Web서버 지원
- 성능 및 안정성 보장 가력한 아키택처
- 분산환경에서 트랜잭션 보장
- 강력한 관리 기능
 
- 
JEUS Servlet Engine - 
Load Balancing & Fail-Over - 서버의 부하 상태를 체크하여 Dynamic Balancing
- 동일 Node 내 Engine Fail 시 자제 복구(Auto Restarting)
- Multi-Node 환경 하에서, 한 Node Fail 시 Backup 노드에서 복구
 
- 
다양한 세션 클러스터링 - 별도의 세션 서버를 이용한 방식과 Web Container 간에 직접 소통하여 복제하는 방식 모두 사용
 
 
- 
- 
JEUS 성능 - 
부하 조절 - 
각 서버(Node)로의 동적 부하분산 - 서버들의 로드를 실시간으로 수집
- 클라이언트로부터의 요청을 처리 가능한 서버로 분배
 
- 
각 서비스별 처리능력의 동적 조절 - 클라이언트 요청의 증가에 따르느 서비스 루틴의 자동적 증가
- Min, Max 로 조절
 
- 
2단계 부하분산 구성 - WebToB(Tmax Soft의 웹서버) ~ Servlet ~ EJB 에서 2단계 부하분산 가능
 
 
- 
- 
Comm Layer - 
대용량 처리에 적합하도록 성능항상기법 강화 - Non-Blocking IO(NIO) / Named Pipe / Call-by-Reference
- 분산신 세션 클러스터링
 
 
- 
 
- 
- 
JEUS 가용성 및 확장성 - 고 가용성(HA)과 사용자 증가 및 업무량 확장에 따른 확장성 보장
- Active-Active 클러스터링을 통해 제공
 
- 
JEUS Special Features - WebToB는 JEUS 웹 어플리케이션 서버의 기본 웹서버, WebToB와 JEUS가 같은 머신에 잇을 경우 서로 Pipe 통신이 가능
- 웹투비의 경우 반드시 웹투비가 먼저 기동이 되어 있어야 한다. 연결을 처음 설정하는 과정에서 웹투비가 기다리는 역할을 하기 때문(아웃 바운드 형식)
 
- JEUS 관리 툴 : 웹 기반 환면으로 제공
- 
JEUS 개발 환경 - Local JEUS 와의 연동 뿐 아니라 Remote JEUS를 사용하는 개발환경 지원]
- JEUS 서버의 1회 boot 만으로 웹 모듈 및 EJB 모듈 등이 개발 가능하므로 편의성 증가
 
JEUS 설치
- 시스템 요구사항 : java 1.5.0_14 이후 버전 이 있어야 한다.
- JEUS 버전 확인 : jeusadmin -version, jeusadmin -fullversion
- JEUS 라이센스 확인 : jeusadmin -licensedue(기간), jeusadmin -licenseinfo(정보)
- 
JEUS 설치 시 환경변수 설정 - $JEUS_HOME/bin/jeus.properties.cmd 파일에 설정.. => 정의 되어 있음.
- 서버 기동 : jeus 또는 jeus -Uadministrator -P<passwd>
- 웹 관리자 로그인 : http://<server ip>:<baseport+8>/webadmin 을 실행하면 접속 가능하다.
 
JEUS Architecture와 기능
- 
JEUS 구성 Component - 클라이언트 : JEUS 시스템에 접근하는 객체, Web Container의 서비스를 요청
- 웹 서버 : 클라이언트의 HTTP 요청을 받아 필요한 경우에 JEUS의 Web Container에 전달
- JEUS 관리자 & 노드 : Web Container가 동작하는 환경을 제공
- Web Container(Servlet engine) : 웹 서버나 HTTP 클라이언트로부터 서비스 요청을 받고 웹 어플리케이션을 실행시켜 궁극적으로 HTML 응답 페이지를 통해 응답
- Session Server : 분산된 환경에서 클라이언트의 Session을 관리하고, 이 Session 데이터가 모든 Web Container에서 사용되로록 해준다.
- JNDI Naming Server : Servlet과 JSP와 같은 웹 어플리케이션이 시스템 내부의 객체나 리소스를 접근할 수 있도록 해준다.
- EJB & JMS engine : 웹 어플리케이션에 EJB와 JMS 서비스를 제공, JNDI naming Server를 통해 접근
- Security Server : 웹 어플리케이션들에게 보안 정책을 적용
- TX(트랜잭션) 관리자 : 트랜잭션 관리
- 데이터베이스 : 많은 양의 데이터를 저장하는, 가장 일반적인 방법. 데이터베이스 database connection pool을 통하여 접근 가능
 
- 
JEUS Manager - 하나의 JEUS 안에서 최상위 관리 계층
- 
주요 Component - Node
- JNDI Naming Server
- Security Server
- External Resource(Database connection, J2EE Connectors)
 
- JEUS Manager는 백업과 장애대책은 위해서 자신의 노드 또는 클러스터링에 포함된 다른 JEUS Manager와 항상 통신할 수 있도록 대기
- JEUS 컨트롤은 JEUS Manager를 통해서 이루어지며 jeusadmin Tool이나 웹관리자를 이용해서 할 수 있다.
 
- 
JEUS Node - Actual JEUS Server
- JEUS Manager에 의해서 관리, Clustering 된다
 
- 
JEUS Engine Container - 하나의 Engine Container는 하나 이상의 JEUS Engine들과 네이밍, 보안, 트랜잭션 관련 서비스들을 서로 묶는데 사용되는 논리적인 구성요소
- 물리적으로 JEUS Node/Manager가 실행되는 JVM과는 별도의 JVM에 존재(단, "Default" Engine Container일 경우 같은 JVM에서 기동된다.
 
- 
JEUS Engine - Engine Container 내부에서 동작하며, Continer에서 제공하는 트랜잭션, 네이밍, 보안서비스 등을 이용
- J2EE Application이 수행되는 Component
- 스팩상 Container의 개념
- 
4개의 Type - Servlet (web) Engine
- EJB Engine
- JMS Engine
- WS(WebServer) Engine
 
 
- 
JEUS 디렉토리 구성 - bin : 실행파일, 스크립트
- config : JEUS 환경파일
- docs : 문서
- lib : JEUS BOOT 시 필요한 Library
- license : Jeus License
- logs : Jeus 시스템 로그
- sample : 예제
- webhome : J2EE Application 의 홈 디렉토리
- webserver : Jeus 내장 Webserver
- workspace : Jeus가 동작하면서 사용하는 임시 디렉토리
 
JEUS 환경 파일 & 관리자 Tool
- JEUSMain.xml : JEUS Manager와 노드를 관리하는 기본설정 파일 => <node> - <engine-container> - <engine> servlet, ejb, jms, ws </> </> </> 로 등재
- WEBMain.xml : Servlet/JSP Engine 설정 => <web-container> - <context-group> - <context> - <seesion-config> - <encoding> - <webserver-connection> http-listenser, webtob-listener </> </>
- jeus-web-dd.xml : JEUS Web Application Deployment Descriptor
- EJBMain.xml : EJB Engine configuration
- jeus-ejb-dd.xml : JEUS EJB module Deploymen Descriptor
- JNLPMain : JNLP 설정
- jeus-client-dd.xml : Application Client Deployment Descriptor
- jeus-connector-dd.xml : Resource Adaptor Deployment Descriptor
- JMSMain.xml : JMS Engine 설정
- policies.xml : JEUS Security policy 설정
- subjects.xml : JEUS Security subject 설정
- vhost.xml : JEUS virual host 설정
- jeus-webservices-client-dd.xml : Webservice client 설정
- jeus-webservices-config.xml : Webservice client 설정
- 
표준 J2EE EJB 모듈 JAR 파일 - 
EJB Module JAR - META-INF : J2EE EJB DD, JEUS EJB DD
- Package name : EJB HOME, EJB Remote, EJB Implementation, Helper Class
 
 
- 
JEUS Management Tool
- Web Manager : 구성 요소와 어플리케이션 모듈들의 배치 및 관리 기능
- JEUS Builder : 어플리케이션 모듈 작성 및 패키징 기능
- 
jeusadmin - JEUS(JEUS Manager, Engine, Engine Container) 기동/종료 등의 기본적인 관리작업
- Application의 deploy/Undeploy와 Logger level 변경작업, JMV Mbean의 List 등
- 사용법 : jeusadmin <nodename> -U<user> -P<password>
 
- 
Webadmin - Container에서 실행되는 application에 대한 조작이나 Container의 설정을 바꾸기 위해서
- 사용법 : webadmin <container_name> -U<user> -P<password>
- 
기능 - 컨테이너의 상태를 알려 주는 명령(st, ti, info)
- 컨테이너의 설정 정보에 관한 명령(cfg, set)
- 컨테이너의 동작을 조절하는 명령(suspend, resume, reload, restart, terminate)
 
 
- 
dbpooladmin - JEUS 안에 구성된 DB Connection Pool을 제어하는데 사용
- 사용법 : dbpooladmin <container_name> -U<user> -P<password>
 
- 
jspc/jspc2 - JSP 배치 컴파일러는 "처음접속" 시 성능향상을 위해 JSP 파일을 사전에 컴파일
- 사용법 : jspc -e <engine_name>
- 사용법 : jspc2 -mode {normal | war | map}
 
JEUS Web Context
- 
Context - Java Servlet Specificaton에서 정의
- 
WAR(Web Application Archiev) - WAR 표준을 지원하는 WAS(Web Application Server)로의 배치(deploy) 및 실행 가능한 .war 파일 단위
- 하나의 Web application은 server에서 돌아가는 다른 web application과 분리된 환경인 servlert context 안에서 운영
 
- WEBMain.xml 에서 정의
 
- 
ContextGroup - 여러 Context들의 집합으로 Context 보다 큰 단위
- J2EE 표준이 아닌 JEUS에서만 존재하는 단위
- 각각의 ContextGroup은 다른 ContextGroup과 공유하지 않는 전용의 웹 서버를 설정하여 가지고 있다. 각 웹 서버 설정에는 client request를 받아 처리하는 worker thread pool 설정을 가지고 있다.
 
Overview of WebtoB
WebtoB Installation
- 
설치 전 시스템 Check tkgkd - WebtoB 기설치 유무
- 사용 할 Port (디폴트는 8080으로 되어 있음. 80은 Root 계정 사용)
- JDK 설치
- 사용할 Shared Memory
 
- 
WebtoB Directory 구성 - ap : application 파일
- bin : 실행 파일
- cgi-bin : CGI 파일
- config : WebtoB config file
- docs : 기본 Install html 파일
- icons : DIRINDEX에서 사용할 icon
- jeus : Standard Edition 이상
- lib : library file
- license : license file
- log : log flie
- path : IPC을 위한 Named-pipe
- ssl : ssl 파일
- svct : WBAPI 서비스 테이블
- usrinc : API header file
 
- License 발급 : ncpu로 hostname 확인
- 환경파일의 Compile : wscfl -i 파일명.m => wsconfig 파일 생성
- WebtoB 기동 : wsboot
- WebtoB 종료 : wsdown
WebtoB 동작 원리와 기능
- 
기존 Web Server의 문제점 - 
Apache의 동작 원리 - httpd의 구조 => 사용자의 증가에 유연하게 대처하지 못함
- 부하조절(Load Balancing)과 장애대책(Fail Over) 기능이 없다. => L4 장비가 반드시 필요
 
 
- 
- 
WebtoB 동작 원리 - Thread 구조 배재, Process 구조 채택 => Tmax와 유사
- 
WebtoB와 Tmax의 비교 - WSM = TMM (시스템 메니져)
- HTL = CLL (시스템 리스너)
- HTH = CLH (시스템 핸들러)
 
 
- 
WebtoB 기능 - 효율적 프로세스 관리로 획기적 성능 향상
- 
Load Balancing - 최적의 시스템 성능과 자원의 활용성 보장
- 시스템의 최대 처리량(Throughput) 유지
- 부하 분산 처리 가능
- 다향한 부하조절 기능 제공 : H/W성능에 따른, 동적 부하 조절, 등
 
- Fault Tolerance
- Data Compression
- Web Caching으로 캐싱 서버 기능 지원
- Log 관리
- Web API
- TP-Moitor Tmax Service 호출
- Security
 
WebtoB 환경 파일
- 환경파일 : WebtoB는 실제 구동 시에 환경파일에 기입된 정보를 바탕으롬 든 기능을 수행
- 
NODE 절 - 개별적인 HOST Machine에 대한 기능 정의
- 
구성 - WEBTOBDIR : WebtoB의 홈 디렉토리 경로 // 필수
- SHMKEY : Shared Memory Segment, WebtoB를 이루는 process들 간의 정보를 공유 // 필수
- DOCROOT : WebtoB가 처리하는 서비스에 대한 root 디렉토리 // 필수
- PORT : Web 서비스를 하기 위한 포트 // 필수
- HTH : Cleint brower와 WebtoB Process들간의 중계 역할(핸들러)
- JSVPORT : WebtoB와 JEUS간의 연결 Port
- IndexName : Client가 특정 파일 이름을 지정하지 않고 Service Directory에 요구를 보낼 때 기본적으로 서비스되는 파일, default는 index.html
- ServiceOrder : HTTP 요청으로부터 해당 Server와 Service를 결정할 때, URI절과 EXT절의 우선순위를 결정한다.
 
 
- 
SVRGROUP 절 - Service Process의 논리적 연관성에 따라 그룹으로 관리
- Service Tpye= HTML, CGI, JSV, WEBSTD, TPSTD, SSI
 
- 
SERVER 절 - Service를 제공하는 Process
 
- 
VHOST절 - 실제로는 하나의 WebtoB가 동작하지만 각지 다른 URL로 다른 문서를 제공하도록 함으로서 마치 여러 개의 Server가 Service를 제공하는 것처럼 보이도록 함
- 
설정 예 - *VHOST
- vhost1 DOCROOT= "WebtoB가 처리하는 서비스에 대한 Root 디렉토리", NODENAME= "실제 속한 node명", HOSTNAME="가상으로 사용하는 host명", PORT= "사용할 포트", LOGGING="로그정보", ERRORLOG="오류정보"
 
 
- 
URI 절 & EXT 절 - URI : Client의 URI 값에 따라 이를 처리하는 Service를 구분
- EXT : Client가 요구한 파일의 확장자 명에 따라 처리 담당 Process를 지정
- 우선순위 변경 : NODE절의 ServiceOrder= "ext,uri 또는 uri,ext"로 설정
 
- 
LOGGING 절 - Client의 요구내역을 저장
- Acess Log와 Error Log가 따로 저장되며 저장 형식 지정
 
WebtoB Management Tool
- 
관리 프로그램 - WebtoB의 관리 프로그램 : wsadmin
- wsadmin은 인터프리터 형태의 관리 시스템 (Tmax랑 유사)
- 명령어 또한 Tmax의 tmadmin에서 사용하는 명렁어와 유사
 
WebtoB & JEUS 연동
- 
WebtoB와 JEUS의 연결 구성도 - 
WebtoB와 JEUS의 연결방식 - WebtoB와 JEUS를 연결할 때는 WebtoB 리스너를 사용
- WebtoB 리스너는 WebtoB Server의 위치를 찾아서, 접속하고자 하는 특징을 가진다. => WebtoB 리스너를 사용할 때에는 WebtoB Server가 리스닝 모드로 대기, WebtoB 리스너(즉, Web Container)가 연결을 시도
- 위와 같은 연결방식을 Reverse Connection Pooling
- 방화벽 밖에 WebtoB Server를 위차 안쪽에서 리스너를 이용하여 연결을 맺을 수 있다.
- WebtoB와 Web Container가 같은 머신 내에 존재하면 둘 간의 통신은 Pipe 통신을 사용 => 월등한 성능 향상 기대
 
 
- 
- 
WebtoB와 JEUS의 연결 설정 - WebtoB와 JEUS Web Container와의 연결은 persistent connection
- JEUS의 WEBMain.xml 과 WebtoB의 환경설정 파일 간의 연결이다.
- 그래서 WebtoB와 JEUS가 연결이 형성되면 그 연결은 지속적으로 유지되며, 연결이 끊긴 경우 JEUS는 reconnect를 시도
 
- 
JEUS의 웹 서버 리스너 - 웹서버 리스너는 외부의 웹서버들과 연결되고 이들과는 맞춤 프로토콜을 사용
- 클라이언트는 이 웹서버를 통하여 WebContainer와 통신
- 클라이언트 리스너는 주로 클라이언트와 직접 연결되고 HTTP 프로토콜을 사용
 
- 
연동하기 - 
WebtoB 환경파일 설정 - NODE절에 JSVPORT 항목 추가 (JEUS와 연결하는 포트)
- SVRGROUP절에 SVRTYPE이 JSV인 서버 그룹 추가(해당 그룹에 대한 처리는 JEUS에서 한다고 정의)
- SERVER절에 ContextGroup 이름으로 서비스 추가
 
- 
JEUS 서버의 리스너 설정 - webtob-listener 태그 추가
- port는 WebtoB에서 설정한 JSVPORT와 같은 PORT 지정
- webtob-address을 연동하려는 WebtoB의 IP 지정
- registration-id값은 WebtoB의 SERVER절에 등록한 이름을 설정
- hth-count은 WebtoB에서 설정한 hth 갯수와 일치
 
 
- 
JEUS Web Application Programming
JEUS Web Container
- 
JEUS 구성 요소와 아키텍쳐 - 클라이언트 : JEUS 시스템에 접근하는 객체, Web Container의 서비스를 요청
- 웹 서버 : 클라이언트의 HTTP 요청을 받아 필요한 경우에 JEUS의 Web Container에 전달
- JEUS 관리자 & 노드 : Web Container가 동작하는 환경을 제공
- Web Container(Servlet engine) : 웹 서버나 HTTP 클라이언트로부터 서비스 요청을 받고 웹 어플리케이션을 실행시켜 궁극적으로 HTML 응답 페이지를 통해 응답
- Session Server : 분산된 환경에서 클라이언트의 Session을 관리하고, 이 Session 데이터가 모든 Web Container에서 사용되로록 해준다.
- JNDI Naming Server : Servlet과 JSP와 같은 웹 어플리케이션이 시스템 내부의 객체나 리소스를 접근할 수 있도록 해준다.
- EJB & JMS engine : 웹 어플리케이션에 EJB와 JMS 서비스를 제공, JNDI naming Server를 통해 접근
- Security Server : 웹 어플리케이션들에게 보안 정책을 적용
- TX(트랜잭션) 관리자 : 트랜잭션 관리
- 데이터베이스 : 많은 양의 데이터를 저장하는, 가장 일반적인 방법. 데이터베이스 database connection pool을 통하여 접근 가능
 
- 
JEUS Web Container 구조 - WebServer를 통해서 JEUS Web 컨테이너의 Context Group에 연결 사용.
- 
주요 하위 컴포넌트들과 기능들 - 자동 모니터링 : Web Container 자체 감시의 가장 중요한 부분은 자동 모니터링을 이용하는 것. Container내의 모든 자원과 풀들의 상태를 감시하고 문제가 발생하였을 때 대응할 수 있는 기능
- Context Group : 각 Web Container는 하나 이상의 context group을 포함할 수 있다. Context Group은 개별적인 작은 Web Container이다. Context Group은 여러 개의 리스너, 가상호스트, Context를 관리한다. Context Group은 Web Server 연결과 클러스터 환경에서의 Session Handling 그리고active managerment 이다.
- Session 설정 : Web Container는 세션 관리에 대한 여러 가지 설정을 한다. Web Container 레벨에서 세션 설정이 되어 있다면, 하위 Context Group 또는 jeus-web-dd에 세션 설정을 하지 않았을 경우 공통적으로 Web Containter의 세션 설정 부분이 적용이 된다.
 
- 
JEUS Web Container - Web Page의 수행을 위한 환경과 기반, 서비스 제공
- Child Elements : 자동 모니터링, stdout 와 stderr redirection, Context Group, Session Cluster, 보안 스위치, Shutdown timeout
- Web 모듈 Tool : 웹 관리자, webadmin, JSP batch compiler(jspc), jeusadmin
 
 
Servlet/JSP Programming
- 
Servlet이란? - Request/Response 방식의 서비스를 실행하기 위한 Java Module, HTTP Server의 기능을 확장할 수 있는 Java 부품, Server-side Java Package module
 
- 
Servlet를 사용하는 이유 - CGI에 비해서 가볍고 더 빠르다, Protocol & Web Server neutral, 모든 Java API를 그대로 사용할 수 있다, 수많은 3rd Party tool과 Web Server의 지원
 
- 
Servlet의 쓰임새 - 서버에서 처리된 데이터를 받아 처리하거나 Form Data를 처리하는 작업, Java로 개발된 객체를 사용해야 할 경우, 많은 양의 정보를 처리해야 할 경우, 여러 사용자가 동시에 상호 작용하는 서비스를 제공하는 경우
 
JEUS WAR Module
- 
WAR 파일과 그 구조 - J2EE Web Application은 J2EE Web Container에 배포되고 등록되기 전에 특수한 아카이브 파일로 패키징 해야 함.
- .war 확장자를 가짐
 
Overview of JDBC Specification
- 
JDBC - java 환경에서 Database를 연결할 수 있는 기능
- SQL문들을 JDBC 인터페이스들에 있는 method의 인수로서 사용할 수 있게 해주는 SQL level의 Java API
 
- 
사용이유 - 재사용성, 독립성, 관계형 데이터의 쉬운 객체화, 분산 컴퓨팅 환경(확장성)
 
DataSource Specification
- 
DataSource Specification - DataSource 물리적인 데이터 자원에 접속하기 위한 요소
- DriverManager의 대한으로 DataSource 객체가 사용된다
- DataSource interface를 구현한 이 객체는 Java Naming and Directory(JNDI) API를 기반으로 하는 naming service에 등록이 되어야 한다.
 
- 
DataSource Advantage - DriverManager 처럼 Application단에서 driver정보를 Hard Coding하지 않아도 된다.
- DataSource 기능은 개발자들엑 DataSource class를 구현하여 connection pooling과 distributed transaction과 같은 기능들을 이용할 수 있게 해준다.
- J2EE의 표준이므로 모든 WAS에서 동일한 코드를 사용
- 다른 JVM에서도 호출하여 사용할 수 있다.
 
- 
DataSource 4 type - DataSource : 사용자들을 위해 Connection을 반환
- ConnectionPoolDataSource : Connecton Pool로부터 사용자들을 위해 Connection을 반환한다.
- XADataSource : XA연결 pool로부터 사용자들을 위해 분산/전역 Transaction 역할을 하는 connection을 반환한다.
- LocalXADataSource : XA연결 Pool로부터 사용자들을 위해 지역 Transaction 역할을 하는 connection을 반환한다.
 
DataSource 연동
- 
JEUS Server에서 DB Connection Pool - DataSource, ConnectionPoolDataSource, XADataSource, LocalXADataSource
- 반드시 $JEUS_HOME\lib\datasource 아래에 사용하려는 JDBC direver를 놓아야 한다.
 
- 
DB 연동 테스트 - 
DataSource 생성 및 호출 - JEUS 웹 관리자를 이용하여 생성
- Applicaton 생성이 DataSource 호출 : JNDI에서 검색 가져와서 사용한다.
 
 
- 
Cooki & Session
- 
Cooki란? - HTTP 프로토콜을 이용하면서 상태에 대한 보존을 위해서 사용
- 서버에 클라이언트의 정보를 담아두지 않고 클라이언트 자신들에게 그 정보를 저장
- 서버와 클라이언트 간 이름/값의 쌍으로 쿠기 교환
 
- 
Cookies - Client에 저당되는 간단한 정보
- 
Server는 Cookie를 저장하는 요청을 보낸다 - Brower는 Cookie를 받아들일 수 있고, 거절할 수 있다,
- Cookie의 사용여부는 Client에서 설정
 
- javax.servlet.http.Cookie
 
- 
How to Use Cookie - 
Cookie의 전송 - Cookie 객체 전송, Attribute를 Setting, Cookie 전송
 
- 
Cookie로부터 정보를 얻어내는 방법 - 사용자의 Request에서 모든 Cookie의 정보 검색, 서버와 관련된 Cookie의 이름만을 검색, 검색된 Cookie의 이름에 대한 값을 얻어온다.
 
 
- 
- 
To Send a Cookie - 
Cookie 생성 - Cookie ck= new Cookie("data", new java.util.Data().toString()) ;
 
- 
유효기간 설정(단위 : second) - ck.setMaxAge(500) ;
 
- 
Cookie 설정 - res.addCookie(ck) ;
 
 
- 
- 
To Get information from a Cookie - 
Get Cookies - Cookie all[]= req.getCookie() ;
 
 
- 
- 
Session 이란? - HTTP 프로토콜을 이용하면서 상태에 대한 보존을 위해서 사용
- 사용자의 브라우저와 서버 간의 논리적인 연결
- 서버에서는 요청에 실려져 온 브라우저에 대한 정보를 알 수 있음
- 서버가 자신에게 접속한 클라이언트의 정보를 갖고 있는 상태
- 
** - HttpSession session= request.getSession() ; => 세션이 없으면 새로 색션을 생성
- HttpSession session= request.getSession(false) ; => 세션이 없으면 null를 반환
 
- 
브라우저에서 쿠키 사용을 막아 놓았을 경우 세션을 사용하지 못한다. - URL Rewrite 방법이 있지만, URL에 정보가 노출되므로 보안상 문제 발생
 
 
- 
Sessions - Browser에 의해 만들어진 HTTP Transaction들과 연관된 데이터들의 집합으로 서버에 상태정보가 저장됨
- javax.servlet.http.HttpSession
 
- 
How to Use Session - 
Create a Session - HttpSession session= req.getSession() ; /or/ req.getSession(false) ;
 
- 
Obtain the Session and Check if it exists - HttpSession session= req.getSession() ; if(!session.isNew()) {} /or/ req.getSession(false) ; if(session != null) {}
 
 
- 
- 
Additional Guidelines - Session의 정보는 사요중인 브라우저의 모든 서블릿에 적용
- Session의 무효화 : session.invalidate() ; , 보통 Logout 버튼과 연결시켜 사용
- Session은 browser의 비활성화로 무효화 할 수 있다.
 
- 
Session의 삭제 - 장시간 비활성(inactive)상태인 경우 컨테이너는 세션을 삭제 => 세션 타임 아웃 설정
- 
세션 타임 아웃 설정 - DD에 세션 타임아웃 설정 => web.xml에 정의
- WEBMain.xml 파일에 세션 타임 아웃 설정 => <time-out> 값이 -1 이면 세션은 계속 유지 된다.
- 특정 세션만 타임아웃 설정 => Servlet/JSP 파일에서
 
 
- 
Cookie와 Session 비교 - Cookie : Cookie class, 문자열 형태만 저장 가능, 클라이언트에 저장
- Session : HttpSession inferface, 자바에서 사용되는 모든 객체 저장 가능, Seesion ID만 클라이언트에 저장, 실제적인 값을 서버에 저장,
 
Session Clustering
- 
Session Tracking - 현재 작업하는 WebServer가 비정상 종료 되었을때, 다른 동일 작업 WebServer에서도 해당 작업(Session)을 유지하기 위해서
 
- 
Tracking 종류 - 
세션 라우팅 - WebtoB X JEUS 연결 상태에서 사용
- 장점 : 알고리즘 간단, 시스템 리스소를 적게 소비,
- 단점 : 웹 컨테이너 장애 발생시 세션 객체를 복구 할 수 없다
 
- 
중앙 집중식 세션서버 - WebtoB X JEUS - Session Server 연결 상태에서 사용
- 장점 : Web 서버는 현재 요청된 클라이언트 요청을 어떤 Web Container로 보내야 할 지 생각하지 않아도 된다.
- 단점 : 세션 객체 및 세션 객체 내부의 멤버 인스턴스들이 serializable 해야 한다.
 
- 
혼합방식 - 세션 라우팅 + 중앙 집중식
- 두 가지 방식의 장점을 모두 살림. 안정한 백업도 보장
 
- 
분산 세션 방식 - 각 Web Container마다 세션 서버를 두는 방식
- 대규모 환경에서 유용
 
 
- 
- 
세션의 설정 - 어플리케이션 단위 : J2EE specification에서 정의, web.xml에서 설정
- ContextGroup단위 : JEUS 웹 컨데이너에서 사용, WEBMain.xml에서 설정
- 분산 세션 : JEUSMain.xml, WEBMain.xml에서 설정
 
- 
세션 타임 아웃 설정 
- 
JEUS에서 세션 타임아웃 과 관련된 설정 
- web.xml : <web-app><session-config><session-timeout>
- WEBMain.xml : <web-container><context-group><session-config><timeout>
- JEUSMain.xml : <jeus-system><node><session-server><session-manager><remove-to>
출처 : http://blog.naver.com/PostView.nhn?blogId=seong_han&logNo=110033488465
 
		 
	


















