IT시스템의 구현은 현실세계와 밀접한 관련이 있다고 생각합니다.
짧지않은 기간동안 공부하고 경험한바를 바탕으로 마구 써내려가봅니다.
=========================================================================================
1. 조물주가 이 땅에 특별한 목적을 가지고 생명체를 창조해내었다면,
프로그래머 역시 어떠한 목적이 있기 때문에 한 객체를 시스템내에서 창조한다.
창조된 생명체는 자신의 역할을 다할 책임이 있다.
2. 어떠한 생명체도 혼자서 모든 것을 수행하지는 못한다.
자신이 할 수 있는 것은 자신이 하고, 그 역할을 벗어나는 것은 전달하여 요청한다.
그리고 의사소통이 가능한 존재들끼리만 요청을 주고 결과를 받을 수 있다.
3. 자연세계에서 한 객체가 다른객체에게 간접적으로 영향을 받을지언정, 직접적으로 영향을 받는 경우는 거의 없다.
소프트웨어에서 역시 가장 이상적인 객체라 함은, 다른 객체에 의해서 영향을 받는 것이 최소화되며 자신의 창조목적을 다하는 것이 기본으로 본다. 가끔 특수한 경우가 있을 수는 있지만 빈번하게 발생한다면 이는 자연스럽지 못하다.
4. 생태계에서 어떤 객체가 자신의 life cycle을 최대화 시키기 위해서는 변화에 잘 적응해야만 한다.
변하는 부분과 변하지 않는 부분을 구분하고, 변하는 부분에 있어서는 최대한의 유연성을 발휘한다.
그러나 변하지 않는 부분에 대해서는 견고함을 최우선으로 삼는다.
최초에 설계된 유연성을 넘어서는 경우에는 변화를 수용하지 못하고 파괴의 순간을 맞이하는 것이 공통적인 부분이다. 이 세상에 영원한 것은 없다.
5. System을 우리는 계 라고 표현한다.
하나의 계는 여러가지 공통의 속성을 공유한다. 우리의 환경을 예로 들자면 비슷한 온도, 습도, 토양, 공기, 일조 를 공유하는 곳이다. 계 안에서는 여러 생물이 각자 평안함을 유지하면서 살게된다.
그러나 그 안의 공유하는 균형이 깨지는 순간 심각한 이상현상을 초래한다.
거꾸로 계 내에서 살던 생명체가 다른 계 로 이동하는 순간 동일한 행위를 보장하지는 못한다.
소프트웨어에서는 이러한 경계안 쪽을 시스템 안정성,표준선을 보장하는 최소의 단위로 본다.(boundary)
계는 계의 집합으로 구성된다. 각 생명체는 하나의 계를 유지하며, 여러 생명체가 모여서 생태계를 구성하며, 다양한 생태계가 모여서 지구를 구성하고 있다.
6. 어떠한 객체이던지 점진적으로 발전한다.
태어날때부터 모든 기능이 완벽한 생물은 없다. 성장하면서 주위의 변화를 습득하면서 점차 부분부분의 기능을 강화해나간다. 때로는 필요에 따라서 기능을 퇴화시키기도 하고, 특정기능을 발전시키기도 한다.
중요한 것은 이러한 점진적 발전을 위해서는 기능의 규모에는 관계없이 반드시 최소Set은 가지고 있어야 한다는 점이다. 기본적으로 머리,몸통,팔,다리는 있어야지, 팔만 있어서는 발전의 가능성조차 없다.
7. 연관성이 없는 객체는 없는 존재의 의미가 없으며, 비슷한 연관성을 가진 객체는 서로 라이벌이다.
직접적이던 간접적이던 객체들은 서로 연관성을 가지고 있다.
다른 객체와 연관성이 전혀 없이 홀로 있는 객체라면 그것은 이미 객체가 아니다. 사라진다.
이와는 반대로 서로 비슷한 연관성을 가진 객체가 있다면 이 객체들은 서로 라이벌이다.
어느 한순간이 되면 하나의 객체만 남게될 것이다.
=========================================================================================
이렇게 정리하다보면 각 객체를 특별하게 구분할 수 있는 요소는 결국 관계성으로 보입니다.
객체가 가지고 있는 하나하나의 기능에 집중해서 보다보면 큰 그림을 놓치게 되고요,
객체들이 살고있는 환경만 바라보게 되면 작은 그림을 놓치게 됩니다.
그래서 저는 시스템을 구축하거나 분석/설계 해야하는 업무를 수행할 때 아래와 같은 순서로 접근합니다.
1. 이 시스템의 목적은 무엇인가? 어디까지가 시스템의 범위인가?
2. 그 목적을 이루기 위해서 구성되고 있는, 또는 구성되어야 하는 컴포넌트는 무엇인가? 최소필요기능은 무엇인가?
3. 컴포넌트들이 보인다면 서로 관계는 어떻게 맺어야 하는가?
4. 유사한 관계 혹은 충돌되는 관계는 없는가?
5. 컴포넌트안에는 구체적으로 어떤 객체들이 만들어져야 하는가? 얼마나 많이 만들어져야 하는가?
6. 이제는 보다 상세하게 각 객체들의 책임을 상세하게 정의해보자.
영화Matrix를 보면 아키텍트가 곧 창조주이죠.
이러한 모든 요소를 고려하여 각 객체들이 오래~ 행복하게~ 살수 있는 하나의 계를 구축해주는 것이 목표아니겠습니까. 만들어는졌으나 아무것도 하는일이 없는 객체, 혼자서 모든 일을 도맡아 하는 객체는 얼마나 힘들까요.
신처럼 처음부터 끝까지를 모두 완벽히 해낼 수 있다면 가장 이상적이겠지만 현실은 불가능입니다..
'Application Design' 카테고리의 다른 글
Azure IoT Hub를 이용한 Firmware Update기능 + Java enum을 활용한 디자인패턴 적용 (0) | 2019.10.08 |
---|---|
2. 어떠한 객체도 혼자서 모든 일을 할 수 없다.(재사용성) (0) | 2017.03.24 |
1. 객체의 창조 (0) | 2015.06.29 |
Fine-Grained vs Coarse-Grained (0) | 2014.12.08 |
Enterprise Application Design (0) | 2014.10.23 |