3장.비즈니스티어

Report
비즈니스 티어에서
디자인 고려사항과 위험 사례
방수상
학습전략,목표
• 현실세계의 비즈니스를 통해 J2EE
환경의 비즈니스를 편하고 친근감
있게 접근해 보자.
• 앞으로 배워나갈 Business Tier가
어떤것들이 있는지 알아보자.
• 이것을 통해 얻을 수 있는것은 무엇
인지 토론해보자.
Business?
• 사무, 업무, 일, 집무, 영업
• 직업, 가업
우리 제품
좀 사주세요.
예방주사를 맞는경우
한번 골라봐~
너무 많이
샀다ㅡㅡ;
계산은…
J2EE
J ava
2 PlatForm
E nterprise
E dition
J2EE Architecture
http://snippetstore.sourceforge.net/en-US/SnippetStore1.htm
J2EE Architecture
비즈니스 티어에서 디자인 고려사항
•EJB.
•세션 빈
•엔티티 빈
세션 빈 사용하기
Transfer Object
Session Facade
DATABASE
세션 빈사용하기
SessionBean
CLIENT
SessionBean
Business Object
Entity Bean
or
Session Bean
Application Service
SessionBean vs EntityBean
비즈니스관리
데이타베이스관리
비영속성
영속성
시간제한
장시간제공
하나의클라이언트
다중사용자
stateless, stateful
CMP, BMP
Transaction 인식
Stateless vs Stateful
상태비유지
상태유지
대화상태 비저장
대화상태유지
세션 빈 공유
세션 빈 공유불가능
비대화식 프로세스
대화식 프로세스
비즈니스 티어에 상태 저장
HttpSession에 상태저장하기
클라이언트
JSP/
서블릿
엔터프라이즈
빈
데이터베이스
비즈니스
티어
리소스
티어
상태
클라이언트
티어
프레젠테이션
티어
비즈니스 티어에 상태 저장
세션 빈에 상태저장하기
클라이언트
JSP/
서블릿
클라이언트
클라이언트
티어
엔터프라이즈
빈
데이터베이스
상태
프레젠테이션
티어
비즈니스
티어
리소스
티어
엔티티빈
• 분산(distributed)
• 공유(shared)
• 트랜잭션(transactional)
• 영구(persistent)
엔티티빈 기본키
• 고유한 기본키에 의해 식별
• findByPrimaryKey 직접구
현
엔티티빈에 비즈니스 로직 두기
• 엔티티빈에는 비즈니스 로직을
포함해서는 안된다고 오해하고
있다.
• 엔티티빈는 객체뷰제공뿐 아니
라 다중사용자를 위한 트랜잭션
처리역할도 수행할 수 있다.
엔티티빈을 이용한
출금(비즈니스로직)처리
엔티티빈 이용시 유의사항
• 비즈니스 로직 안에 엔티티빈 상호
관계에 관한 로직이 들어가는가?
• 엔티티빈이 사용자와 상호작용하
는 워크플로를 관리하는 역할을 맡
고 있는가?
• 해당 엔티티빈이 다른 비즈니스 컴
포넌트에 포함된 역할도 맡고 있는
가?
비즈니스 티어와
통합 티어에서
위험사례
1.객체 모델을 직접 엔티티빈 모델
로 매핑하는 사례
문제
클래스 와 엔티티빈을 일대일로 변환.
해법
큰 단위 엔티티빈 설계
리팩토링 : 엔티티빈 상호통신 줄이기
패턴 : Composite Entity 패턴
2.관계 모델을 직접 엔티티빈 모델
로 매핑하는 사례
문제
테이블의 각 행(row)을 엔티티빈 하나로 설
계하는 경우.
해법
EJB가 아닌 객체지향접근방식
리팩토링 : 엔티티빈 상호통신 줄이기, 비즈
니스 로직을 세션 빈으로 옮기기
패턴 : Composite Entity 패턴
3. 각 유스케이스마다 세션 빈 하나
를 매핑하는 사례
문제
한 가지 유형의 상호작용에 반응하기 위해 작은단위 컨
트로러들을 많이 만들경우 많은 세션 빈이 필요하며 애
플리케이션이 매우 복잡해진다..
해법
관련이 있는 상호작용들을 묶어 하나의 빈에 통합
리팩토링 : 세션 빈 병합하기
패턴 : Session Facade 패턴
4.모든 엔터프라이즈 빈 속성을 getter/setter
메소드를 사용해서 노출하는 사례
문제
객체 속성 정보를 얻기 위하여 작은 단위 원
격호출이 빈번함.
해법
값 객체를 사용하여 전송
패턴 : Transfer Object 패턴
5.클라이언트에 서비스 검색(lookup)
코드를 둔는 사례
문제
클라이언트에 JNDI lookup 코드를 넣으면
서비스 lookup 코드 수정시 모든 클라이언
트 수정. 또한 lookup 코드에 종속됨.
해법
Servie Locator 패턴을 사용하여 캡슐화
패턴 : Service Locator, Business
Delegate 패턴
Business Delegate 사용
Client
Order order = lookup(“ejb/.../orderEJB);
order.getMyOrderList();
EJB
Session
Bean
OrderDelegate order = new OrderDelegate();
order.getMyOrderList();
Business Delegate
init(){
this.order = (OrderHome)ServiceLocator.getEjbLocalHome........;
}
getMyOrderList(){
order.getMyOrderList();
}
6.읽기 전용 객체로 엔티티빈을 사용
하는 사례
문제
데이터베이스처럼 영구 저장소에 불필요한 업데이트 트
랜잭션을 발생.
해법
Data Access Object 패턴을 사용하여 데이터 소스로 접
근하는 로직을 캡슐화
패턴 : Data Access Object, Session Façade, Value
List Handler, Transfer Object Accembler 패턴
엔티티빈사용하기
세션 빈사용하기
Transfer Object
Session Facade
DataBase
7.작은 단위 객체로 엔티티빈을 사
용하는 사례
문제
작은단위객체를 표현하기 위해 원격 엔티티빈을 사용하
는 경우, 전체네트워크통신과 컨테이너에 과부하를 일
으킨다.
해법
큰단위 엔티티빈과 세션 빈을 설계.
패턴 : Composite Entity, Session Façade 패턴
리팩토링 : 엔티티빈 상호 통신줄이기, 비즈니스 로직을
세션 빈으로 옮기기, 엔티티빈에 비즈니스 로직 두기, 세
션 빈 병합하기
8. 종속 객체를 포함한 엔티티 빈 전
체를 저장하는 사례
문제
하나의 엔티티 빈 안에 종속 객체들이 트리 구조를 이루
고 있는 경우, 엔티티 빈을 로드할 때 종속 객체를 포함
한 전체 트리를 로드하고 저장하기 때문에 성능이 저하
된다.
해법
영구 저장소에 저장한 이후에 변경 여부를 체크하고 변경
이 있는 경우에만 종속 객체를 저장.
패턴 : Composite Entity 패턴과 Store Optimization
전략, Lazy Loading 전략
9.EJB 관련 예외가 EJB가 아닌 클
라이언트에 노출되는 사례
문제
애플리케이션개발자도 비즈니스 티어 컴포넌트가 던지
는 예외의 세부 구현이 어떻게 이루어져 있는지 알아야
한다.
해법
비즈니스 대리자가 모든 서비스 관련 예외를 중간에서 가
로채어 애플리케이션 예외로 바꾸어 던짐.
패턴 : Business Deleagte 패턴
리팩토링 : Business Deleagte 도입
10.큰 결과 집합을 반환하기 위해 엔티
티 빈 파인더 메소드를 사용하는 사례
문제
대량의데이터를 검색해서 가져와야 할 경우 EJB 파인
더 메소드(원격참조컬렉션 리턴)를 사용하게 되면 클라
이언트는 원격 참조 메소드를 호출해야 한다.
해법
원격 호출 대신에 세션 빈과 DAO 를 사용해 Transfer
Object 객체를 얻어오는 쿼리를 구현.
패턴 : Value List handler, Data Access Object 패턴
11.클라이언트가 비즈니스 컴포넌트로
부터 데이터를 모으는 사례
문제
데이터 모델을 구현한 비즈니스 컴포넌트에서 필요한
데이터 모델을 가져오기 위해서 다양한 비즈니스 컴포
넌트로부터 데이터를 찾고 상호작용하고 추출해야 한다.
이때 비즈니스 티어를 수 차례 호출해야 하므로 네트워
크에 과부하를 일으킬 수 있다.
해법
모델을 생성하는 작업을 클라이언트에서 분리하고 비즈
니스 컴포넌트로 구현.
패턴 : Transfer Object Assembler 패턴
12.엔터프라이즈 빈에서 오랜 시간이 걸
리는 트랜잭션을 처리하는 사례
문제
엔터프라이즈 빈 메소드가 클라이언트 요청을 처리하는
데 상당히 많은 시간이 걸린다거나 처리가 진행되는 동
안 메소드가 블로킹되면, 이로 인해 빈이 사용하는 메모
리와 스레드와 같은 컨테이너 리소스 역시 블로킹되는
결과를 가져옴.
해법
시간이 오래 걸리는 트랜잭션을 구현하려면 JMS API를
제공하는 MOM 을 사용하여 비동기식 처리.
패턴 : Service Activator 패턴
13.상태비유지 세션 빈이 매 호출마다
대화 상태를 재구성하는 사례
문제
세션 빈이 대화상태를 유지해야 하는 경우에도 상태비
유지 세션 빈으로 설계할 경우 메소드를 호출할 때마다
대화상태를 재구성(DB Access)해야 한다.
해법
상태비유지 세션 빈을 선택하기 전에 어떤 형태로 상호작
용이 진행되는지 그 모델을 먼저 분석한다.
패턴 : Transfer Object Assembler 패턴
J2EE 환경에서
비즈니스 티어를 구현하기 위해
많은 사항들을 고려해야 하며,
적절한 패턴을 사용해야 한다.
J2EE 패턴과 병행 학습
• EJB 3.0
• Spring 2.5
• 그 밖에…
참고문헌 & 자료
• 코어 J2EE 패턴
• http://www.corej2eepatterns.co
m/
• http://snippetstore.sourceforge.
net/en-US/SnippetStore1.htm
• http://www.imageclick.com
• 장회수

similar documents