복잡성 : 이문제가 가장 중요한 부분이다 . 복잡성을 극복하려면 - 시스템의 전체구조를 봐야 한다 . : 나는 개발할 때 전체를 보고 하는가 ? MC 도 그렇다 . - 시스템의 구성요소를 찾아야 한다 . : 전체를 봐야 구성요소가 보인다 . - 시스템의 구성요소들은 일관성이 있어야 하고 , 서로 조화를 이루어야 한다 . - 시스템의 구성요소들 사이의 관계가 명확해야 하고 일정한 규칙을 따라야 함 분할하여 정복하라 . - 이는 software 공학의 기본원칙이다 . 세상의 모든 곳에 이 원칙은 통한다 . 복잡한 시스템을 이해하려면 이해할 수 있는 수준까지 계속 분해해서 이해하면 된다 . 모든 시스템은 이렇게 해야 한다 . 소프트웨어 아키텍쳐 는 중요한 것만 다룬다 . 아키텍쳐는 상황에 따라 고려되어야 한다 . Software architecture 라고 해서 소프트 웨어만 다룬다는 생각은 바보 같은 짓이다 . 하드웨어 , 네트워크 , 통신 프로토콜 , 운영시스템 모든 영역에 대해 고려해야 한다 . 모든 모델은 아키텍쳐를 기반으로 만든다 . 아키텍쳐의 활동 - 비즈니스 케이스 생성 - 요구 사항 분석 - 아키텍쳐 구축 아키텍쳐는 이해관계자들이 시스템을 이해하고 , 의사소통 할 수 있도록 돕는다 . 이런 아키텍쳐를 UML 모델링 하는 것이 가장 효과적이다 . 만들어야 하는 시스템을 이해하지 못하면 프로젝트는 결코 성공할 수 없다 . 아케텍쳐의 첫번째 역할은 이해관계자들이 시스템을 자신의 관심에 맞게 이해할 수 있도록 하는 것이다 . 아키텍쳐를 한번 결정하면 나중에 바꾸는 것은 거의 불가능하다 . 따라서 신중하게 선택해야 한다 . 아키텍쳐는 시스템을 진화 시킨다 . 아키텍트는 시스템이 수정 및 추가가 쉽도록 잘 설계해야 한다 . 그래야 제대로 된 시스템이 된다 . 즉 아키텍트가 어떻게 설계하는냐