Skip to main content

12. 대규모 시스템의 설계와 개선

  • 코드베이스의 인지 차원(cognitive dimensions of codebase, CDCB)이라는 수정된 프레임워크를 사용하여 기존 코드베이스의 설계를 개선하는 방법에 대해 이야기합니다.

12.1 코드베이스의 특성 조사#

12.1.1 인지적 차원#

  • CDCB는 수정을 하지 않고 사용만 하는 라이브러리와 프레임워크의 코드에 특히 유용합니다.

오류 경향성#

  • 일부 프로그래밍 언어에서는 다른 언어보다 실수가 쉽습니다. 이를 오류 경향성이라 부릅니다.
  • 강한 타입 언어는 이러한 오류가 적습니다.

일관성#

  • 일관성은 비슷한 것들은 얼마나 유사한지, 항상 동일한 방식으로 만들어지는지.
  • 이름과 규약을 일관성 없이 사용하는 프레임워크나 언어는 인지 부하를 더 많이 가져올 수 있습니다.

분산성#

  • 메서드가 너무 무거워지면 프로그래머의 잘못입니다.
  • 분산성은 프로그래밍 구성 요소가 얼마나 많은 공간을 차지하는지 나타냅니다.

숨겨진 의존성#

  • 숨겨진 의존성 차원은 의존 항목이 사용자에게 어느 정도로 가시적으로 나타나는지를 보여줍니다.
  • 코드 작성자는 보다 광범위한 문서로 숨겨진 의존성을 보완할 수 있습니다.

잠정성#

  • 잠정성 차원은 도구를 사용하는 동안 생각하는 것이 얼마나 쉬운지에 대한 것입니다.

점도#

  • 점도는 특정 시스템을 변경하는 것이 얼마나 어려운가에 대한 차원입니다.
  • 시스템이 변경하기 쉬운지는 프로그래밍 언어와 코드베이스 자체에 달려 있을 뿐만 아니라 코드베이스를 둘러싼 요인도 영향을 미칩니다.

점진적 평가#

  • 점진적 평가 역시 잠정성과 관련이 있습니다.
  • 점진적 평가 차원이 낮은 시스템에서는 완료되거나 완벽하지 않은 코드를 실행할 수 없으므로 잠정성을 억제합니다.

역할 표현력#

  • 역할 표현력의 차원은 프로그램에서 여러 가지 다른 부분의 역할을 얼마나 실행할 수 있는지를 나타냅니다.
  • 구분 강조, 문법 등이 역할 표현력입니다.

매핑 근접성#

  • 매핑 근접성 차원은 프로그래밍 언어 또는 코드가 문제의 해결 영역에 얼마나 가까운지를 의미합니다.
  • 개발 분야에서는 도메인을 코드에 더 잘 통합하는 것에 대한 관심이 있으며, 도메인 주도 설계 철학과 같습니다.

힘든 정신 활동#

  • 어떤 시스템에서는 사용자가 시스템의 외부에서 힘든 정신 활동을 수행할 때 생각하는 것이 어려울 수 있습니다.
  • 어떤 연산들은 작업 기억 공간에 부담을 주기 때문에 힘든 일이 될 수도 있습니다.

보조 표기법#

  • 보조 표기법 차원은 프로그래머가 공식 규격에는 없는 의미를 코드에 추가할 가능성을 나타냅니다.

추상화#

  • 추상화 차원은 시스템의 사용자가 기본적으로 제공되는 추상화만큼 강력한 추상화를 만들 수 있는 여부입니다.

가시성#

  • 가시성은 시스템의 다른 부분을 얼마나 쉽게 볼 수 있는지를 나타냅니다.

12.1.2 코드베이스 개선을 위해 CDCB 사용#

  • 이러한 다양한 차원의 차이는 사람들이 코드베이스와 상호작용하는 방식에 큰 영향을 미칩니다.
  • 코드베이스가 여러 다양한 차원에서 어떻게 작동하는지 파악하는 것이 중요합니다.

12.1.3 설계 기동 및 트레이드오프#

  • 특정 차원을 개선하기 위해 코드베이스를 변경하는 것을 설계 기동이라고 합니다.
  • 설계 기동으로 인해 다른 차원이 변경되는 경우가 많습니다.

오류 경향성 vs 점도#

  • 시스템의 모든 항목에 대해 타입을 추가하는 것은 사용자에게 추가 작업의 부담을 줍니다.

점징성 및 점진적 평가 vs 오류 경향성#

  • 잠정성과 점진적 평가가 높은 시스템에서 높은 시스템에서는 미완성되거나 불완전한 코드라도 스케치하고 실행할 수 있습니다. 다만 이는 오류 경향성에 영향을 미칠 수 있습니다.

역할 표현력 vs 분산성#

  • 명명된 매개변수 같은 문법 요소를 추가하면 역할 표현력이 개선될 수 있습니다.

12.2 차원 및 활동#

12.2.1 차원이 활동에 미치는 영향#

검색#

  • 검색할 때 일부 차원은 중요한 역할을 합니다.
  • 분산성은 코드를 더 길게 만들고, 검색할 코드가 더 많기 대문에 검색에 부정적인 영향을 줍니다.
  • 보조 표기법은 검색에 도움을 줍니다.

이해#

  • 역할 표현력은 이해에 도움이 됩니다.

전사#

  • 전사할 때(즉, 미리 정의된 계획을 기반으로 기능을 구현할 때) 일관성 같은 일부 차원이 나빠질 수 있습니다.

증가#

  • 코드베이스에 새 기능을 추가할 때 가장 도움이 되는 것은 도메인에 대한 매핑 근접성입니다.

탐구#

  • 새로운 설계 아이디어를 탐구할 대 가장 도움이 되는 차원은 잠정성과 점진적 평가입니다.
차원돕는 활동악영향을 미치는 활동
오류 경향성증가
일관성검색, 이해전사
분산성검색
숨겨진 의존성검색
잠정성탐구
점도전사, 증가
점진적 평가탐구
역할 표현력이해
매핑 근접성증가
힘든 정신 활동전사, 증가, 탐구
보조 표기법검색
추상화이해탐구
가시성이해

12.2.2 예상 활동에 대한 코드베이스 최적화#

  • 여러 다른 활동이 시스템에 서로 다른 제약을 가합니다.

요약#

  • CDN은 프로그래밍 언어의 사용자들에게 미칠 인지적 영향을 예측하는 데 도움이 되는 프레임워크입니다.
  • CDCB는 코드베이스, 라이브러리, 프레임워크가 사용자에게 미치는 영향을 이해하는 데 도움이 되는 CDN의 확장판입니다.
  • 대부분의 경우 서로 다른 차원 간의 트레이드오프가 이루어져야 합니다. 한 차원을 개선하면 다른 차원이 감소할 수 있습니다.
  • 설계 기동을 통해 프레임워크의 인지 차원에 따라 기존 코드베이스의 설계를 개선하는 것이 이뤄질 수 있습니다.
  • 코드베이스가 최적화할 대상인 차원에 대한 요구 사항은 수행하려는 활동에 따라 다릅니다.
Last updated on