본문 바로가기

카테고리 없음

[SW] 아키텍쳐와 디자인패턴의 개념과 차이점 이해하기

SW 아키텍쳐란??

[정의]

  • 소프트웨어 시스템의 기본 구조와 그러한 구조 및 시스템을 만드는 분야를 말한다.
  • 시스템의 조직이다. 이 조직에는 모든 구성요소, 서로상호작용되는 방식, 작동하는 환경, 소프트웨어 설계에 사용되는 원칙이 포함된다.
  • 큰그림이다, 소프트웨어 설계 프로세스의 대상과 위치이다. 수행할 작업, 높은 수준에서 비즈니스 요구사항을 구현하는 방법을 결정합니다. 서버가 배열되는 방식, OK,서버의 위치 등등

[역사]

  • 1968년 Edsger Dijkstra와 1970년대 초 David Parnas의 연구에 그 기원을 두고 있습니다.
  • Carnegie Mellon의 Mary Shaw와 David Garlan은 1996년 Software Architecture: Perspectives on the Emerging Discipline이라는 책을 저술했습니다.

[특징]

  • 일단 구현되면 변경하는데 비용이 많이드는 근분적인 구조를 선택한다.

 

아키텍쳐의 종류

 

  • 3-tier, MVC, Etc

 

디자인패턴이란?

[정의]

  • 일반적으로 반복되는 디자인 문제에 대한 오랜 시간 테스트를 거친 솔루션으로 정의됩니다.

[만든사람]

  • 크리스토퍼 알렉산더

[종류] https://chetan-aggarwal.medium.com/ios-design-patterns-f478abd78132

  • Creational: Singleton.
  • Structural: Decorator, Adapter & Facade.
  • Behavioral: Observer and Memento
  • MVC, MVVM, MVP, Singleton

[이점]

  • 첫째, 검증된 솔루션을 사용하여 소프트웨어 개발과 관련된 문제를 해결하는 방법을 제공한다.
  • 이 솔루션은 결합을 최소화하면서 응집력이 높은 모듈의 개발을 용이하게한다.
  • 시스템 요구사항에 존재할 수 있는 가변성을 분리하여 전체 시스템을 더 쉽게 이해하고 유지관리 할 수 있다.
  • 둘째, 디자인패턴은 디자이너 간의 커뮤니케이션을 보다 효율적으로 만든다
  • 소프트웨어 전문가는 시스템 설계를 논의할때 특정 문제를 해결하는데 사용되는 패턴의 이름을 참조하면 높은 수준의 설계를 머리에 즉시 떠올릴 수 있다.

 

아키텍쳐와 디자인패턴의 차이점

  • 소프트웨어를 만들기위해 비즈니스 적인 측면에서 설계하는 것이 아키텍쳐이고, 결정된 아키텍처를 코드로 구현할때 사용되는 코드 구현 패턴이 다지인패턴이다. 
  • 둘의 차이는 코딩이 시작되기 전에 거의 모든작업을 수행한다는 점에 유의하는 것이 중요하다. 
  • 아키텍처는 요구사항을 총족하는 방법이고 디자인 패턴은 개발프로세스 방법이다.
  • 아키텍처는 내가 무언가를 만드는 방법이고, 디자인은 내가 만드는 것이다.

 

 

SW 아키텍쳐가 중요한 이유 

  • 앱을 개발할때 개발 및 최종 유지관리 측면에서 비용이 많이 발생하는데 이를 효율적으로 설계할 수 있도록 도와준다.
  • 소프트웨어 시스템의 규모와 복잡성이 커질수록 성공하려면 잘생각한 아키텍처가 필요하다.
  • SW 아텍은 소프트웨어 시스템의 기초이며 이걸 알고 코딩하는것와 모르고 코딩하는것은 품질에 지대한 영향을 미친다.

 

[중요한이유 8가지]

1. 요구사항에 총족하는 솔루션을 정의한다.

  • 소프트웨어는 모든기능, 비기능, 기술 및 운영 요구사항을 총적하기위해 노력한다. 도메인전문가, 비즈니스분석가, 제품 소유자 및 최종 사용자와 같은 이해관계자와 긴밀히 협력하여 요구사항을 식별하고 이해한다. SWAT은 이러한 요구사항을 총족하는 솔루션을 정의한다.

열악한 아키텍처는 품질 속성의 측정 가능한 목표를 총족하지 못하는 구현을 이어지며 일반적으로 유지, 배포 및 관리가 어렵다.

 

2.품질 속성 활성화 및 금지

  • 품질 속성의 몇가지 예에는 유지관리 가능성, 상호 운용성, 보안 및 성능이 포함된다.

