노트

구조와 동작, 옵션의 가치

Structure, Behavior, and Optionality

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

쉽게 말하면

구조와 동작은 '오늘 할 수 있는 일'과 '내일 새로 할 수 있게 될 일'을 나눠 보는 틀이에요. 코드 정리는 당장 기능을 늘리진 않지만, 다음 변경을 싸게 할 선택권을 미리 사 두는 셈이에요.

비유가 깨지는 곳 선택권이 늘 이기는 건 아니에요. 오늘의 돈이 내일의 돈보다 귀하다는 현금흐름할인이 반대로 당기니, 정리 후 변경 비용이 정리 없는 변경보다 작을 때 먼저 정리해요.

켄트 벡이 정리 시점을 판단하려고 꺼내는 경제학 틀. 소프트웨어는 두 가지 가치를 만든다. 오늘 하는 일(동작)과, 내일 새로 할 수 있게 되는 일(옵션)이다. 구조는 동작을 바꾸지 않지만 옵션을 만든다.

두 원리가 부딪친다

  • 현금흐름할인(Discounted Cash Flow): 오늘의 1달러가 내일의 1달러보다 가치 있다. 먼저 벌고 나중에 쓰라. 정리는 미루고 동작 변경부터 하라는 쪽으로 기운다
  • 옵션(Options): 불확실할수록 "무엇을 살 권리"가 그 물건보다 값지다. 오늘의 설계는 내일의 동작 변경을 살 수 있는 옵션의 프리미엄이다. 정리를 먼저 하라는 쪽으로 기운다
  • 판단 기준: 정리 후 변경의 비용이 정리 없이 변경하는 비용보다 작으면 망설이지 말고 먼저 정리한다. 그렇지 않을 때가 고민할 지점이다

옵션을 줄이는 요인으로는 핵심 인력의 이탈, 고객과의 거리, 높은 변경 비용이 있다. 정리가 손댈 수 있는 것은 마지막 하나다.

가역성(Reversibility)

구조 변경은 대체로 되돌릴 수 있고, 동작 변경은 (배포되고 나면) 되돌리기 어렵거나 비싸다. 되돌릴 수 있는 결정은 가볍게 내리고 되돌릴 수 없는 결정은 신중하게 다룬다. 큰 설계 변경을 되돌릴 수 있는 작은 정리의 연속으로 바꾸는 것이 요령이다(병렬 수정 (팽창-수축)).

로드맵이 기능 목록으로만 채워지는 이유도 여기 있다. 동작은 눈에 보이고 구조는 보이지 않는다. 구조 변경 비용의 대부분은 결합도에서 온다. 비유가 비슷한 개념으로 기술 부채가 있다.

출처: 『켄트 벡의 Tidy First?』 켄트 벡 (원서 Tidy First?)

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 심플 디자인

    켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.

  • 섣부른 최적화

    "섣부른 최적화는 모든 악의 근원이다." 도널드 크누스(Donald Knuth)가 1974년 글 「Structured Programming with go to Statements」에서 쓴 말이다. 원문의 맥락은 작은 효율은 대부분(약 97%)의 경우 잊으라는 것이고, 정말 중요한 3%는 놓치지 말라는 말이 이어진다.

  • 최종 일관성

    최종 일관성(eventual consistency)은 "지금 당장은 저장소마다 값이 다를 수 있지만, 새 변경이 멈추면 결국 같아진다"는 보장이다. 원본 DB와 검색 색인·캐시·다른 서비스처럼 물리적으로 분리된 저장소를 한 트랜잭션으로 묶을 수 없을 때 받아들이는 일관성 모델(consistency model)이다.

  • 소프트웨어 공학의 법칙들

    소프트웨어 시스템과 팀, 의사결정에 반복해서 나타나는 경험칙들을 모아 부르는 말. 법칙이라고 부르지만 대부분 증명된 정리가 아니라 관찰과 격언이다. 판단할 때 떠올릴 이름표로 쓴다. 따로 노트를 둔 것은 링크로, 나머지는 한 줄로 적었다.

  • 리팩터링

    겉으로 보이는 동작은 그대로 둔 채, 코드를 이해하고 고치기 쉽게 내부 구조를 바꾸는 일. 기능을 더하는 일이 아니라 다음 변경을 덜 위험하게 만드는 정리다.

보기 옵션