EJB기반시스템아키텍팅

Download Report

Transcript EJB기반시스템아키텍팅

EJB 기반 시스템 도입과 아키텍팅을 위한 실용적 가이드와 원리
차의중
㈜ 스펜오컴
[email protected]
2
목차
 EJB의 도입 여부 결정
 외부 아키텍팅
 내부 아키텍팅
3
 EJB의 도입 여부 결정
 외부 아키텍팅
 내부 아키텍팅
4
EJB의 도입을 고려중인 사람들의 일반적인 생각
1. 안정성
 대량, 또는 복잡한 트랜잭션 처리시 무결성을 보장해준다더라.
 자원관리 기능에 의해 사용자 급증시 응답속도의 현저한 저하 및
서버의 다운을 방지해준다더라.
2. 개발,유지,보수의 편의성
 개발을 도와줄 최신의 기술과 도구들을 제공해준다더라.
 선언적 프로그래밍, 최적화된 프레임웍, 다양한 라이브러리 제공
∴개발자는 단지 비즈니스 로직에만 신경쓰면 된다더라.
 컴포넌트 기반이기 때문에 재사용성이 높다더라.
그래서, 우리 시스템에는 EJB를 쓸 수 밖에 없다.
5
좋다. 그러…나!
1. 안정성
 대량, 또는 복잡한 트랜잭션 처리시 무결성을 보장해준다더라.
 자원관리 기능에 의해 사용자 급증시 응답속도의 현저한 저하 및
서버의 다운을 방지해준다더라.
!
2. 개발,유지,보수의 편의성
가장 중요한 전
 개발을 도와줄 최신의 기술과 도구들을 제공해준다더라.
제조건이 빠져있
 선언적 프로그래밍, 최적화된 프레임웍, 다양한 라이브러리 제공
지는
않은가?
∴개발자는 단지 비즈니스
로직에만
신경쓰면 된다더라.
 컴포넌트 기반이기 때문에 재사용성이 높다더라.
6
전제조건?
 EJB의 목적

분산 객체 기반 시스템 의 설계,개발,배포,유지,보수,재사용을 쉽게하기
위한 것
 EJB를 이용하면 …
 짧은 시간, 적은 노력으로도 안정적인
가능하다.
분산 객체 기반 시스템의 개발이
∴전제조건 = 분산 객체
즉, 분산 객체 기반 시스템이 필요한가를 먼저 고려
YES
NO
EJB 추천
EJB 비추천
7
분산 객체 기반 시스템이란?
객체가 클라이언트와 프로세스를 달리하여 존재하는 시스템
객체 서버와 클라이언트는 네트웍으로 연결
객체서버
Network
클라이언트
객체
객체
객체
클라이언트
Network
Network
객체서버
객체
객체
객체
8
참고 : 분산 객체 기반 시스템의 잇점
비즈니스 로직의 재활용성이 높다
다양한 아키텍쳐로의 확장이 쉽다
클라이언트간 공유자원 관리를 효과적으로 할 수있다
개발자간 역할분리가 분명하다
보안성이 높다
등등…
만일, 분산 객체 환경이 필요없다면?
1. 안정성

대량, 또는 복잡한 트랜잭션 처리시 무결성을 보장해준다더라.
JDBC, JTA

자원관리 기능에 의해 사용자 급증시 응답속도의 현저한 저하 및 서버의 다운을 방지해준다더
라.
Web Application 의 경우 WAS가 해당 역할 수행
2. 개발,유지,보수의 편의성

개발을 도와줄 최신의 기술과 도구들을 제공해준다더라.
필요한 기술이나 도구들만 별도 구매

선언적 프로그래밍, 최적화된 프레임웍, 다양한 라이브러리 제공
∴개발자는 단지 비즈니스 로직에만 신경쓰면 된다더라.
적절한 프레임웍, 라이브러리만 별도 구매

컴포넌트 기반이기 때문에 재사용성이 높다더라.
요즘은 대부분 엔진이 나름대로 컴포넌트 기반임
9
10
 EJB의 도입 여부 결정
 외부 아키텍팅
 내부 아키텍팅
11
계층간 물리적 분리
UI
비즈니스로직
데이터
DB
WAS
Client App
EJB App
DataSource
독립 자바 클라이언트, 코바 클라이언트, Servlet/JSP …
12
계층간 연결
DB
RMI-IIOP
JDBC
SOAP
JMS
Client App
EJB App
DataSource
SOAP(Simple Object Access Protocol) : EJB 2.1 부터 지원 예정
13
아키텍쳐의 확장
DB
RMI-IIOP
SOAP
JMS
JDBC
RMI-IIOP
SOAP
JMS
RMI-IIOP (CORBA)
Custom Protocol
Some Others
Legacies
Other EJB
14
클러스터링
부하분산 + 장애극복
DB
RMI-IIOP
SOAP
JMS
JDBC
H/W or S/W (Vendor specific)
15
 EJB의 도입 여부 결정
 외부 아키텍팅
 내부 아키텍팅