품질 속성 및 시스템의 이해 관계자를 만족시키는 방법이 중요하며 소프트웨어 아키텍처는 품질 속성이 총족되도록 하는데 큰역할을 한다.

 

 

3.소프트웨어 시스템 품질을 예측할 수 있는 능력 제공

  • 소프트웨어 아키텍쳐 문서를볼때 시스템의 품질을 예측할 수 있다.
  • 품질 속성을 기반으로 아키텍쳐 결정을 내리면 이러한 요구사항을 더쉽게 총족할 수 있다. 나중에 이행하기 위해 변경하는 것이 어렵고비용도 많이들어 가능한 품질 속성에 대해 생각하기 시작하려고 한다.
  • 미리 생각하고 모델링 및 분석 기술을 사용하여 소프트웨어 아키텍처가 비기능 요구사항을 총족할 수 있는지 확인할 수 있다. 
  • 만약 시스템 구현 및 테스트될때까지 품질속성을 총족할지 예측할 수 없다면 비용과 시간이 많이 쇼요되는 재작업이 필요할 수 있는데 소프트웨어 아키텍처를 사용하면 소프트웨어 시스템의 품질을 예측하고 값비싼 재작업을 피할 수 있습니다.

 

4.이해관계자 커뮤니케이션 용이

  • 아키텍처 및 해당 문서를 통해 소프트웨어 아키텍처를 전달하고 다른사람에게 설명할 수 있다. 비용 및 기간과 같은프로젝트 측면과 관련된 토론의 기초를 형성할 수 있다.
  • 소프트웨어 시스템에 대한 요구사항 미 기타 초기결정이 내려질때 공식 소프트웨어 아키텍처가 중요한 역할을 하며 협상과 토론을 용이하게 한다.

 

5.변경관리

  • 시스템의 변경은 불가피하다 변화의 촉매되는 시장, 새로운 요구사항, 비즈니스 프로세스의 변경, 기술발전, 버그 수정등이 있다. 좋은 소프트웨어 아키텍처는 변경사항을 구현하고 관리하는데 도움이된다.

 

6.재사용 가능한 모델 제공

  • 확립된 아키텍처는 제품라인의 다른 제품에 조직 내에서 다시 사용될 수 있다. 특히 유사한 요구사항이 있는경우 코드를 재사용하면 시간과 돈과 같은 자원이 절약된다. 
  • 더 중요한 것은 코드가 이미 테스트되고 입증되었기 때문에 재사용을 활용하는 소프트웨어의 품질이 향상된다는 것이다.
  • 품질 향상만으로도 자원절약으로 이어진다. 소프트웨어 아키텍처를 재사용할때 코드만 재사용되는것이아니다. 원래 아키텍처를 형상한 모든 초기결정도 활용된다.
  • 아키텍처에 필요한 요구사항, 특히 비기능적 요구사항에 대한 생각과 노력은 다른 제품에도 적용될 수 있다. 그러한 결정을 내리기위한 노력이 반드시 반복될 필요는 없다.
  • 소프트웨어 아키텍처를 재사용할때 조직의 자산이되는 것은소프트웨어 제품만이 아니라 아키텍처 자체이다.

 

7.구현 제약 부과

  • 솝트웨어 아텍은 구현에 제약을 가하고 디자인 서택을 제한한다.
  • 이는 소프트웨어 시스템의 복잡성을 줄이고 개발자가 잘못된 결정을 내리는 것을 방지한다.
  • 요소의 구현이 설계된 아키텍쳐를 준수하는 경우 아키텍쳐에서 내린설계결정을 준수한다.
  • 솝트아텍이 제대로 수행되면 개발자는 목료를 달성할 수 있고 일을 잘못 구현하는 것을 방지한다.

 

8.팀원 교육 역할

  • 문서는 팀의 개발자를 위한 교육역할을 한다. 시스템의 다양한 구조와 요소, 상호작용 방식을 학습함으로써 기능 구현되는 적잘한 방법을 배운다.
  • 새로운 직원이오면 오리엔테이션을 하는 경우가 많은데 잘 설계된 아키텍처를 통해 개발자가 팀으로 쉽게 전활할 수 있다.
  • 유지관리단계는 소프트웨어 프로젝트에서 가장길고 비용이 많이드는단계중 하나일 수 있고 시간이 지남에따라 새로운직원도 참여를 하게되는데 가르치고 참여시킬수 있느 ㄴ견고한 아키텍처를 갖는것은 중요하다.

 

- Reference