오늘은 어디로 갈까...

3. DAMO 구조 본문

ORM 만들기

3. DAMO 구조

剛宇 2009. 8. 24. 18:36

 프레임워크 개발에 있어서 가장 중요하다는 생각되어지는 것은, 구조를 설계하는 일이라고 생각한다. 잘 만들어진 구조를 가진 프레임워크가, 잘 못 만들어진 구조를 가진 프레임워크보다 좋다는것은 너무나 자명한 사실이다. 그렇다면 어떤것이 잘 만들어진 구조일까? 여러가지 요소가 있지만, 그 중에서 가장 중요한 것이라면 모듈화를 잘 하는것이다. 응집도(Cohesion)를 강하게 하고, 결합성(Coupliing)을 약하게 하는것을 의미한다.
 그렇다면 어떻게 하면 좋은 구조를 설계할 수 있을까?
 그것에 대한 정답은 없다고 본다. 많은 삽질과 노력에 의해서 얻어진 경험에 의해서 조금씩 좋아지는것뿐인것이다. 겁먹지 말고 대충 구조를 만들어보고, 이게 아니다 싶으면 다시 만들면 되는것이다. 이런 시행착오를 거치다 보면 조금씩 조금식 좋은 구조가 만들어지는것이다. 물론 제한된 시간이라는 놈이 항상 우리를 방해하지만 말이다. ^^;
 DAMO도 잘 만들어진 구조라고 보기는 힘들수도 있지만, 기능을 분리하려면 나름데로 노력은 많이했다. --;

 위의 그림은 DAMO의 구성도이다. 원래 새롭게 그려야하지만, 귀찮은 관계로 예전에 만들어 놓은것을 재사용하였다.
 DAMO는 크게 보면 4가지로 구성되어 있다. 쿼리를 생성하는 쿼리 제공기(Query Provider), 쿼리를 실행하는 쿼리 실행기(QueryExecutor), 트랜잭션을 관리하는 트랜잭션 관리자. 그리고 이것들을 조율하는 영속성 관리자(PersistenceManager)이다.
 쿼리 제공기(Query Provider)는 EO에서 쿼리를 만들어내는 쿼리 생성기(Query Generator)와, XML 파일에서 쿼리를 읽어오는 쿼리적재기(Query Loader)로서 이루어져 있다. 요청을 받으면 원하는 Query 객체를 찾아내어서 요청한 대상에게 돌려주는 역할을 하는것이다.
 쿼리 실행기(QueryExecutor)는 Query 객체와 파라메터를 넘겨 받아 쿼리를 실행하는 역할을 한다. 기본적으로 포함되어 있는 SimeQueryExecutor는 JDBC의 PreparedStatement을 이용해서 쿼리를 실행한다.
 트랜잭션 관리자(Transaction Manager)는 해당 세션의 요청을 받아 트랙잭션을 시작(begin), 커미(commit), 롤빽(rollback), 종료(end)하는 역할을 한다. 해당 작업을 처리하기 위해서 JDBC의 Connection 객체를 사용하거나, JTA의 UserTransaction 객체를 사용한다.
 영속선 관리자(PersistenceManager)는 각 사용자의 요청에 의해 만들어진 세션을 생성하고, 그 세션을 통해서 쿼리 생성, 쿼리 실행, 트랜잭션 관리를 할 수 있게 해준다.