통합(Integration) 티어 안티 패턴 - Hot Potato
2007/05/27 17:18
1. 문제점
Hot Potato 안티 패턴은 메시지 수신 확인 메시지를 요구할 경우 발생할 수 있는 위험사항들에 대해 기술하고 있는 패턴으로, 이 패턴이 지적하고 있는 문제점을 살펴보면 다음과 같음.
메시지 서버는 전달한 메시지가 정확히 전달되었는지를 확인하기 위해, 메시지 수신자에게 ARK(ACKNOWLEDGE) 신호를 리턴할 것을 요구. 이 ARK 신호가 리턴되지 않을 경우, 메시징 서버는 메시지를 다시 전달하게 됨.
2. 징후 및 결과 (Symptoms and Consequences)
3. 리팩토링된 해결방안 (Refactored Solutions)
우선 어떤 환경에서 메시지 드리븐 빈이 메시지를 받았음을 알려야 하고, 어떤 환경에서 메시지를 받았다라는 것을 알릴 필요가 없는지를 결정해야 함.
4. 관련 패턴 (Related Patterns)
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
