소프트웨어 아키텍처란 왜 중요할까?

Home

The importance of software architecture - Martin Fowler

목차

이 게시글은 마틴 파울러의 소프트웨어 아키텍처의 중요성이라는 발표를 보고 요약정리한 게시글입니다.


소프트웨어 아키텍처의 정의

코드란 매우 중요합니다. 전문가가 되려면 개발하는데 익숙한 사람이 되어야 합니다.

물론 아키텍처가 프로그래밍을 넘어서는 개념이라는 것이 오랫동안 지속되어 왔고, 아키텍트는 더 이상 프로그래밍을 하면 안 된다는 편견이 있습니다. 이것은 매우 잘못된 생각입니다.

그래서 이 아케텍처라는 것은 무엇일까요?

환경에서 시스템의 가장 높은 수준의 개념입니다. 소프트웨어 시스템의 아키텍처 (주어진 시점에서)는 중요한 구성 요소의 조직 또는 구조입니다. 인터페이스, 해당 구성 요소를 통해 상호 작용 연속적으로 더 작은 구성 요소와 인터페이스로 구성됩니다.

복잡하고 어려운 용어로, 혹은 포괄적으로 설명할 필요가 없습니다.

위의 인용문을 크게 2가지로 나누어 설명해볼 수 있습니다.


shared understanding

전문 개발자들은 시스템 디자인에 대한 지식을 공유합니다. 이것을 그림을 그리고 다이어그램을 그리고 문서를 작성하고 여러 가지 방법이 있지만, 이것은 단순히 지식 공유의 수단일 뿐입니다.

소프트웨어가 커지고 성장하면서 가장 중요한 것은 프로젝트 팀원 간 프로젝트에 대한 이해도가 잘 공유될 때입니다.

hard to change

아키텍처 디자인은 우선적으로 진행되어야 합니다. 올바른 결정은 더 빨리 내려지는 것을 원합니다. 한번 결정된 것은 변경하기 어렵기 때문입니다.

예를 들면 소프트웨어 언어와 같습니다.

그래서 What?

/assets/images/2021-03-06-Why/Untitled.png

엄청난 것이 아닙니다.

소프트웨어 시스템이나 아키텍처를 설계할 때 무엇이 중요한 핵심가치인지 생각할 것입니다.

팀장으로서도, 코드를 짤 때도 무엇이 핵심인지를 생각하며 구성합니다. 이런 결정은 다른 어떤 문제보다도 중요합니다.

그래서 소프트웨어 아키텍처가 무엇인지 정의한다면, `중요한 어떤 것`입니다.



소프트웨어 아키텍처가 중요한 이유

왜 우리는 소프트웨어 아키텍처에 관심을 가져야 할까요?

아래 예시를 보며 정리하겠습니다.

우리는 품질에 노력을 덜 들여야 한다. 그래야 다음 릴리즈에 더 많은 기능을 넣을 수 있으니까

우리는 품질이 낮더라도 수많은 기능 개선을 해왔습니다. 그래서 이런 과정에서 좌절감을 느끼게 되고, 이 문제에 대해 ‘소프트웨어 전문가로서 훌륭하게 일을 해야만 해’ 라고 말하곤 했습니다.

하지만 이런 장인과 경제와의 싸움에서 늘 이기는 것은 경제입니다.

이 논쟁의 문제점은 품질이란 내가 비용을 지불할 수 있는 어떤 것이라는 생각에 근거한 개념 때문입니다.

비싼 돈을 주고 차를 산다거나, 옷을 사거나 와 비슷합니다.

그러나 소프트웨어의 품질은 다릅니다.

중요한 점은 평가하는 사람이 외부의 사람들이라는 것입니다.

/assets/images/2021-03-06-Why/Untitled%201.png

그들은 품질을 볼 수가 없습니다. 소프트웨어가 좋은 아키텍처와 좋은 모듈화된 디자인을 가지고 있다 해도 그 모든 것은 눈에 보이지 않습니다.

그래서 소프트웨어에서의 품질은 2가지로 나누어집니다.

/assets/images/2021-03-06-Why/Untitled%202.png

External Quality, Internal Quality

만약 기능이 동일하지만 100달러 비싼 품질의 소프트웨어에서 내부 퀄리티가 더 좋은 소프트웨어가 100달러 비싸다면 그것을 구매할까요?

아마 내부 품질이 낮은 소프트웨어를 선택할 것입니다.

하지만 Internal Quality는 장기적인 관점에서 중요합니다.

아래는 소프트웨어 기능의 고도화 그래프입니다.

/assets/images/2021-03-06-Why/Untitled%203.png

좋지 않은 디자인을 가진 소프트웨어는 시간이 지날수록 기능을 추가하는데 매우 어려워집니다. 점점 더 지속적으로 어려워집니다.

좋은 디자인을 가진 소프트웨어는 기능을 추가하기 수월해집니다. 더욱 나아가 오히려 빨라집니다. 소프트웨어가 너무 잘 컴포넌트화 되어있고, 그저 해야 할 일은 어떻게 소프트웨어 기능을 변경할지 정하고 변경하는 것입니다.

이것이 소프트웨어 아키텍처가 중요한 이유입니다.

우리가 더 나은 내부 퀄리티를 가진 소프트웨어를 고른다면 추후엔 새로운 기능을 더 빠르게 많이 추가할 수 있게 됩니다. 물론 내부 퀄리티가 낮은 제품은 금방 개선 불가능하게 됩니다.

이런 케이스는 매우 흔하게 일어납니다. 이런 것은 우리의 시간을 계속해서 잡아먹습니다. 우리는 지속적으로 업데이트하기 위해, 내부를 리팩토링하고 CI/CD를 구축하는 등을 노력해야 합니다.

즉, 이것은 쉽게 기능을 추가하기 위해이며 결국 이것은 경제학적 관념에서 중요합니다.

이제 우리는 에 대하여 알게 되었습니다. 추후에는 어떻게 그것을 이룰 수 있는지 더욱 노력해야 합니다.