본문 바로가기

카테고리 없음

애자일 개발의 기술 2/e - 디자인

디자인

시간이 지남에 따라 코드 변경 비용은 증가한다.

애자일이 당면한 문제가 바로 이것이다. 시간이 지날수록 변경 비용이 많이 든다면 가능한 비용이 저렴할 때 많은 걸 결정해야 한다. 애자일이 작동하려면 비용이 상대적으로 일정하게 유지되거나 시간이 지남에 따라 감소해야 한다. 이것이 기술적 전제조건이다.

XP는 선제적으로 변경 비용을 줄이는 프랙티스를 포함한다. 이를 '진화적 디자인(evolutionary design)'이라고 한다. 이는 시간이 지남에 따라 디자인이 꾸준히 개선되므로 소프트웨어를 더 쉽게 변경할 수 있다.

점진적 디자인

개발자는 계획이 변경되면 작업이 낭비될 수 있는 디자인보단 스토리를 구현하여 고객에게 가치를 전달해야 한다. 이것은 위험해 보이지만 점진적 디자인을 활용하면 디자인을 조금씩 개선하면서 스토리를 전달할 수 있다.

방법: 처음에는 문제를 해결할 수 있는 코드를 구현하라. 그 다음 작업 시에는 이를 일반화하고 이를 반복한다.

리스크 주도 아키텍처

아키텍처는 너무 중요하기 때문에 미리 디자인해야만 하는 것처럼 보일 수 있다. 하지만 아키텍처는 너무 중요하기 때문에 가능한 나중에, 가장 중요한 정보를 얻고 최고의 의사 결정을 내릴 수 있을 때 디자인돼야 한다.

예를들어, 국제화 작업은 나중에 하려면 비용이 많이 드는 것을 알고 있을 것이다. 하지만, 국제화 스토리가 생성되기 전까지 작업을 하지 마라. 다만, 슬랙을 통해 중복을 제거하는 클래스를 만들어두는 것 정도는 유의미하다.

단순한 디자인

완벽함은 더 이상 더할 것이 없을 때가 아니라 더 이상 뺄 것이 없을 때 달성된다.

변경을 기대하거나 훅, 플러그인 지점의 확장을 제공하는 대신, 가능한 작고 깨끗함을 기대하는 단순한 디자인을 만들어라. 단순함(simple)은 단순성(simplistic)을 의미하지 않는다. 코드 라인을 줄인다는 명목으로 이상한 디자인을 하지 마라. 스스로에게 "내가 이 결정을 변경할 때 얼마나 힘들 것인가?"를 생각하라.

  • YAGNI (You ain't gonna need it)
  • Once and only once
  • DRY (Don't repeat yourself)

서드 파티 컴포넌트는 인터페이스를 이용하라. 서드 파티 변경에 자유롭고 필요에 따라 피처를 추가해 확장할 수 있다.

반영적 디자인

애자일 팀은 미래를 기대하지 않는 단순한 디자인을 만든다. 보통 Open-Closed Principle을 준수한다. 하지만, 애자일 팀은 엔티티가 확장이 아니라 변경될 수 있게 디자인된다는 것이다.

반영적 디자인은 예측적 디자인이라고 부르는 전통적 디자인과 대비된다. 반영적 디자인은 지금 이 순간 변경하는 것에만 관심을 둔다. 이를 통해 기존 기능 컨텍스트 안에서 기존 코드를 분석하고, 여러분이 현재 작업하는 것을 더 잘 지원할 수 있도록 코드를 개선할 방법을 찾는다.