16
여섯 가지 컴포넌트
엔터티 빈 (Entity Bean)
CMP (Container Managed Persistence) 엔터티 빈
BMP (Bean Managed Persistence) 엔터티 빈
세션 빈 (Session Bean)
상태유지 (Stateful) 세션 빈
무상태 (Stateless) 세션 빈
메시지 드리븐 빈 (Message Driven Bean)
타이머 빈 (Timer Bean) – E J B 2.1
17
EJB 가 추천하는 아키텍쳐는…
RMI-IIOP
JAX-RPC
세션빈
Local Reference
엔터티빈
JDBC/JTA/JTS
Local Reference
JMS
메시지빈
타이머 빈
DB
18
그러나 실제로 많이 쓰이는 바는…
세션빈
JDBC/JTA
RMI-IIOP
엔터티빈
JDBC/JTA/JTS
JMS
메시지빈
타이머 빈
DB
JDBC/JTA
19
왜, 권고안을 따르지 않는가?
1. 수행 성능 및 자원 소모량
세션빈
세션빈
JDBC/JTA
Local Reference
Local Reference
엔터티빈
DB
JDBC…
타이머빈
JDBC/JTA
Local Reference
메시지
빈
타이머빈
메시지빈
수행성능
자원소모
낮다
많다
높다
적다
DB
JDBC/JTA
20
그리고?
2. 개발 편의성
엔터티 빈
JTA-JDBC-SQL
간단한 질의문
높다
낮다
복잡한 질의문
낮다
높다
복잡한 SQL 질의문을 대체하기에는, CMP 빈은 아직 한계가 있다
BMP 빈을 쓴다면, 어차피 SQL문을 사용해야 한다
21
그러나, 트랜잭션 관리가 편리하지 않나?
JDBC 나 JTA를 이용한 트랜잭션 관리가 그렇게 복잡하
NO!!
거나, 불편한가?
Connection con = getConnection() ;
UserTransaction tx = getUserTransaction();
try
try
{
{
con.begin() ;
tx.begin() ;
……
……
con.commit() ;
tx.commit() ;
}catch(Exception e)
}catch(Exception e)
{
{
}
con.rollback() ;
tx.rollback() ;
……
……
}
2Phase Commit 이나, 이종 리소스 간의 트랜잭션 처리도 가능
22
그럼, 엔터티 빈이 왜 필요한가?
RDB
OODB
XML DB
Files
Others
엔터티 빈
데이터 소스의 형태에 상관없이 동일한 인터페이스로 이들을 이용하기
위해서
23
그렇다면?
데이터 소스가 RDB이며, 다른 형태로 변경될 우려가 없고.
질의문이 매우 복잡하다면.
권장
세션빈
JDBC/JTA
메시지
빈
DB
24
그러면 세션 빈의 코드가 너무 복잡해지지 않나?
세션빈
메시지빈
자바 클래
스
DB
JDBC/JTA
그러면, 엔터티 빈 이용시와 다를 바가 없지않나?
일반 자바 클래스
엔터티 빈
접근 속도
매우 높다
매우 낮다
자원 소모
매우 낮다
매우 높다
엔터티 빈만 이러한가? NO!! 모든 엔터프라이즈 빈이 이러하다.
25
왜 엔터프라이즈 빈은 그렇게 무겁고, 느린가?
빈 클래스, 홈/리모트/로컬 인터페이스 구현 클래
스들, Helper/Wrapper 클래스들
1개의 엔터프라이즈 빈 = 여러 자바 클래스들
한꺼번에 매우 많은 객체가 생성
한 번 메소드 호출에 매우 많은 코드 스텝 실행
컨테이너의 감시활동
26
따라서, 꼭 엔터프라이즈 빈이 필요한 게 아니라면….
일반 자바 클래스를 사용하라.
예를들어…)
세션 빈
세션 빈
DB
로컬 인터페이스
RMI-IIOP
권장
세션 빈
RMI-IIOP
자바 클래
스
DB
27
커다란 빈 한 개 .vs. 작은 빈 여러 개
로직을 어떤 규모로 분류할 지는 개발 편의성, 확장성 측면에서 고려되
어야 한다.
다만, 자원소모량의 측면에서…
커다른 빈 한 개 < 작은 빈 여러 개
그렇게 차이가 크지는 않다.
28
상태유지 세션 빈 .vs. 무상태 세션 빈
상태(대화상태) = 각 클라이언트에 종속적인 변수의 값
해당 클라이언트가 빈 사용을 끝낼 때까지 유지되어야 함
해당 클라이언트의 요청에 의해서만 변경 가능
상태유지 세션 빈
각 클라이언트의 상태유지가 필요할 때
무상태 세션 빈
각 클라이언트의 상태유지가 필요 없을 때
한 클라이언트의 상태가 다른 클라이언트에 의해 사용되도 상관없을 때
상태유지 세션 빈
무상태 세션 빈
접근 속도
낮다
높다
자원 소모
높다
낮다
상대적으로, 보다 권장됨 ( 상태유지 세션 빈 대체시, 대화 상태는 DB,
Hashtable , WAS 세션 등에 보관)
29
BMP 엔터티 빈 .vs. CMP 엔터티 빈
영속성(Persistence) = 영구기억장소에 데이터를 저장하는 행위
BMP
빈 클래스 내에 데이터 입/출력 관련 코드를 개발자가 삽입
BMP 코드 자동 생성기도 있음
CMP
영속성에 관련된 모든 행위를 컨테이너가 담당
개발자가 해 줘야 할 일 = EJB-QL을 지정하는 정도
CMP
BMP
수행 속도
낮다
높다
자원 소모
높다
낮다
개발 편의성
높다
낮다
항상 그렇지는 않다.(개발자의 수준에 따른 것)
30
클러스터링시 주의할 점
컴포넌트 수준에서의 클러스터링이 가능한지 확인
가능하다면, 어떤 컴포넌트들이 클러스터링 가능한 지 확인
부하분산, 장애극복이 모두 가능한 지 확인
둘 중의 하나 또는 둘 모두가 불가능한 컴포넌트들이 있을 수도 있다.
벤더에 종속적
31
맺으며 드리고 싶은 말은…
얽매이지 마라
그러나, 그러기 위해선 원리를 알아야 한다.