켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.
박영록의 강의는 이를 한 줄로 더 줄인다. 중복이 없으면서 구성요소가 최소인 코드.
알아차리기 어려운 중복
- 평행한 클래스 계층처럼 구조에 숨은 중복
- 여러 곳에 퍼지는 같은 if 조건 → 산탄총 수술과 뒤엉킨 변경, 조건부 로직을 다형성으로 바꾸기
- 엔티티·DTO(Data Transfer Object)·서비스에 같은 필드를 반복 나열하는 것
- 서버와 클라이언트가 같은 타입과 검증을 따로 정의하는 것. OpenAPI 같은 스키마 공유로 줄일 수 있다
일관성의 함정
"나중에 복잡해질 테니 미리 같은 구조로 나눠 두자"는 과도한 일관성은 구성요소를 늘린다. 깨지면 클릭 수·중복·버그 같은 실제 손해가 생기는 일관성만 중요하고, 중복을 잘 없애다 보면 그런 일관성은 저절로 따라온다.
단순한 설계를 방해하는 생각
- 품질을 높이려면 시간이 더 든다: 품질이 중요한 이유가 빨리 끝내기 위해서다. 리팩터링할 시간이 없는 게 아니라 리팩터링을 안 해서 시간이 없다
- 처음부터 제대로 해야 한다: 처음부터 완벽히 설계할 수는 없다. 고객도 써 봐야 원하는 걸 알고, 개발하는 동안 모두가 배운다(골의 법칙)
- 자동화는 좋은 것이다: 복잡한 것을 자동화하면 복잡함이 굳는다. 먼저 단순화하고 자동화한다
얼마나 철저히 지킬지는 숙련도에 따라 다르다. 초보는 규칙으로, 전문가는 직관으로 일한다는 드레퓌스 모델(Dreyfus Model)처럼, 아직 초보라면 극단적으로 지켜 볼 만하다(수파리). DRY 원칙, KISS 원칙, YAGNI가 같은 방향을 가리키고, 테스트가 첫 규칙인 이유는 테스트 주도 개발 (TDD)에 있다.
출처: 인프런 『심플 디자인』 박영록 · Martin Fowler: Beck Design Rules