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
맺으며 드리고 싶은 말은…
얽매이지 마라
그러나, 그러기 위해선 원리를 알아야 한다.