본문 바로가기
Homo Architect/Things Every SW Architect Should Know

본질적인 복잡성을 단순화시키고, 예상치 못한 복잡성을 줄여라.

by javauser 2009. 3. 11.

 - Neal Ford

Neal Ford는 ThoughtWorks사의 소프트웨어 아키텍트이자 meme wrangler이고, end-to-end 소프트웨어 개발과 제공에 독점적인 집중을 하는 세계적인 IT 컨설턴트이다. 그는 어플리케이션, 교육자료, 잡지 기사, 교육용 소프트웨어, 비디오/DVD 프레젠테이션의 설계자/개발자이고, 5권 서적의 집필자이자 편집자이다. 그는 또한 수많은 컨퍼런스에서 강연했다.
http://www.nealford.com 에서 여러분의 강한 호기심을 충족시킬 수 있다.





본질적인 복잡성에는 모든 문제에 포함되어 있는 어려움이 나타납니다. 예를 들어, 어떠한 국가든지 간에 항공 교통을 통제하는 것은 본질적으로 복잡한 문제입니다. 공중과 활주로에서 충돌을 방지하기 위해 모든 항공기의 정확한 위치 (고도 포함), 속도, 방향, 목적지는 실시간으로 추적되어야 합니다. 심한 날씨의 변화로 인한 전체 일정의 재조정과 같은 지속적으로 변화하는 환경에서 공항이 정체되지 않도록 비행 일정을 관리해야 합니다.

이와는 반대로 예상치 못한 복잡성은 우리가 감지하는 것으로부터 발생하기 때문에 본질적인 복잡성을 줄이도록 해야 합니다. 오늘날 사용되는 기존 항공 교통 통제 시스템이 예상치 못한 복잡성의 그 예입니다. 이 시스템은 수천 대의 비행기에 대한 교통을 통제하는 본질적인 복잡성을 처리하도록 설계되었지만, 해결책 그 자체는 고유의 복잡성을 유발시킵니다. 사실, 오늘날 사용되는 항공 교통 통제 시스템은 너무 복잡해서 불가능한 것은 아니지만 이를 변경하는 것은 어렵다고 판명되었습니다. 세계 많은 곳의 항공 교통 체계는 30년 이전 보다 더 오래된 기술로 만들어졌습니다.

많은 프레임워크와 업체 “솔루션”들이 예상치 못한 복잡성에 대한 병폐의 징후들입니다. 특별한 문제를 해결하는 프레임워크는 유용합니다. 그렇지만, 과한 기술이 가미된 프레임워크는 복잡성을 줄이기보다 이를 더 증가시킵니다.

개발자들은 불길로 날아드는 나방과 같이 복잡성으로 빠져듭니다. 실제로 빈번히 이와 같은 결과가 나타나기도 합니다. 퍼즐을 푸는 것은 재미있는 일이며, 개발자들은 문제를 해결하는 사람들입니다.

매우 복잡한 문제 해결에 뛰어드는 것을 좋아하지 않는 사람이 어디 있겠습니까? 하지만, 대규모 소프트웨어에서 본질적인 복잡성은 해결하지 않으면서 예상치 못한 복잡성을 없애는 것은 모험입니다.

그럼 어떻게 해야 될까요? 상아탑에서 가지고 온 프레임워크보다 실행되는 코드로부터 만들어진 프레임워크를 선호하십시오. 비즈니스 문제를 직접 처리하는 솔루션에서 여러분이 작성한 코드와 애플리케이션과 사용자 간의 영역을 단지 서비스하는 코드의 비율을 살펴보십시오. 업체 주도의 솔루션에 대해 신중한 시선을 가지십시오. 그러한 솔루션들은 본질적으로 나쁜 것은 아니지만, 업체들은 종종 예상치 못한 복잡성을 집어넣습니다. 솔루션이 문제에 적합한지를 확인하십시오.

아키텍트의 의무는 예상치 못한 복잡성을 만들어 내지 않고 본질적인 복잡성에 있는 문제를 해결하는 것입니다.

원문 : 모든 아키텍트가 알아야 하는 97가지 사실 - Simplify essential complexity; diminish accidential complexity

반응형