분산 시스템의 소개
시스템 환경 변화
- 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 : 사용자들을 위해 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에서 검색 가져와서 사용한다.
DataSource 4 type
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>
[출처] 분산 시스템의 소개(JEUS & WebtoB)|작성자 미르
'Programming > WAS' 카테고리의 다른 글
[WAS] Web Server와 WAS의 이해 (0) | 2014.09.18 |
---|---|
[WAS] Tomcat 에서 작업한 프로젝트를 JEUS로 바꾸기 (0) | 2014.09.17 |
[WAS] JEUS 설치 및 기본설정 (0) | 2014.09.16 |