노트

골의 법칙

Gall's Law

설계#architecture · 연결된 개념 7개

쉽게 말하면

골의 법칙은 잘 돌아가는 큰 시스템은 잘 돌아가던 작은 시스템이 자라서 된 거라는 말이에요. 아기가 기기도 전에 뛰지 못하듯, 처음부터 복잡하게 설계하면 검증 안 된 가정이 너무 많아 무너져요.

비유가 깨지는 곳 아기는 저절로 자라지만 시스템은 단순한 버전을 실제로 써 보며 배운 만큼 키워야 해요. 그래서 마이크로서비스도 모놀리스로 시작해 경계가 분명해지면 나누고, 규모도 병목이 보일 때 한 단계씩 늘려요.

동작하는 복잡한 시스템은 언제나 동작하던 단순한 시스템에서 진화한 것이라는 법칙. 처음부터 복잡하게 설계한 시스템은 동작하지 않고, 고쳐서 동작하게 만들 수도 없다는 경고가 뒤따른다. 존 골(John Gall)이 1975년 『Systemantics』에서 말했다.

  • 처음부터 복잡하게 설계하면 검증되지 않은 가정이 너무 많아 실패하기 쉽다
  • MVP(Minimum Viable Product)로 시작해 점진적으로 키우는 방식의 이론적 근거다
  • 마이크로서비스도 처음부터 쪼개기보다 모놀리스(Monolith)로 시작해 경계가 분명해지면 나누는 편이 안전하다(바운디드 컨텍스트)
  • 심플 디자인 강의의 "처음부터 제대로 할 수 없다"와 같은 이야기다. 고객도 써 봐야 원하는 걸 알고, 개발하는 동안 모두가 배운다

규모 확장도 같은 순서를 밟는다. 서버 한 대에서 시작해 병목이 보일 때마다 한 단계씩 늘린다(사용자 수에 따른 규모 확장). 기존 시스템을 통째로 다시 만드는 결정의 위험은 차세대와 고도화 참고.

출처: Laws of Software Engineering: Gall's Law

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 복잡성 보존의 법칙

    모든 애플리케이션에는 더 줄일 수 없는 고유한 복잡성이 있고, 그 복잡성은 없앨 수 없으며 옮길 수만 있다는 법칙. 래리 테슬러(Larry Tesler)가 초기 GUI(Graphical User Interface) 작업 중에 정리했다.

  • 콘웨이의 법칙

    조직은 자신의 의사소통 구조를 그대로 닮은 시스템을 설계한다는 법칙. 멜빈 콘웨이(Melvin Conway)가 1968년에 관찰했다. 팀이 셋이면 시스템도 큰 덩어리 셋으로 나뉘는 경향이 있다.

  • 집단 코드 소유

    코드의 주인을 개인으로 두지 않고 팀 전체가 코드베이스 전체를 소유해, 누구나 필요한 곳을 고칠 수 있게 하는 XP 실천법.

  • SOLID 원칙

    객체지향 설계를 위한 다섯 가지 원칙의 머리글자. 로버트 C. 마틴(Robert C. Martin)이 정리했고 마이클 페더스(Michael Feathers)가 SOLID라는 약어를 붙였다.

  • 『UX/UI의 10가지 심리학 법칙』

    존 야블론스키가 사용자 경험(User Experience, UX) 디자인에 자주 쓰이는 심리학 원리를 정리한 책. 법칙마다 기원, 핵심 내용, 실제 사례를 짧게 다루고, 마지막 장에서 이 원리들이 사람을 조종하는 데 쓰일 수 있다는 윤리 문제를 짚는다. 같은 내용을 저자의 사이트 lawsofux.com에서도 볼 수 있다.

보기 옵션