Devxplorer – 세상을 분석하는 개발자의 탐험기

IT, 경제, 인물, 건강 – All Explored

Devxplorere 자세히보기

IT (IT)🤖🧠/Software Architecture

Architecture Driver 와 Quality Attribute (ISO 9126) 의 관계

데브엑스플로러 2024. 3. 11. 22:49
728x90
반응형

Architecture Driver 는 설계가 필요하게 된 원인이다. 즉 Architecture 적으로 풀어야 하는 문제(요구사항)이다. 설계 프로세스에서 중요한 역할을 하는 요소나 요구 사항을 가리키는 용어이다. 시스템의 아키텍처를 결정하고 설계하는데 영향을 미치는 주요한 이유나 요구사항이다.

시스템의 기능성은 달성하는데 특별한 구조가 필요하지 않는다. 구성 요소 간 복잡한 연결 또는 Line of Code가 길더라도, 동작하는데 문제가 없다면 달성하는 것이다.

그런데 만약 복잡한 구조에서, 1달 이내 3명의 인력으로 기능 확장이 필요하다면, 이는 상황이 달라진다. 유지 보수성 이라는 품질을 달성해야 하는 것이다. 유지 보수성이 확보되지 않은 상황에서 기능 확장을 해야 한다면, 수많은 스파게티 코드들을 한번에 변경해야 하고, 그로 인해 너무 많은 Class에 변경점이 발생 할 것이다.

유지 보수성을 달성하기 위해선, Software 구성 요소 간 배치, 책임, 관계, 조직을 모두 고려해야 한다. 단순 기능 동작하는 것 이상으로 많은 설계 요소들이 반영되어야 한다. Architect 관점에서 가장 노력을 많이 해야 하는 부분이다. 이를 통해 적인 인력으로 유지보수 가능한 구조를 만들어 효율화를 높여야 한다.

아키텍처 드라이버를 명확하게 이해하고 문서화 하는 것은 시스템 아키텍처를 효과적으로 설계하고 관리하는데 도움이 된다. 이러한 드라이버를 고려하여 아키텍처를 계획하면 시스템이 요구 사항을 충족하고 효율적으로 동작할 수 있게 된다.

1. Quality Attribute - ISO 9126

품질요구사항은 대표적으로 ISO 9126이 있다. 소프트웨어 품질 모델 규격을 제공하는 국제 표준이다. 이 표준은 소프트웨어의 품질을 평가하고 개선하기 위한 지침과 요구사항을 제공한다.

이 외에도 품질속성을 정의하여 사용할 수 있지만, 이해당사자간 Consensus를 이루는 것이 중요하다. 서로 같은 의미를 서로 다른 용어로 사용할 수 있기 때문이다.

  1. 기능적 특성(Functional Characteristics)
    • 소프트웨어가 제공하는 기능과 관련된 품질 특성을 설명한다.이는 소프트웨어의 정확성, 완전성, 상호운용성 등을 포함한다.
    • 예) AWS의 가용성은 99.9999%이다. 1년 동안 서비스가 전달 될 가능성이 99.9999%
  2. 성능 특성(Performance Characteristics)
    • 소프트웨어의 성능과 관련된 품질 특성을 설명한다. 이는 소프트웨어의 응답시간, 처리량, 자원사용량 등을 평가한다.
  3. 사용성 특성(Usability Characteristics)
    • 소프트웨어의 사용자 경험과 관련된 품질 특성을 설명한다. 이는 소프트웨어의 학습 용이성, 이해도, 사용자 인터페이스의 편의성 등을 평가한다.
  4. 신뢰성 특성(Reliability Characteristics
    • 소프트웨어의 신뢰성과 관련된 품질 특성을 설명한다. 이는 소프트웨어의 오류 처리, 회복력, 안정성 등을 평가한다.
  5. 유지보수성 특성(Maintainability Characteristics)
    • 소프트웨어의 유지보수성과 관련된 품질 특성을 설명한다. 이는 소프트웨어의 수정 용이성, 분석 용이성, 변경 용이성 등을 평가한다,
  6. 이식성 특성(Portability Characteristics)
    • 소프트웨어의 이식성과 관련된 품질 특성을 설명한다. 이는 소프트웨어의 플랫폼 호환성, 이식 용이성, 종속성 등을 평가한다.

2. 관점에 따라 우선 되는 Architecture Driver

비즈니스 목표와 연관되는 품질과 개발자로서 우선해야 하는 품질로 나누어 볼 수 있다. 과제 관리자 또는 고객의 입장에선 당연히 기능적으로 우수하고, 사용성이 좋고, 안정적이며 성능이 좋은 Software를 선호할 것이다. 보안 서비스를 제공하는 고객이라면 보안성을 요구할 것이다.

그러나, 개발자라면 적은 인력으로 확장이 가능하고 유지 보수가 가능하도록 Maintainability와 Portability를 위해 좋은 설계를 진행해야 한다. 기능 요구 사항의 변경 또는 System Platform의 변경 시 마다 수많은 모듈이 변경되어야 하고, 새로 설계 해야 하는 수준으로 개발을 진행해야 한다면, 과제 진행이 어려울 수 밖에 없다. 고객의 요구사항은 한번에 Fix되지 않는다. 여러 번의 Feedback을 통해 비로서 Fix되기 때문에 기능 확장에 유리한 구조를 선택해야 한다. 요구사항을 즉각적으로 반영할 수 있도록 변경 가능성에 확장 가능한 구조가 되어야 한다.

반면, 고객 요구사항 및 이해당사자 들로부터 도출된 품질 요구사항들이 모두 Architecture에 고려 되는것인 아니다. 요구 사항 중 기능 요구사항을 식별하고, 비지니스 측면과 기술 측면에 영향이 큰 품질 속성을 도출해 낸다. 이렇게 도출한 품질 속성을 Architecutre Driver라고 표현한다. 아키텍처 드라이버들을 우선 순위화 하여, 어떤 것을 우선적으로 달성할지 결정한다. 여러 아키텍처 드라이버들이 상충되는 관계를 갖는다면 이러한 우선 순위가 결정에 도움을 준다.

이렇듯, 아키텍처 드라이버는 시스템이 만족 시켜야 하는 중요한 요구사항을 반영한다. 이러한 요구 사항을 고려하지 않고 설계를 진행하면 시스템의 요구 사항을 충족하지 못할 수 있으며, 이는 프로젝트의 성공을 방해한다.

이해당사자간 아키텍처 드라이버를 공유하여 설계하고자 하는 시스템의 목적을 명확하게 공유할 수 있다. 요구사항을 명확하게 이해하고 공유함으로써, 의사소통을 개선할 수 있다.

Architecture Driver 란 설계가 필요하게 된 목적이다. 왜 아키텍처가 이러한 구조이어야 하는가에 대한 이유이다. Architecture Driver를 잘 추출하고, 설계 안을 통해 이를 Architecture Description 에 풀어내야 한다. 문서를 통해 설계 결정들에 대한 이유를 설명하고, 결국 이러한 결정들은 아키텍처 드라이버를 달성하기 위한 결정이어야 한다.

반응형