시스템 관점에서...(1)
본문에 들어가기 전에 복잡 과 혼잡의 차이에 대해서 먼저 살펴보도록 하겠다.
복잡성 (Complexity)에는 절대적으로 좋은 것도 나쁜 것도 없다고 말한다. "복잡하다"가 나쁜 것이 아니라, "복잡해서 시스템의 효율이 나빠졌다"라는 결과가 나와야 선악의 판단을 할 수 있다.
즉, 복잡성만 따지면 이상적인 상태가 무엇인 지 알기 어렵다는 것이다. 현재가 복잡해도 오히려 높은 성과와 효율을 낸다면, 복잡하지 않았던 시기보다 바람직하다고 볼 수 있다.
그래서, 복잡성 (Complexity)에는 "최적화"가 수반되어야 한다.
혼잡성 (Complicatedness)의 상반되는 의미는 질서 (Cosmos)이다. 그리고, 질서 잡힌 상태가 가장 이상적인 상태가 된다.
이렇게 생각해볼까?
나의 서재에 책이 가장 차있는 책장이 두 개가 있다. 처음엔 하나씩 읽고, 분야별로 정리해두었는데, 자꾸 읽다 보니까 책을 바닥에 두기도, 쌓아두기도 했다. 책을 읽다가, 간식을 먹으며 나오는 쓰레기를 방안 구석에 처박아 둔다. 이런 환경을 혼잡하다 (Complicatedness)라고 표현한다.
혼잡한 서재의 가장 이상적인 모습은 책이 책장에 모두 정리되고, 쓰레기가 버려진 상태이다.
처음 책이 200여 권일 때는 책 정리하기도 쉽고, 분야별로 찾기도 쉬웠으나, 책이 늘어가면서 책 정리하기가 어려워졌고, 분야별로 찾기가 어려워진다. 책의 수가 늘어가면서 서재의 복잡성이 높아졌다. 그렇다면 가장 이상적인 상태는 언제일까? 책이 없었던 시절? 쉽게 기술할 수 없다. 필요 없는 책을 줄이고, 책의 배치를 분야가 아니라, 제목으로 정리하는 등의 복잡성을 줄이기 위한 최적화 작업이 필요하다.
즉, 혼잡은 현재 상태를 의미한다. 질서와 대치가 되는 표현이다. 반면에 복잡은 질서와 혼잡 사이의 상태를 의미하고 단순과 대치하는 표현이다. 반복해서 언급하는 것처럼 복잡성은 특성 값이다. 질서와 혼잡에 대해서 가치 판단이 명확한 것과 달리 단순과 복잡은 상황에 따라서, 시스템에 따라서 가치 판단이 달라진다.
지금까지의 복잡성은 다양성으로 기인한 복잡성이고, 다양성으로 기인한 복잡성이 경영 관점에서 가장 신경을 많이 쓰는 복잡성이다. 앞으로도 복잡성이라고 하면, 따로 언급하지 않더라도 다양성으로 기인한 복잡성을 의미한다. 이미 다양성으로 기인한 복잡성 (Variety-Induced Complexity)의 정의, 특성을 다뤘지만, 일반론적으로 복잡성에 대한 특징을 살펴보는 것은 복잡성 자체를 이해하는 데 도움이 된다. 지금까지의 내용 중 중요한 부분을 정리하고, 일반론적인 복잡성에 대해서 살펴보도록 하겠다.
1. 복잡성이란 시스템의 효율에 영향을 미치는 시스템이 가지고 있는 고유의 특성치이다.
2. 복잡성은 외부 또는 내부의 복잡성 요인으로 인하여 발생하며, 측정이 사실상 불가능하다.
3. 복잡성 요인은 긍정적인 요인과 부정적인 요인으로 나눠볼 수 있으며, 복잡성을 관리한다는 것은 곧 복잡성 요인을 관리한다는 의미가 된다.
4. 혼잡 (Complicatedness)과 복잡 (Complexity)은 구별해야 한다. 혼잡의 반대말이 질서인 것처럼, 상대적으로 부정적인 가치를 가진 반면에, 복잡의 반대말은 단순으로 가치중립성을 갖는다. 다만, 복잡성의 결과로 그것이 긍정적인지 부정적인지 판단이 가능하다.
복잡성의 일반적인 개념은 다양한 시스템의 요인으로 인하여 발생하고, 종국에는 시스템의 효율에 영향을 미치는 시스템의 고유 특성을 의미한다. 시스템은 그것마다 고유의 기능을 발현하는데, 그 과정에 있어서 복잡성의 발생은 필연적이다. 여기서 복잡성을 피할 수 있느냐, 없느냐로 둘로 구분을 한다.
시스템이 기능을 발현하는 데 필요한 최소의 복잡성을 핵심 복잡성 (Essential Complexity)이라고 칭하고, 나머지 복잡성을 불필요한 복잡성 (Gratuitous Complexity)라고 칭한다. 전자는 시스템이 가진 본연의 기능을 구현하기 위해서는 어쩔 수 없이 감수해야 하는 복잡성인 반면에, 후자는 기능을 구현하는 방식, 시스템의 구성요소, 구성요소 간의 상호관계 등으로 인해서 추가적으로 발생하는 복잡성을 의미한다. 고로, 시스템의 복잡성이 핵심 복잡성과 같을 경우가 가장 이상적인 상태라고 할 수 있다.
소프트웨어 아키텍처, 시스템 아키텍처에서 다루는 복잡성의 문제는 바로 불필요한 복잡성을 줄이는 데 있다. 기능을 구현하는 데는 핵심 복잡성이 발생하겠지만, 비기능적 요구사항, 제약사항을 만족시키기 위해서 발생하는 불필요한 복잡성을 최소화하기 위해서 아키텍처를 활용한다.
몇 차례에 걸쳐서 일반론 관점에서의 복잡성에 대해서 다루도록 하겠다. 물론, 문헌마다 복잡성을 설명하고 다루는 방식이 다르다. 논문을 쓰는 거라면 문헌 별 차이를 분석해서 설명해야 맞겠지만, 그게 아니라면 최대한 단정적으로 정리해서 내용을 전달하고 있다.
ps. 옳고 그름을 구별하기 위한 전공자들에게는 본 글이 도움이 안된다. 논문을 찾아보라고 권하고 싶다.