51
비비비비 비비비비 비비비 비비비비비 비비 비비 방방방

비즈니스 티어에서 디자인 고려사항과 위험 사례

Embed Size (px)

DESCRIPTION

비즈니스 티어에서 디자인 고려사항과 위험 사례. 방수상. 학습전략 , 목표. 현실세계의 비즈니스를 통해 J2EE 환경의 비즈니스를 편하고 친근감있게 접근해 보자 . 앞으로 배워나갈 Business Tier 가 어떤것들이 있는지 알아보자 . 이것을 통해 얻을 수 있는것은 무엇인지 토론해보자. Business?. 사무 , 업무 , 일 , 집무 , 영업 직업 , 가업. 우리 제품 좀 사주세요. 예방주사를 맞는경우. 한번 골라봐 ~. 너무 많이 샀다ㅡㅡ ; 계산은 …. J2EE. J. ava. - PowerPoint PPT Presentation

Citation preview

Page 1: 비즈니스 티어에서  디자인 고려사항과 위험 사례

비즈니스 티어에서 디자인 고려사항과 위험 사례

방수상

Page 2: 비즈니스 티어에서  디자인 고려사항과 위험 사례

학습전략 , 목표

• 현실세계의 비즈니스를 통해 J2EE 환경의 비즈니스를 편하고 친근감있게 접근해 보자 .

• 앞으로 배워나갈 Business Tier가 어떤것들이 있는지 알아보자 .

• 이것을 통해 얻을 수 있는것은 무엇인지 토론해보자 .

Page 3: 비즈니스 티어에서  디자인 고려사항과 위험 사례

Business?

•사무 , 업무 , 일 , 집무 , 영업

•직업 , 가업

Page 4: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 5: 비즈니스 티어에서  디자인 고려사항과 위험 사례

우리 제품 좀 사주세

요 .

Page 6: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 7: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 8: 비즈니스 티어에서  디자인 고려사항과 위험 사례

예방주사를 맞는경우

Page 9: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 10: 비즈니스 티어에서  디자인 고려사항과 위험 사례

한번 골라봐 ~

Page 11: 비즈니스 티어에서  디자인 고려사항과 위험 사례

너무 많이 샀다ㅡ

ㅡ ;계산은…

Page 12: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 13: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 14: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 15: 비즈니스 티어에서  디자인 고려사항과 위험 사례

J2EE

J2EE

avaPlatFormnterprisedition

Page 16: 비즈니스 티어에서  디자인 고려사항과 위험 사례

http://snippetstore.sourceforge.net/en-US/SnippetStore1.htm

J2EE Architecture

Page 17: 비즈니스 티어에서  디자인 고려사항과 위험 사례

J2EE Architecture

Page 18: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 19: 비즈니스 티어에서  디자인 고려사항과 위험 사례
Page 20: 비즈니스 티어에서  디자인 고려사항과 위험 사례

비즈니스 티어에서 디자인 고려사항

•EJB.•세션 빈•엔티티 빈

Page 21: 비즈니스 티어에서  디자인 고려사항과 위험 사례

DATABASE

세션 빈 사용하기

Session Facade

Transfer Object

Page 22: 비즈니스 티어에서  디자인 고려사항과 위험 사례

세션 빈사용하기

CLIENT

SessionBean

SessionBean

Page 23: 비즈니스 티어에서  디자인 고려사항과 위험 사례

Business Object

Application Service

Entity Beanor

Session Bean

Page 24: 비즈니스 티어에서  디자인 고려사항과 위험 사례

SessionBean vs EntityBean

비즈니스관리 데이타베이스관리

비영속성 영속성

시간제한 장시간제공

하나의클라이언트 다중사용자

stateless, stateful CMP, BMP

Transaction 인식

Page 25: 비즈니스 티어에서  디자인 고려사항과 위험 사례

Stateless vs Stateful

상태비유지 상태유지

대화상태 비저장 대화상태유지

세션 빈 공유 세션 빈 공유불가능

비대화식 프로세스 대화식 프로세스

Page 26: 비즈니스 티어에서  디자인 고려사항과 위험 사례

비즈니스 티어에 상태 저장

클라이언트 JSP/서블릿

엔터프라이즈빈 데이터베이스

상태

HttpSession 에 상태저장하기

클라이언트티어

프레젠테이션티어

비즈니스티어

리소스티어

Page 27: 비즈니스 티어에서  디자인 고려사항과 위험 사례

비즈니스 티어에 상태 저장

클라이언트 JSP/서블릿

엔터프라이즈빈 데이터베이스

세션 빈에 상태저장하기

클라이언트티어

프레젠테이션티어

비즈니스티어

리소스티어

클라이언트 상태

Page 28: 비즈니스 티어에서  디자인 고려사항과 위험 사례

엔티티빈

• 분산 (distributed)• 공유 (shared)• 트랜잭션 (transactional)• 영구 (persistent)

Page 29: 비즈니스 티어에서  디자인 고려사항과 위험 사례

엔티티빈 기본키

