Server System/Software Architecture

좋은 소프트웨어란 (1)

알파해커 테크노트 2024. 6. 12. 22:30
반응형
  • 기능 > 구조?
  • 기능 < 구조?

소프트웨어 아키텍쳐란 무엇이며, 우리가 왜 이것에 대한 고민을 해야할까. 소프트웨어를 작성하는데 있어서 구성 요소를 크게 나누자면, 기능과 구조가 있다고 볼 수 있다. 소프트웨어 아키텍쳐란, 이 중 “구조”에 해당하는 이야기이다.

 

소프트웨어를 작성할 때 요구사항을 만족시키기 위한 “기능”을 구현하는 것이 중요할까, 소프트웨어의 “구조”를 잘 설계하는 것이 중요할까. 책 ‘리팩토링’의 저자이자 세계적인 소프트웨어 공학자인 마틴 파울러는 결국은 구조가 중요하다는 이야기를 한적이 있다.

 

https://youtu.be/4E1BHTvhB7Y

 

 

 

사용자에게 제공하고자 하는 기능을 구현하는 것(즉, 소프트웨어 개발의 요구사항을 만족하는 것)은 당연히 중요한 일이다. 그러나 지속 가능한 서비스라면, 한번의 기능 개발로 끝나지는 않을 것이다. 최초의 기능 개발 이후, 새로운 요구 사항이 들어오고, 그에 따라 기능이 추가되거나 수정하는 과정을 반복하게 될 것이다.

 

그런데 만약에 구조가 그야말로 엉망인 코드의 수정은 어떨까?

 

한번쯤 소프트웨어 개발을 해본 사람이라면, 구조가 좋지 않은 코드를 수정하는 일이 얼마나 힘든 것인지 알 것이다. 심지어는 본인이 작성한 코드임에도 불구하고 오랜만에 봤다면 그 구조를 스스로 다시 파악하는 것 조차 어렵다. 뿐만 아니라, 수정을 한 후에도 내가 수정한 부분으로 인해 코드의 다른 영역이 영향을 받지 않을까 걱정하게 될 것이다.

 

우리가 소프트웨어 개발팀에서 주로 하는 일이 뭔지 생각해보자.

  • 유지 보수 → 기능 추가 / 버그 수정 / 성능 개선 → 코드 읽기 / 이해하기 / 수정 or 추가 하기

아마도 많은 경우 남의 코드 혹은 내가 작성한 코드를 읽고, 이해한 후 수정하고, 테스트 하는 일일 것이다.

 

출처: https://martinfowler.com/bliki/DesignStaminaHypothesis.html

 

그렇기 때문에 마틴 파울러는 좋은 구조의 코드는 시간이 지날수록 기능을 추가하는데 시간이 적게 소요되기 때문에 장기적으로 기능보다 구조가 더 중요할 수 있다고 말한다. 그리고 그것이 소프트웨어 개발을 통해 사업을 하는 입장에서 “경제적인” 관점으로 따져봤을 때도 더 이득이라고 본다.

 

특히 요즘같이 클라우드 환경에서 소프트웨어를 개발하는 경우라면 더더욱 클라우드에서 제공하는 인프라 서비스를 잘 활용하기 위해 소프트웨어의 구조가 강조될 수 있다.

 

 

 

(다음 편에서 계속...)

반응형