본문 바로가기
Homo Architect

원칙(principle)과 제약사항(constraint, environment)의 충돌

by javauser 2011. 9. 6.
SW 아키텍처 설계시에 다양한 원칙들이 있으며, 이는 좋은 설계와 건전성을 위해서 원칙을 선택하게 됩니다. 물론, 아키텍처 원칙 중에는 우선순위가 해당 컨텍스트에 따라서 결정되며, 모든 설계에서 공통으로 적용되는 원칙들도 있습니다. 하지만, 이러한 원칙들은 늘 제약사항이나 환경과 충돌을 경험하게 됩니다.

Chaos inside
Chaos inside by h.koppdelaney 저작자 표시변경 금지


이러한 충돌이 발생하는 상황에서는 늘 아키텍트나 설계자의 고민을 만들어내게 되며 다양한 의사결정을 하게 됩니다. 대부분의 의사결정에서 어떠한 방식으로 접근하는가에 따라서 추후 변경이나 잘못 결졍된 아키텍처의 수정에 대한 영향을 미치기도 합니다. 또한, 모든 설계 결정을 아키텍트가 하기도 힘들기 때문에 이를 일부러 설계자에게 위임하는 경우도 있으며, 때로는 아키텍트가 고민하는 시간을 주지 않고 경영진이나 관리 조직에서 바로 의사결정을 내리기를 요청하는 경우도 있습니다.

설계자가 아키텍트의 의도대로 설계를 계속 진행하는 것에 대해서는 큰 문제가 없겠지만, 의도를 잘못 파악해서 전혀 엉뚱한 방향으로 진행된다면 되돌리기에는 아주 힘든 경우도 있습니다. 또한, 충분한 시간이 없는 상황에서 의사결정을 해야하는 경우에서 대부분이 경험이나 직관에 근거하여 결정을 내리기 때문에 상당히 조심스럽게 접근할 필요가 있습니다.

이와 같이 원칙과 제약사항이 충돌이 되는 경우에 의사결정을 해야하는 상황에서 몇가지 고려해야할 사항들이 있습니다.

1. 대안을 반드시 생각하고 있어야 한다.
모든 설계에 관련된 의사결정은 수많은 방식과 방법이 존재합니다. 그러한 수많은 방법들 중에서 가장 효과적이거나 최적인 것을 선택하여 몇가지 대안을 최소한 고려해야 합니다. 한가지 방식만을 고려한다면 이후에 발생되는 일에 대한 대비를 하기에 바쁘며 설사 고려하지 못한 제약사항으로 인해서 상당한 노력을 낭비할 수도 있습니다. 대안을 생각한다는 것은 결국 원칙과 위배되는 제약사항들을 열거하여 실제로 발생할 수 있는 상황에 대해서 대비를 해야한다는 것을 의미합니다. 대안들은 서로 충돌이 되는 것이 있기도 하지만, 순차적으로 대안들을 적용하여 완성해가는 형태도 가능합니다. 첫번째 방법이 안되면 조금만 방향을 틀어서 다른 대안을 적용해서 최적의 방법을 찾아가는 식의 대안이 적은 노력을 통해서 달성 가능한 방식일 겁니다.

아키텍트는 어떠한 방식이든 설계에 관련해서 의사결정을 해야 하기 때문에 뒷짐지고 뒤로 물러나서 의사결정을 이도 저도 아닌 식의 태도를 보이면 안됩니다. 그러는 과정에서 많은 부분들이 어긋나기 시작하기 때문에 의사결정에도 순위를 매겨서 관리해야 합니다.

2. 실제로 작업을 수행하는 당사자의 능력을 고려해야 한다.
아키텍트가 설계에 대한 의사결정을 수행하고 직접 작업을 수행한다면 가장 최적이겠지만, 실제로 작업을 수행하는 당사자는 전혀 다른 팀이나 팀원이 될 수도 있습니다. 이때 당사자의 능력을 고려하지 않고 설계를 결정하는 경우에 추후에 재작업해야 하는 경우가 발생될 수 있습니다. 당사자의 능력이 아키텍트가 생각하기에 못미친다고 생각한다면 해당 설계 결정에 대해서 재작업을 줄일 수 있는 형태로 최대한 작은 단위의 작업으로 나누어서 접근하고 아키텍트의 의도에 대해서 작업시에 상세하게 점검해야 합니다. 결국 작업자의 능력에 따라서 작업의 범위를 조절하여 접근하도록 하는 기교가 어느 정도는 필요합니다.

3. 의사결정을 필요로 하는 컨텍스트를 이해해야 한다.
충분한 사고를 할 시간이 없는 경우의 의사결정에 대해서는 그러한 의사결정을 필요로 하는 컨텍스트에 대한 이해를 먼저 해야 합니다. 즉, 그에 대한 뒷배경을 이해하고 있어서 의사결정을 하더라도 전체적으로 원하는 방향으로 수행할 수 있습니다. 만일 특정 의사결정에 대해 컨텍스트에 대한 이해없이 수행하는 경우에 엄청난 결과를 초래할 수도 있습니다. 특히, 이러한 의사결정이 원칙과 위배되더라도 제약사항에 대한 강력한 요구가 뒤따르게 되면 그러한 원칙은 과감히 포기할 수도 있어야 합니다.

SW 아키텍트의 작업들은 대부분이 의사결정을 필요로 하는 작업들이며, 이는 상당한 고민의 시간을 필요로 합니다. 빠른 의사결정이라고 하더라도 어느 정도 충분한 고민이 안되고는 섣불리 접근해서는 안됩니다. 또한, 원칙에 대해서는 타협이 가능한 것과 반드시 지켜야할 것들을 선정할 필요가 있습니다. 이러한 기준을 스스로 만들어가면서 최적의 SW를 만드는 노력은 결코 쉬운 일은 아닐 겁니다. 
반응형