소프트웨어 아키텍트라면 인정하기 싫겠지만, 개발자가 소프트웨어 아키텍처를 무시하더라도 성공할 수 있는 시스템이 많다. 그렇지만 소프트웨어 아키텍처를 충분히 생각했다면 피할 수 있었던 실패도 많다.
예를 먼저 들어보자.
예전 트럭은 안전벨트가 없었다. 그때의 트럭은 안전벨트가 없었다. 설계자가 차를 설계 할 때 안전에 무관심했다는 뜻이다. 설계자가 차를 설계할 때 안전에 무관심했다는 뜻이다.
그 이후에 나온 차들은 안전벨트가 있었다. 설계자는 아키텍처 집중 설계를 선택하여 안전벨트를 장착했다. 하지만 매번 버클을 맸어야 했다. 버클을 매지 않으면 안전을 보장할 수 없었다.
요즘에 나온 차들은 전부 에어백이 있어야 한다. 아키텍처 수준에서 안정성을 우선하지 않은 차량을 구매할 수 없다. 즉, 아키텍처 상향 설계를 적용한 것이다.
아키텍처 무관 설계
- 특별한 아키텍처를 선택하지 않았지만 업계 표준이 되는 '추정 아키텍처'를 적용했을 가능성이 크다.
- 작은 프로젝트를 할 때는 아무런 문제가 안된다.
- 하지만 규모가 커지거나 오랬동안 유지보수가 되어야하는 프로젝트라면 문제가 될 수 있다.
- 아키텍처에 관한 명확한 비전이 없기 때문에 중간에 전혀 엉뚱한 방향으로 아키텍처가 만들어져서 부적합한 시스템으로 바뀔 수 있다.
- 시간이 갈 수록 지엽적(local)적으로 많은 예외 코드가 발생하고, 손대기 힘든 복잡한 시스템으로 발전할 수 있다.
아키텍처 집중 설계
- 시스템에 적절한 아키텍처를 판단하고, 시스템의 목표를 달성할 수 있는 아키텍처를 '의도적'으로 선택한다.
- 기능 및 품질 속성을 포함하여 목표를 달성하는 데 적합한 아키텍처를 설계한다.
- 시스템이 직면한 문제를 지엽적이 아닌 아키텍처 수준에서 해결책을 찾아 시스템 전체에 적용할 수 있게 한다.
아키텍처 상향 설계
- 개발자가 시스템의 목표나 속성을 보장할 목적으로 아키텍처를 설계하는 일종의 아키텍처 집중 설계다. 목표나 속성을 아키텍처에 포함하면 개발자는 이를 달성하는 추가 코드를 작성할 필요가 없다.
개발자가 아키텍처를 잘 몰라서 첫 번째 접근 방식인 아키텍처 무관 설계를 적용하게 되기도 한다. 소프트웨어 아키텍처를 공부하면 무지 때문에 의도치 않은 리스크를 피할 수 있다.
아키텍처 집중 설계와 아키텍처 상향 설계는 유사하지만 약간의 차이가 있다.
아키텍처 집중 설계는 목표에 맞는 아키텍처를 선택하는 것이다. 이 선택은 목표 달성을 보장해주지 않는다. 위 예시에서 처럼 안전벨트를 사용자가 버클에 끼워야 안전해지는 것이다. 목표 달성의 기회만 제공한다.
아키텍처 상향 설계는 목표 달성에 적극적인 역할을 수행한다. 자동차 아키텍처에 에어백을 설계를 했고, 아키텍처를 준수하여 개발하였으면 사용자가 버클을 끼울 필요 없이 안전해진다. 즉, 아키텍처 상향 설계를 활용해 목표를 달성할 수 있다.
참조: 적정 소프트웨어 아키텍처
'아키텍처' 카테고리의 다른 글
소프트웨어 아키텍처 선택의 중요성 (2) | 2023.01.28 |
---|---|
추정 아키텍처와 레퍼런스 아키텍처 (13) | 2023.01.28 |
소프트웨어 아키텍처의 정의 (12) | 2023.01.24 |
소프트웨어 아키텍팅의 기본 (12) | 2023.01.23 |
리스크 주도 소프트웨어 아키텍처란? (2) | 2023.01.23 |
댓글