통합(Integration) 티어 안티 패턴 - Hot Potato

2007/05/27 17:18
1. 문제점
Hot Potato 안티 패턴은 메시지 수신 확인 메시지를 요구할 경우 발생할 수 있는 위험사항들에 대해 기술하고 있는 패턴으로, 이 패턴이 지적하고 있는 문제점을 살펴보면 다음과 같음.

메시지 서버는 전달한 메시지가 정확히 전달되었는지를 확인하기 위해, 메시지 수신자에게 ARK(ACKNOWLEDGE) 신호를 리턴할 것을 요구. 이 ARK 신호가 리턴되지 않을 경우, 메시징 서버는 메시지를 다시 전달하게 됨.
  • CMT(Container Managed Transaction)를 사용할 경우
    MDB(Message Driven Bean)에서 CMT를 사용할 경우, MDB는 onMessage 메소드가 리턴될 때 메시지를 받았음을 알리고, 트랜젝션을 커밋함.
  • System Exception이 발생할 경우, 또는 setRollBackOnly 메소드가 호출된 경우
    OnMessage 메소드 내에서 EJBException 또는 NullPointerException과 같은 System Exception이 발생할 경우 또는 setRollBackOnly 메소드가 호출될 경우, ARK 신호가 메시지 송신자에게 전달되지 않음.
  • BMT(Bean Managed Transaction)를 사용할 경우
    BMT를 사용할 경우, ARK 신호와 트랜잭션은 서로 관련성이 없고, onMessage 메소드 내에서 System Exception이 발생하지 않는 한 ARK 신호는 전달됨.
  • 데이터베이스 서버와의 네트워크 커넥션이 잠시 끊어지는 것과 같이 가끔 발생하는 문제로 인해 메시지를 처리할 수 없을 경우
    데이터베이스 서버와의 네트워크 커넥션이 잠시 끊어지는 것과 같이 가끔 발생하는 문제로 인해 메시지를 처리할 수 없을 경우, 메시지를 다시 전달하도록 하는 것이 좋음. 메시지가 처리되지 않았기 때문에, 메시지를 수신했다라는 신호를 보내지 않았고, 이런 경우 메시징 서버는 메시지를 다시 전송하게 되며, 이번에는 메시지가 성공적으로 처리됨.
  • 메시지가 현재까지 계속되고 있는 문제로 인해 처리되지 않을 경우
    메시지가 현재까지 계속되고 있는 문제로 인해 처리되지 않을 경우, 메시징 서버는 메시지가 타임 아웃되거나 지정해 놓은 최대 재전송 횟수에 도달할 때까지 계속 메시지를 재전송하게 됨. 이런 경우 수신자, 네트워크, 메시징 서버 자원의 낭비를 초래.

2. 징후 및 결과 (Symptoms and Consequences)
  • 메시지 드리븐 빈 또는 기타 자바 메시지 서버의 수신자는 똑같은 잘못된 메시지를 계속해서 수신하게 됨.
  • 계속해서 처리될 수 없는 메시지를 송.수신함으로써 메시징 서버와 수신자의 오버헤드가 증가.

3. 리팩토링된 해결방안 (Refactored Solutions)
우선 어떤 환경에서 메시지 드리븐 빈이 메시지를 받았음을 알려야 하고, 어떤 환경에서 메시지를 받았다라는 것을 알릴 필요가 없는지를 결정해야 함.


4. 관련 패턴 (Related Patterns)
  • Service Activator
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/27 17:18 2007/05/27 17:18
[로그인][오픈아이디란?]

통합(Integration) 티어 안티 패턴 - Fat Message

2007/05/27 17:03
1. 문제점
Fat Message 안티 패턴은 콤포넌트간 비동기적으로 주고 받는 메시지에 너무 많은 정보를 추가할 경우 발생하는 문제점들에 대해 기술하고 있는 패턴으로, 이 패턴이 지적하고 있는 문제점을 살펴보면 다음과 같음.

MOM(Message Oriented Milldeware)를 통해 비동기적으로 전달되는 메시지가 너무 뚱뚱해질 수 있음. 메시지 소비자가 필요로 하는 모든 정보를 메시지에 담을 경우, 메시지가 너무 커져서 네트워크 오버헤드를 높이게 됨. 게다가, 자바 메시지 서버는 메시지를 규에 보관.
따라서, 메시징 서버는 메시지가 성공적으로 전달될 때까지 메시지를 큐에 보관하고 있게 되는데, 메시지가 뚱뚱하면서 바로 전달되지 않을 경우, 메시징 서버의 부담이 커지게 됨.


2. 징후 및 결과 (Symptoms and Consequences)
  • 네트워크의 오버헤드가 증가.
  • 메시징 서버의 오버헤드가 증가.
  • 데이터의 마샬링과 언마샬링 작업으로 인해 메시지 송신자와 수신자의 오버헤드가 증가.

3. 리팩토링된 해결방안 (Refactored Solutions)
리모트 메소드 호출시 정말 파라메터가 필요한지, 비동기 통신방식 서비스에서 필요한 파라메터는 무엇인지를 다시 한번 주의 깊게 고민한 후, 정말 필요하다라고 생각되는 데이터만 포함시킴.
이때 메시지 타입은 효율적으로 전송하기에 용이한 데이터 타입을 선택.
자바 메시지 서비스는 다섯 종류의 메시지 타입을 제공하고 있음.
  • TextMessage
  • MapMessage
  • ObjectMessage
  • BytesMessage
  • StreamMessage

