본문 바로가기
프로그래밍/클린 아키텍처

[클린아키텍처] 5부. 아키텍처

by 2KB 2021. 4. 18.

소프트웨어 아키텍처

소프트웨어 구조(software architecture)는 소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다.

 소프트웨어 아키텍처란 시스템이 구축되는 형태이다.

이러한 형태는 시스템이 컴포넌트로 분할되는 것, 분할된 컴포넌트들이 배치하는 방법, 컴포넌트끼리의 통신 방식에 따라 결정된다. 이러한 형태가 결정되면, 쉽게 개발, 배포, 운영, 유지보수가 되도록 만들어진다.

여기서, 아키텍처의 중요한 목적은 시스템의 생명주기를 지원하는 것이다.

좋은 아키텍처는 시스템을 쉽게 이해하고, 개발하며, 유지보수하고 배포하게 해준다.

결국 아키텍처의 궁극적인 목표는 유지보수비용은 최소화하고, 프로그래머의 생산성은 최대화 하는데 의의가 있다.

 

개발

 시스템 아키텍처는 개발팀이 시스템을 쉽게 개발할 수 있도록 뒷받침해야만 한다.

보통 소규모팀들은 이러한 아키텍처를 고려하지 않고, 모노리틱한 시스템을 개발할 확률이 높다.

왜냐면, 아키텍처 관련 제약들이 개발에 있어 오히려 방해가 된다고 느낄 가능성이 높기 때문이다.

 

배포

 소프트웨어 시스템이 사용도리 수 있으려면 반드시 배포할 수 있어야 한다.

소프트웨어 아키텍처는 시스템을 단 한번에 쉽게 배포할 수 있도록 만드는데 그 목표를 두어야 한다.

 개발 초기에 "마이크로 서비스 아키텍처 (MSA)" 를 사용하기로 결정했다고 하자.

 배포할 시기가 되면 이미 수많은 마이크로서비스들이 배포를 기다리고 있고, 마이크로 서비스들을 연결하기 위해 설정하고 작동 순서를 결정하는 과정에서 오작동이 발생활 여지가 생기게 된다.

 이러한 배포문제는 초기에 고려하고 결정을 내려야 시스템의 유용성이 높아진다.

운영

 운영에서 겪는 대다수의 어려움을 소프트웨어 아키텍처를 수정하지 않고, 단순히 하드웨어를 더 투입해서 해결할 수 있다.

 그렇더라도, 시스템을 운영할 때 소프트웨어 아키텍처가 중요한 것은 시스템을 운영하는데 필요한 요구를 알려준다는 것이다.

 아키텍처만으로도 개발자에게 시스템의 운영방식을 잘 드러낼 수 있기 때문에 시스템을 이해하기 쉬워지며, 개발과 유지보수에 큰 도움이 된다.

 

유지보수

유지보수는 소프트웨어 시스템에서 비용이 가장 많이 발생하는 부분이다.

새로운 기능은 계속 발생하고, 뒤따르는 결함은 모두 피할 수 없으며, 결함 수정을 위해 인적 리소스가 소모된다.

 하지만, 신중하게 아키텍처를 설계하면 이 비용을 크게 줄일 수 있다.

 시스템을 컴포넌트로 분리하고, 인터페이스를 통해 서로의 역할을 분리하고 격리 한다면,

 미래의 추가 기능에 대한 손쉬운 개발과, 의도치 않은 장애 발생의 위험성을 줄일 수 있게 되는 것이다.

 

결론


 모든 소프트웨어 시스템은 행위적 가치와 구조적 가치, 두 가지 가치를 가진다.

여기서 중요한것은 구조적 가치인데, 소프트웨어를 부드럽게(Soft)하게 만드는 것이 바로 이 구조적 가치이기 때문이다.

그리고 이러한 "구조적 가치"는 '정책'과 '세부사항'으로 분해할 수 있다.

정책은 '업무 규칙, 업무 절차'에 대한 구체화이고, 세부사항은 '입출력장치, 데이터베이스, 서버, 프레임워크' 등을 이야기한다.

 쉽게 말해서, '정책'은 고수준의 설계이고, '세부사항'은 저수준의 설계라고 볼 수 있다.

 새로운 시스템 개발에 있어서, 데이터베이스가 필요하다는 '정책'이 있다고 생각해보자.

 이러한 '정책'에 있어서, 어떤 데이터베이스를 사용할지에 대한 '세부사항'은 당장 결정할 필요가 없다.

즉, 고수준의 정책을 만들어 놓을 수 있다면, 이러한 세부사항에 대한 결정을 오랫동안 미루거나 연기할 수 있다.

또한 이러한 결정의 연기는 더 많은 정보를 토대로 제대로 된 결정을 내릴 수 있게 하는 시간을 만들어준다.