CRUD ID의 단상.

Posted at 2009.11.29 23:42 // in 분류없음 // by MOOVA 무바㏇

관리적인 차원에서 CRUD ID를 묶어서 프로젝트를 진행하는 케이스가 더러 있습니다.
이런 방법은 3번째 경험이기도 하고 말이죠. 장단점을 몇가지 나열해 볼까 합니다.

CRUD를 ID별로 묶어서 일괄관리하게 되면 관리적인 차원에서 모든 오퍼레이션(insert,update,delete,select 이렇게 각 도메인별로 그룹을 지어서 관리를 ) 을 관리할 수 있기 때문에
1. 아키텍트 관점으로는 오퍼레이션의 일괄관리라는 장점을 취할 수 있습니다.
2. 관리적인 관점으로는  진행사항을 어느정도 짐작할 수 있게 됩니다.
3. 정규화가 이루어지고 crud를 요청해서 받아오는 형식이니 어느정도 데이터베이스의 정규화가 가능합니다.

프로젝트 초반에 분석/설계가 안정적으로 진행이 되었다면 CRUD ID관리는 위와같은 이점을 얻을 수 있습니다.

하지만 분석/설계가 미진하고 요구사항이 수시로 변경되는 프로젝트라면 CRUD ID의 관리는 복잡성만을 증가시킬 우려가 있습니다.
분석/설계가 미진하다는 것은 오퍼레이션의 변경을 주기적으로 갈거나, 바꾼다는 의미와도 같습니다.
도메인분석이 채 완성되기도 전에 CRUD ID를 체계적으로 활용한다고 해도 도메인의 변경(Domain Changable) 및, (Function Scope)의 불확실성이라는 잔재가 남아 있기 때문에 어쨋든 CRUD ID의 변경을 감안해야 합니다.

이와 같은 경우 적절한 Tool의 도입또한 효과적일 수 있습니다. 데이터베이스를 조회하는 영역에서 매번 CRUD의 로직을 생성해야하는 고통지수를 감안하면 CRUD의 자동생성툴도 생산성을 보장해 줄 수 있습니다.
(ORM이라는 툴도 쓸데없는 일을 줄여주는데 한몫 할 수 있겠습니다. Ibatis나 sql Mapper에 Abata같은 제너레이터 툴을 도입하는 것도 효과적일 수 있습니다.)
특히 Hibernate나 JPA같은 ORM은 GenericDAO라고 하는 추상화된 오퍼레이션을 만들 수 있으므로 CRUD ID를 일괄관리하는 곳에서 사용하면 매번 똑같은 CRUD 쿼리를 직접생성하지 않아도 됩니다.

CRUD ID를 관리하는 곳에서의 단점은
1. 피드백을 통해서만 ID가 생성이 되니 업무의 흐름이 중간에 막힐 수가 있습니다.
2. 보통 CRUD ID이외의 특정 기능을 수행하는 ID가 필요한 경우 검증과정을 통해서 추가로 등록해야 하는 시간적 비용이 늘게 됩니다.
3. 일의 분업이라는 형식이 의미가 상실될 수 있습니다. ID를 따로 관리를 해 ID관리자가 효율적으로 관리를 한다면 모르겠지만 ID관리하는 사람도 관리가 안된다고 한다면, 일은 한쪽방향에 치우칠 우려가 있습니다.
4. 보통의 프로젝트보다 병목현상이 심각하게 나타날 우려가 있습니다. 비즈니스 로직단의 설계와 데이터베이스 모델중간에 한가지 관리적인 용도가 생기니 일의 타임라인이 길어집니다. id별로 오퍼레이션을 집중하기 때문에 공통모듈이나 조직내의 프레임워크 생산에 집중할 수 없게 됩니다. 이와같은 경우 똑같은 ID를 여러사람이 공용할 필요가 있습니다.(그래서 자주 사용하는 State를 기반으로한 공통 컴퍼넌트가 필요한 것입니다.)

고쳐나가야 할 것 : CRUD ID를 쿼리별로 다루는 것보다 ORM의 도입을 한번 고려해서 CRUD를 비즈니스단의 객체상태로 관리하게 되면 이러한 단점들을 몇가지 해소할 수 있습니다. 
1. 매번 똑같은 일을 반복하지 않아도 됩니다.(ID를 새로 따는 일, 요청과 피드백을 하는 일)
2. 모델링이 객체와 디비쪽에 집중이 되니 각 오퍼레이션(CRUD ID)의 끊김 현상이 없어지게 됩니다.
3. 오퍼레이션을 수행하는 곳에서 Generic화 할 수 있는 추상화를 고려한다면 자동화가 가능하게 됩니다.
4. Generic, type parameter를 도입하여 공통의 오퍼레이션을 생산할 수 있습니다. ( 한 부분에 집중할 수 있다.)

참고 :
옹쓰블로그 2 : http://paradozzz.cafe24.com/blog/?p=200
옹쓰블로그 1 : Generic도 만만치 않았다. 
                    Sun generic Tutorial , 
                    GenericDAO

 




저작자 표시 비영리 변경 금지
신고
블로그코리아에 블UP하기

댓글을 남겨주세요.

티스토리 툴바