Skip to content

Latest commit

 

History

History

zhoon

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

1장. 설계와 아키텍처란?

introduction

  • 설계 (design) 과 아키텍처 (architecture) 의 차이는 무엇인가?
    • 둘 사이에는 차이가 없다. 아무런 차이가 없다.
  • 이 책의 목적 중 하나는 설계와 아키텍처가 무엇인지 완전하게 정의하는 것
  • 소프트웨어에서 저수준의 세부사항과 고수준의 구조 모두 소프트웨어 전체 설계의 구성요소
    • 이 둘은 단절 없이 이어진 직물과 같으며, 이를 통해 대상 시스템의 구조를 정의
    • 개별로는 존재할 수 없고, 실제로 이 둘을 구분 짓는 경계는 뚜렷하지 않음
    • 고수준에서 저수준으로 향하는 의사결정의 연속성만이 있을 뿐

목표는?

소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.

  • 설계 품질을 재는 척도는 고객의 요구를 만족시키는 데 드는 비용을 재는 척도와 다름 없음
    • 이 비용이 낮을 뿐만 아니라 시스템의 수명이 다할 때까지 낮게 유지할 수 있다면 좋은 설계라고 말할 수 있음
  • 새로운 기능을 출시할 때마다 비용이 증가한다면 나쁜 설계
  • 좋은 설계란 이처럼 단순명료

사례 연구

  • 매번 새로운 기능을 출시할 때마다 개발자의 수는 지속적으로 증가했지만, 코드 생산성은 수렴하는 것처럼 보이는 현상은 명백히 잘못되었다.
  • 코드 라인당 비용이 증가 추세하는 것도 오래갈 수 없는 추세이다.
  • 이러한 비용 곡선은 사업 모델의 수익을 엄청나게 고갈시키며, 회사의 성장을 멈추게 하거나 심지어는 완전히 망하게 만든다.

엉망진창이 되어 가는 신호

  • 시스템을 급하게 만들거나, 결과물의 총량을 순전히 프로그래머 수만으로 결정하거나, 코드와 설계의 구조를 깔끔하게 만들려는 생각을 전혀 하지 않으면, 파국으로 치닫는 이 비용 곡선에 올라타게 된다.
  • 개발자가 초인적인 노력을 기울이고, 잔업을 하며, 헌심한에도 불구하고 더 이상 진척이 없는 상황에 처하게 된다.
  • 개발자의 노력은 기능 개발보다는 엉망이 된 상황에 대처하는 데 소모되기 시작
  • 개발자들이 쏟은 노력의 가치가 결국 보잘 것 없게 된다.

경영자의 시각

  • 출시별 월 인건비를 보게 된다면, 어떤 식으로 보든 우려의 대상임에는 틀림없다.

무엇이 잘못되었나?

  • 개발자들은 “코드는 나중에 정리하면 돼. 당장은 시장에 출시하는 게 먼저야!” 라는 흔해 빠진 거짓말에 속는다.
    • 이렇게 속아 넘어간 개발자라면 나중에 코드를 정리하는 경우는 한 번도 없는데, 시장의 압박은 절대로 수그러들지 않기 때문이다.
    • ‘시장의 출시가 먼저’라는 생각을 하는 이유는 바로 뒤에 여러 무리의 경쟁자가 뒤쫓고 있고, 경쟁자보다 앞서 가려면 가능한 한 빠르게 달려야 하기 때문
    • 결국 개발자는 절대로 태세를 전환하지 않음
    • 개발자도 생산성을 유지할 수 있다고 자신의 능력을 과신함
  • 개발자가 속는 더 잘못된 거짓말은 “지저분한 코드를 작성하면 단기간에는 빠르게 갈 수 있고, 장기적으로 볼 때만 생산성이 낮아진다”는 견해
  • 엉망으로 만들면 깔끔하게 유지할 때보다 항상 더 느리다.
    • 시간 척도를 어떻게 보든지 관계없이 말이다.

빨리 가는 유일한 방법은 제대로 가는 것이다.

  • 개발자는 처음부터 다시 시작하여 전체 시스템을 재설계하는 것이 해답이라고 생각할지도 모른다.
    • 현실은 장밋빛 기대와는 거리가 멀다.

자신을 과신한다면 재설계하더라도 원래의 프로젝트와 똑같이 엉망으로 내몰린다.

결론

  • 어떤 경우라도 개발 조직이 할 수 있는 최고의 선택지는
    • 조직에 스며든 과신을 인지하여 방지하고,
    • 소프트웨어 아키텍처의 품질을 심각하게 고민하기 시작하는 것
  • 소프트웨어 아키텍처를 심각하게 고려할 수 있으려면 좋은 소프트웨어 아키텍처가 무엇인지 이해해야 함
    • 비용은 최소화하고 생산성은 최대화할 수 있는 설계와 아키텍처를 가진 시스템을 만들려면, 이러한 결과로 이끌어 줄 시스템 아키텍처가 지닌 속성을 알고 있어야 한다.