• 고유한 기본키에 의해 식별• findByPrimaryKey 직접구현

Page 30: 비즈니스 티어에서  디자인 고려사항과 위험 사례

엔티티빈에 비즈니스 로직 두기

• 엔티티빈에는 비즈니스 로직을 포함해서는 안된다고 오해하고 있다 .

• 엔티티빈는 객체뷰제공뿐 아니라 다중사용자를 위한 트랜잭션 처리역할도 수행할 수 있다 .

Page 31: 비즈니스 티어에서  디자인 고려사항과 위험 사례

엔티티빈을 이용한 출금 ( 비즈니스로직 ) 처리

Page 32: 비즈니스 티어에서  디자인 고려사항과 위험 사례

엔티티빈 이용시 유의사항

• 비즈니스 로직 안에 엔티티빈 상호 관계에 관한 로직이 들어가는가 ?

• 엔티티빈이 사용자와 상호작용하는 워크플로를 관리하는 역할을 맡고 있는가 ?

• 해당 엔티티빈이 다른 비즈니스 컴포넌트에 포함된 역할도 맡고 있는가 ?

Page 33: 비즈니스 티어에서  디자인 고려사항과 위험 사례

비즈니스 티어와 통합 티어에서 위험사례

Page 34: 비즈니스 티어에서  디자인 고려사항과 위험 사례

1. 객체 모델을 직접 엔티티빈 모델로 매핑하는 사례

문제 클래스 와 엔티티빈을 일대일로 변환 .

해법 큰 단위 엔티티빈 설계리팩토링 : 엔티티빈 상호통신 줄이기패턴 : Composite Entity 패턴

Page 35: 비즈니스 티어에서  디자인 고려사항과 위험 사례

2. 관계 모델을 직접 엔티티빈 모델로 매핑하는 사례

문제 테이블의 각 행 (row) 을 엔티티빈 하나로 설계하는 경우 .

해법 EJB 가 아닌 객체지향접근방식리팩토링 : 엔티티빈 상호통신 줄이기 , 비즈니스 로직을 세션 빈으로 옮기기패턴 : Composite Entity 패턴

Page 36: 비즈니스 티어에서  디자인 고려사항과 위험 사례

3. 각 유스케이스마다 세션 빈 하나를 매핑하는 사례

문제 한 가지 유형의 상호작용에 반응하기 위해 작은단위 컨트로러들을 많이 만들경우 많은 세션 빈이 필요하며 애플리케이션이 매우 복잡해진다 ..

해법 관련이 있는 상호작용들을 묶어 하나의 빈에 통합리팩토링 : 세션 빈 병합하기패턴 : Session Facade 패턴

Page 37: 비즈니스 티어에서  디자인 고려사항과 위험 사례

4. 모든 엔터프라이즈 빈 속성을 getter/set-ter 메소드를 사용해서 노출하는 사례

문제 객체 속성 정보를 얻기 위하여 작은 단위 원격호출이 빈번함 .

해법 값 객체를 사용하여 전송패턴 : Transfer Object 패턴

Page 38: 비즈니스 티어에서  디자인 고려사항과 위험 사례

5. 클라이언트에 서비스 검색(lookup) 코드를 둔는 사례

문제 클라이언트에 JNDI lookup 코드를 넣으면 서비스 lookup 코드 수정시 모든 클라이언트 수정 . 또한 lookup 코드에 종속됨 .해법 Servie Locator 패턴을 사용하여 캡슐화패턴 : Service Locator, Business Dele-gate 패턴

Page 39: 비즈니스 티어에서  디자인 고려사항과 위험 사례

Business Delegate 사용

ClientEJB

Session Bean

Order order = lookup(“ejb/.../orderEJB);order.getMyOrderList();

Business Delegate

OrderDelegate order = new OrderDelegate();order.getMyOrderList();

init(){this.order = (OrderHome)ServiceLocator.getEjbLocalHome........;}

getMyOrderList(){order.getMyOrderList();}

Page 40: 비즈니스 티어에서  디자인 고려사항과 위험 사례

6. 읽기 전용 객체로 엔티티빈을 사용하는 사례

문제 데이터베이스처럼 영구 저장소에 불필요한 업데이트 트랜잭션을 발생 .

해법 Data Access Object 패턴을 사용하여 데이터 소스로 접근하는 로직을 캡슐화패턴 : Data Access Object, Session Façade, Value List Handler, Transfer Object Accembler 패턴

Page 41: 비즈니스 티어에서  디자인 고려사항과 위험 사례

DataBase

엔티티빈사용하기

Session Facade

Transfer Object

세션 빈사용하기

Page 42: 비즈니스 티어에서  디자인 고려사항과 위험 사례

7. 작은 단위 객체로 엔티티빈을 사용하는 사례

문제 작은단위객체를 표현하기 위해 원격 엔티티빈을 사용하는 경우 , 전체네트워크통신과 컨테이너에 과부하를 일으킨다 .

해법 큰단위 엔티티빈과 세션 빈을 설계 .

