달력

072010  이전 다음

IBM DW의 A Conceptual Model for Event Processing Systems 에서 그림만 발췌

Overview of Event Processing

이벤트 처리의 개요


Minimal Event Processing Conceptual Architecture

이벤트 처리 핵심 개념 아키텍처

Event Processing Conceptual Architecture components which can be involved in an Event Processing system

이벤트 처리 컴포넌트 수준 개념 아키텍처


An example EPN used by the Event Processing Conceptual Architecture

이벤트 처리 아키텍처와 이벤트 처리 네트워크



Posted by 영회


  • 현재 클래스 구조로는 통과시키기 어려운 구조 개선을 하려는 경우에 테스트 코드를 주석 처리(comment out)하고 구조를 변경한다. 이렇게 하면 구조 개선 과정에서 지금까지 되던 기능(기존 테스트)은 보장(회귀 테스트)할 수 있다. 이후에 주석 처리를 풀고 테스트를 다시 시작한다.
  • for 등 반복문 괄호 범위 안에 넣어야 하는 로직을 밖에 넣었을 때 나타나는 오류도 빨리 포착할 수 있다. 다른 로직과 엉켜 원인을 알기 힘들게 되기 전에
    • Ctrl+C, Ctrl+V 가 타이핑보다 유리할 수 있다. 복사 + 붙여넣기 하는 과정에서 자연스럽게 중복을 인지할 수 있으니 테스트 성공 후에는 기억/메모해두었다가 리팩토링한다.

Posted by 영회
1. 테이블 초기화 성능 향상
AbstractTransactionalJUnit4SpringContextTests(JUnit 4.x/Spring 2.5) 객체나AbstractTransactionalDataSourceSpringContextTests (JUnit 3.x/Spring 1.1)가 제공하는 deleteFromTables() 메소드는 하나 이상의 테이블에 있는 레코드 삭제를 돕는다. 테스트 메소드 내에서 레코드를 초기화 하는데 편의를 제공하지만, 테이블에 레코드가 많을 때는 조심해야 한다. 수만 건 정도만 되어서 몇 초가 걸리고, 천만 건 이상이면 불필요한 DB Lock을 유발하기도 한다. 이를 피하기 위해 simpleJdbcTemplate/jdbcTemplate 멤버 변수를 통해 DELETE 쿼리를 직접 실행하면 성능 저하를 막을 수 있다.

jdbcTemplate.execute("DELETE FROM " + TABLE_NAME  + " WHERE id = '0011'");
insertXlsData("code.xls"); // id = "0011"
assertEquals(3, jdbcTemplate.queryForInt("SELECT COUNT(id) FROM " + TABLE_NAME
                                                            + " WHERE id = '0011'"));


2. 성능 측정을 위한 정보 제공
보통 성능 테스트를 위해 JUnit을 직접 사용하지는 않지만, 평소에도 수행 시간 정보를 알면 유익하다. 이클립스 JUnit 뷰에서 수행시간을 알려주지만, setUp에 작성한 테스트 준비를 위한 작업 수행 시간이나 테스트 메소드 내 확인(assertion) 시간까지 포함한다. 정확한 테스트 측정을 위해 StopWatch 등의 유틸리티를 이용해 테스트 대상 비즈니스 로직만 테스트할 수 있다.

// 테스트를 위한 준비(Test Fixture, Test 대상 객체 등을 생성하고 설정
StopWatch stopWatch = new StopWatch("AAA에 대한 " + countRowsInTable(TABLE_NAME) + "건 조회 테스트");
stopWatch.start();
//  여기에서 비즈니스 로직 수행
stopWatch.stop();
logger.info("\n" + stopWatch.prettyPrint());
// 확인 코드


Posted by 영회