인용

From: 맨먼스 미신

만드는 데 여러 세기가 걸리는 것도 아닌 프로그래밍 시스템에서는 대부분 대성당보다 훨씬 심각한 개념적 불일치가 발견된다. 이것은 대개 설계 책임자들이 대를 이어가는 경우보다도 여러 명이 설계 작업을 나눈 경우에 생긴다.

나는 개념적 일관성이야말로 시스템 설계에서 가장 중요하게 고려할 사항이라 주장하고자 한다. 좋기는 하지만 연관성 없고 조율도 안된 기능을 많이 넣기보다는, 이례적인 일부 기능이나 개선 사항을 빼더라도 일련의 설계 사상을 고수하는 편이 낫다.

– 4장. 41쪽.

아무리 훌륭한 기능이나 아이디어라 해도 시스템의 기본 개념에 들어맞지 않는다면 배제하는 것이 상책이다. 이처럼 중요하지만 어울리지 않는 개념이 다수 발견된다면, 전체 설계를 폐기하고 기본 개념을 달리해서 새로 시작하는 편이 낫다.

– 4장. 46쪽.

개념적 일관성을 갖춘 시스템에는 단일한 철학이 반영되어 있어야 하고, 사용자가 접하게 될 명세는 소수의 머릿속에서 나와야 한다. 전체 작업이 아키텍처, 구현, 제품화로 분업화된다고 해서 그 시스템 구축에 더 많은 시간이 걸리는 것은 아니다. 실제 경험에서는 오히려 그와 반대이며, 전체 시스템이 함께 속도가 붙고 테스트에도 더 적은 시간이 드는 것으로 나타났다. 사실상, 폭넓게 수평적으로 나뉜 일이 수직적 분업에 의해 대폭 줄어든 셈이고, 그 결과는 극단적으로 단순화 된 커뮤니케이션과 향상된 개념적 일관성으로 나타난다.

– 4장. 50쪽.

From: 디자인 오브 디자인

프레드 브룩스는 "디자인 오브 디자인"에서 "팀 설계에서 개념적 무결성을 어떻게 확보할 것인가?"라는 화두를 던진다.

규모가 매우 크거나 기술적으로 복잡하거나 너무 긴급해서 여러 설계자의 노력이 필요한 제품이라 할지라도, 마치 한 명이 설계한 것처럼 일관된 개념을 가져야 한다. 그러한 일관성이 단일 설계자일 때는 자연스러운 것인 데 반해, 협업 설계에서 그런 일관성을 확보하는 것은 엄청난 주의가 필요하다. 어떻게 하면 한 팀의 설계 역량을 조직화하여 개념적 무결성을 확보할 수 있을까?

– 6장. 84쪽.

위의 질문에 대해 프레드 브룩스는 "한 명의 시스템 아키텍트에게 전권을 부여하는 것"을 언급한 다음, "두 명의 팀이 이상적이다"라는 이야기를 한다.

전술한 설계 협업에 대한 논의에서는 두 명보다 많은 팀원으로 이루어진 팀에 대해 다루었다. 두 명의 팀은 특별한 경우이다. 개념적 무결성에 가장 위협적인 개념적 디자인 단계에서조차도 일심동체로 일할 수 있는 두 명의 설계자라면 단독 설계자보다 더 효과적일 수 있다. 페어(pair) 프로그래밍에 대한 문헌을 보면 상세 설계 과정에서는 이러한 것이 사실임을 알 수 있다. 보통, 초기의 생산성은 두 사람이 따로 일하는 것보다 떨어지지만, 에러 비율은 극적으로 감소한다. 많은 설계에서 40% 정도는 재작업으로 인한 것이기 때문에 순수한 생산성도 더 높고 제품은 훨씬 견고해진다.

– 6장. 97쪽.

From: 뷰티풀 아키텍처

프레드 브룩스는 개념적 통합이 아키텍처의 가장 중요한 속성이라고 말했다. '독립적이며, 비협동적인 아이디어를 포함하는 훌륭한 시스템보다는 하나의 디자인 아이디어가 반영된 시스템을 갖추는 것이 더 좋다'고 이야기했다(1995). 시스템의 한 부분을 알고 있는 개발자가 다른 부분도 빠르게 이해할 수 있도록 해주는 것이 바로 개념적 통합이다. 개념적 통합은 배치 기준, 디자인 패턴의 애플리케이션, 데이터 형식과 같은 것의 표준에서 나온다. 이는 개발자가 시스템의 어느 한 부분에서 일하며 얻은 경험을 시스템의 다른 부분의 개발과 유지보수에 쉽게 적용할 수 있도록 해주는 것으로, 동일한 규칙이 시스템 전반적으로 적용되는 것을 의미한다. 이를 위해 시스템, 서브 시스템, 시스템을 통합하는 아키텍처 전반에 걸쳐 개념적 통합은 반드시 유지되어야만 한다. 예를 들어 발행 구독・메시지 버스publish/subscribe message bus 같은 아키텍처 스타일을 선택하고, 모든 시스템의 통합에 이 스타일을 동일하게 적용하는 것이다.

아키텍처 팀의 도전 과제는 아키텍처를 제작하면서 하나의 생각과 철학을 일관되게 유지하는 것이다. 팀의 규모는 가능한 작게 유지하고, 잦은 의사 소통과 높은 협동심이 있는 환경에서 일을 하며, 하나 또는 둘의 '장chief'을 두어 모든 사안에 대한 최종 결정권을 가지는 선의의 독재자로서 역할을 하게 하라. 이러한 조직적 운영은 일반 기업 뿐만 아니라 오픈소스분야의 성공한 시스템에서는 일반적인 조직의 형태이며, 아름다운 아키텍처의 속성 중 하나인 개념적 통합이라는 결과를 만들어내는 데 중요하다.

– 1장. 16쪽.

참고문헌

  • 디자인 오브 디자인 / 프레더릭 브룩스 저/조인중 역 / 제이펍 / 초판 1쇄 발행 2017년 11월 09일 / 원제 : The Design of Design: Essays from a Computer Scientist
  • 맨먼스 미신 / 프레더릭 브룩스 저 / 강중빈 역 / 인사이트(insight) / 초판 1쇄 발행 2015년 03월 23일 / 원제: The Mythical Man-Month: Essays on Software Engineering
  • 뷰티풀 아키텍처 / 디오미디스 스피넬리스 저 / 지오지아스 고시아스 편 / 지앤선(志&嬋) / 발행 2010년 03월 08일 / 원제: Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design