패턴 : Composite Entity, Session Façade 패턴리팩토링 : 엔티티빈 상호 통신줄이기 , 비즈니스 로직을 세션 빈으로 옮기기 , 엔티티빈에 비즈니스 로직 두기 , 세션 빈 병합하기

Page 43: 비즈니스 티어에서  디자인 고려사항과 위험 사례

8. 종속 객체를 포함한 엔티티 빈 전체를 저장하는 사례

문제 하나의 엔티티 빈 안에 종속 객체들이 트리 구조를 이루고 있는 경우 , 엔티티 빈을 로드할 때 종속 객체를 포함한 전체 트리를 로드하고 저장하기 때문에 성능이 저하된다 .

해법 영구 저장소에 저장한 이후에 변경 여부를 체크하고 변경이 있는 경우에만 종속 객체를 저장 .

패턴 : Composite Entity 패턴과 Store Optimization 전략 , Lazy Loading 전략

Page 44: 비즈니스 티어에서  디자인 고려사항과 위험 사례

9.EJB 관련 예외가 EJB 가 아닌 클라이언트에 노출되는 사례

문제 애플리케이션개발자도 비즈니스 티어 컴포넌트가 던지는 예외의 세부 구현이 어떻게 이루어져 있는지 알아야 한다 .

해법 비즈니스 대리자가 모든 서비스 관련 예외를 중간에서 가로채어 애플리케이션 예외로 바꾸어 던짐 .

패턴 : Business Deleagte 패턴리팩토링 : Business Deleagte 도입

Page 45: 비즈니스 티어에서  디자인 고려사항과 위험 사례

10. 큰 결과 집합을 반환하기 위해 엔티티 빈 파인더 메소드를 사용하는 사례

문제 대량의데이터를 검색해서 가져와야 할 경우 EJB 파인더 메소드 ( 원격참조컬렉션 리턴 ) 를 사용하게 되면 클라이언트는 원격 참조 메소드를 호출해야 한다 .

해법 원격 호출 대신에 세션 빈과 DAO 를 사용해 Transfer Object 객체를 얻어오는 쿼리를 구현 .

패턴 : Value List handler, Data Access Object 패턴

Page 46: 비즈니스 티어에서  디자인 고려사항과 위험 사례

11. 클라이언트가 비즈니스 컴포넌트로부터 데이터를 모으는 사례

문제 데이터 모델을 구현한 비즈니스 컴포넌트에서 필요한 데이터 모델을 가져오기 위해서 다양한 비즈니스 컴포넌트로부터 데이터를 찾고 상호작용하고 추출해야 한다 . 이때 비즈니스 티어를 수 차례 호출해야 하므로 네트워크에 과부하를 일으킬 수 있다 .

해법 모델을 생성하는 작업을 클라이언트에서 분리하고 비즈니스 컴포넌트로 구현 .

패턴 : Transfer Object Assembler 패턴

Page 47: 비즈니스 티어에서  디자인 고려사항과 위험 사례

12. 엔터프라이즈 빈에서 오랜 시간이 걸리는 트랜잭션을 처리하는 사례

문제 엔터프라이즈 빈 메소드가 클라이언트 요청을 처리하는 데 상당히 많은 시간이 걸린다거나 처리가 진행되는 동안 메소드가 블로킹되면 , 이로 인해 빈이 사용하는 메모리와 스레드와 같은 컨테이너 리소스 역시 블로킹되는 결과를 가져옴 .

해법 시간이 오래 걸리는 트랜잭션을 구현하려면 JMS API를 제공하는 MOM 을 사용하여 비동기식 처리 .

패턴 : Service Activator 패턴

Page 48: 비즈니스 티어에서  디자인 고려사항과 위험 사례

13. 상태비유지 세션 빈이 매 호출마다 대화 상태를 재구성하는 사례

문제 세션 빈이 대화상태를 유지해야 하는 경우에도 상태비유지 세션 빈으로 설계할 경우 메소드를 호출할 때마다 대화상태를 재구성 (DB Access) 해야 한다 .

해법 상태비유지 세션 빈을 선택하기 전에 어떤 형태로 상호작용이 진행되는지 그 모델을 먼저 분석한다 .

패턴 : Transfer Object Assembler 패턴

Page 49: 비즈니스 티어에서  디자인 고려사항과 위험 사례

J2EE 환경에서 비즈니스 티어를 구현하기 위해많은 사항들을 고려해야 하며 ,

적절한 패턴을 사용해야 한다 .

Page 50: 비즈니스 티어에서  디자인 고려사항과 위험 사례

J2EE 패턴과 병행 학습

• EJB 3.0• Spring 2.5• 그 밖에…

Page 51: 비즈니스 티어에서  디자인 고려사항과 위험 사례

참고문헌 & 자료

• 코어 J2EE 패턴• http://www.corej2eepatterns.co

m/• http://snippetstore.sourceforge.

net/en-US/SnippetStore1.htm• http://www.imageclick.com• 장회수