4. 관련 패턴 (Related Patterns)
  • Service Activator
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/27 17:03 2007/05/27 17:03
[로그인][오픈아이디란?]

통합(Integration) 티어 안티 패턴 - Monolithic Consumer

2007/05/27 16:53
1. 문제점
Monolithic Consumer 안티 패턴은 비즈니스 로직을 메시지 드리븐 빈에 정의함으로써 발생하는 문제점들에 대해 기술하고 있는 패턴으로, Monolithic Consumer 안티 패턴이 지적하고 있는 문제점을 살펴보면 다음과 같음.

메시지 드리븐 빈에 의해 수행되는 비즈니스 로직은 메시지 드리븐 빈의 onMessage 메소드에 정의됨. 따라서, 이렇게 정의된 비즈니스 로직은 메시지를 메시징 서버에 보내야만 호출이 가능.


2. 징후 및 결과 (Symptoms and Consequences)
  • 클라이언트는 필요에 따라 동기 방식으로 비즈니스 로직 호출을 선택할 수 없음.
  • 비즈니스 로직을 테스트하기가 어려움.

3. 리팩토링된 해결방안 (Refactored Solutions)
메시지 드리븐 빈은 메시지에 들어 있는 데이터만 읽은 후, 일반적인 형태의 자바 클래스 또는 세션빈이 제공하는 메소드를 호출.


4. 관련 패턴 (Related Patterns)
  • Service Activator
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/27 16:53 2007/05/27 16:53
[로그인][오픈아이디란?]

통합(Integration) 티어 안티 패턴 - Not Pooling Connections

2007/05/27 16:47
1. 문제점
Not Pooling Connections 패턴은 데이터베이스에 쿼리를 할 때마다 데이터베이스 커넥션을 생성.파괴함으로써 생기는 비용을 지적하는 패턴으로, Not Pooling Connections 안태 패턴이 지적하고 있는 문점을 보면 다음과 같음.

데이터베이스와 커넥션을 생성하고 파괴하는 작업은 비용이 많이 드는 작업으로, 어떤 경우에는 간단한 쿼리를 실행하는 것보다 데이터베이스와의 커넥션을 생성하는 작업이 10배나 더 오래검림.
따라서. 필요할 때마다 매번 데이터베이스와의 커넥션을 생성하고 파괴하는 작업을 하지 말하야 함. 대신, 커넥션이 계속해서 많은 쿼리에서 사용될 수 있도록 해야함. 그러나, 데이터베이스와 커넥션할 수 있는 갯수가 제한되어 있기 때문에, 각 콤포넌트가 커넥션을 계속 소유하고 있지 말아야 함.


2. 징후 및 결과 (Symptoms and Consequences)
  • 데이터베이스와의 커넥션을 생성하고 파괴함으로써 퍼포먼스가 늦어짐.
  • 커넥션을 너무 오랫동안 소유하고 있기 때문에 확장성이 제한적.
  • 각 콤포넌트가 자신이 직접 커넥션을 오픈할 경우, 사용해야 할 데이터베이스 드라이버와 데이터베이스 서버 위치 정보를 각 콤포넌트에 직접 하드코딩해야 함. 따라서, 데이터베이스 정보가 변경될 경우 이를 관리하기가 어려움.

3. 리팩토링된 해결방안 (Refactoed Solutions)
데이터베이스와의 커넥션을 여러 개 오픈하고 있고, 개개의 콤포넌트에게 가지고 있는 커넥션을 빌려주는 커넥션 풀을 사용.


4. 관련 패턴 (Related Pattern)
  • Data Access Object
    이 패턴은 DAO 클래스에 데이터베이스 억세스 코드를 놓는 방법에 대해 기술하고 있음. DAO 클래스는 커넥션 풀을 사용함으로써 Not Pooling Connections 안티 패턴의 발생을 피할 수 있음.
이올린에 북마크하기

happyness Programming/J2EE Patterns ,

2007/05/27 16:47 2007/05/27 16:47
[로그인][오픈아이디란?]

통합(Integration) 티어 안티 패턴

2007/05/27 16:06
1. 개요
통합 티어 안티 패턴들은 J2EE 플랫폼 통합 티어 기술의 바람직한 사용에 대해 소개하고 있음. 이들 안티 패턴들은 통합 티어에서 잘못된 디자인을 피하고, 좋은 지자인을 찾기 위해 통합 티어 J2EE 패턴과 함께 사용.


2. 종류
  • Not Pooling Connections AntiPattern
    데이터베이스에서 데이터를 쿼리할 때마다 데이터베이스 커넥션을 생성하고 파괴.
  • Monolithic Consumer AntiPattern
    비즈니스 로직을 메시지 드리븐 빈에 놓음.
  • Fat Message AntiPattern
    비동기 메시지에 너무 많은 정보를 담음.
  • Hot Potato AntiPattern
    메시지 송신 후 확인 메시지를 요구할 경우, 메시징 서버는 메시지를 계속 재전송하게 됨.
이올린에 북마크하기

happyness Programming/J2EE Patterns

2007/05/27 16:06 2007/05/27 16:06
[로그인][오픈아이디란?]