Programming/WAS

[WAS] 분산 시스템의 소개 (Jeus, WebtoB)

성일만 2014. 5. 26. 10:15

분산 시스템의 소개


시스템 환경 변화

  • 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라는 소프트웨어 버스를 이용하여 원격지 서버의 메소드를 호출하는 기능 제공



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 사항

    • 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



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에서 검색 가져와서 사용한다.


Cookie & Session

  • Cookie란?

    • 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>