XP 함께읽기 HANG OUT 015 | 문제는 설계를 하느냐 마느냐가 아니라 언제 설계를 하느냐다.

728x90

 

- 설계란 상생 관계를 가진 요소들의 시스템
→ 설계란, 시스템을 이루는 각각의 요소들이 단독으로 존재하지 않고 서로 관계를 맺으며 상호작용함으로써, 이 관계가 각 요소를 강화하여 홀로 있을 때보다 더 큰 힘을 발휘하게 하고, 시스템 전체를 개별 요소들로만 이해하는 것을 넘어서는 복잡하고 유기적인 구조로 만들어주는 과정을 포함하는 것.
→ 설계란, 상호 강화 관계를 맺는 요소들이 모여 개별 이해를 넘어서는 시스템을 만드는 것이다.
- 딱 피드백을 얻을 정도만 설계하고, 얻은 피드백을 이용해서 그 다음 피드백을 얻을 정도까지만 설계를 개선하기 위해서는 좋은 솜씨가 필요하다.
- 문제는 설계를 하느냐 마느냐가 아니라 언제 설계를 하느냐다.
- 설계 품질이 성공을 보장하지는 않지만, 설계 실패는 분명히 실패를 보장한다.
- 설계 개선을 어떻게 진행해야 할지 생각해 내는 것도 점진적 설계의 일부다.
- 그 설계를 가지고 일할 사람들이 이해하지 못한다면, 그들에게는 단순하지 않은 설계다.

---

저자는 설계를 단순히 기능적인 측면에서 바라보는 것을 넘어, 시스템을 이루는 요소들이 상호작용하여 더 강력한 힘을 발휘하고, 이를 통해 시스템 전체가 더욱 유기적이고 복잡해지는 과정을 강조하고 있다. '설계란 상생 관계를 가진 요소들의 시스템'이라는 정의는 설계의 본질을 잘 설명해준다고 생각 했다. 설계의 각 요소들이 독립적으로 존재하는 것이 아니라, 서로 관계를 맺음으로써 더 큰 가치를 창출한다는 점을 의미 한다.

또한, '딱 피드백을 얻을 정도만 설계하고, 얻은 피드백을 이용해서 그 다음 피드백을 얻을 정도까지만 설계를 개선하기 위해서는 좋은 솜씨가 필요하다'는 말은 설계의 유연성과 중요성을 잘 설명하고 있다. 그리고 TDD 를 접한 이후부터 꾸준히 느끼고 있는 '군더더기 없음'을 다시 한 번 상기 했다. 피드백을 통해 지속적으로 설계를 개선하는 점진적 설계의 필요성을 강조한 부분은 이론적으로 알겠지만 실천하기에는 쉽지 않겠다고 생각 했다.

특히, '문제는 설계를 하느냐 마느냐가 아니라 언제 설계를 하느냐다'라는 문장은 설계의 타이밍이 얼마나 중요한지를 다시 한 번 생각하게 했다. 대학생 때 교수님이 하신 말씀이 생각 났다. '지금은 이해하지 못할 수 있겠지만, 업계를 떠나지 않는 한 반드시 이해하는 순간이 오니 걱정하지 마라. 단, 중요한 것은 그게 시험보기 전이냐 후냐일 뿐이다.' 맥락과 거리가 있을 수 있지만, 설계를 한다는 것 (이해 한다는 것) 의 순간은 반드시 온다는 것을 전제로 함에서 유사하다고 느꼈다. 설계 품질이 성공을 보장하지는 않지만, 설계 실패는 명확히 실패를 보장한다는 점에서 설계의 중요성을 다시 한 번 생각할 수 있었다.

'설계 개선을 어떻게 진행해야 할지 생각해 내는 것도 점진적 설계의 일부다'라는 문장도 눈에 들어왔다. 설계 과정에서의 지속적인 개선과 피드백은 설계의 중요한 부분이며, 이는 결국 더 나은 소프트웨어를 만드는 데 필수적인 요소이다. 무엇인가를 본격적으로 시작하기에 앞서 예열하는 과정과 시간도 포함시키는 것은 작지 않은 의미를 가진다고 생각 했다.

마지막으로, '그 설계를 가지고 일할 사람들이 이해하지 못한다면, 그들에게는 단순하지 않은 설계다'라는 문장은 설계가 단순하고 명확해야 함을 강조 했다. 물론 단순함에도 정도가 있겠지만, 아무리 훌륭한 설계라도 사용자 (동료 개발자) 가 이해하지 못하는 설계라면, 아무리 좋은 퍼포먼스를 낸다고 한들 유지보수가 어렵겠다. 설계는 실제 사용자가 이해할 수 있는 수준에서 이루어져야 한다는 점을 생각해볼 수 있었다.

 

 

 

 

728x90