도은
- 아키텍처를 구축하거나 기존 아키텍터의 타당성을 검증할 때 제일 먼저 해야 할 일은 아키텍처 특성을 식별하는 것
- 정확하게 식별하기 위해서는 아키텍트는 해당 도메인을 잘 이해하고 있어야 하며, 도메인 이해관계자들과 협력하여 도메인 관점에서 정말 중요한 것들을 결정해야 한다.
- 아키텍트는 적어도 도메인 관심사, 요구사항, 암묵적 지식, 이렇게 세 가지 출처에서 아키텍처 특성을 밝혀낸다.
5.1 도메인 관심사에서 아키텍처 특성 도출
- 아키텍트는 도메인 관심사를 올바르게 해석하여 정확한 아키텍처 특성을 식별해야 한다.
- 도메인의 핵심 목표와 현재 상황을 고려하여 도메인 관심사를 '~성'으로 해석한 후, 그에 따라 정확하고 합리적인 아키텍처 결정을 내려야 한다.
- 아키텍처에서 가장 흔한 안티패턴 중 하나가, 모든 아키텍처 특성을 지원하는 제네릭 아키텍처를 설계하려는 것이다.
- 지원 가능한 아키텍처 특성 하나하나가 전체 시스템 설계를 복잡하게 만드는 요인이기 때문에 너무 많은 아키텍처 특성을 수용하면 너무 복잡해져버린다.
- 아키텍처 특성의 개수에 연연하지 말고 가급적 설계를 단순화하는 게 좋다.
🌝 생각 ) 통일성을 유지하면서 단순함을 유지하는 게 좋은 것 같다.
- 많은 것들을 시스템 레벨에서 고려하면 오히려 그것을 기반으로 하는 더욱 복잡한 요구사항이 생길 수 있는 것 같고 시스템은 더욱 복잡해질 수 있는 것 같다.
- 그리고 하나를 고려할 때 그걸로부터 파생될 수 있는 요구사항들을 생각하는 것도 중요하다. 애매한 의사결정은 시스템을 혼란스럽게 만들 수 있는 것 같다.
- 모든 아키텍처 특성의 우선 순위를 만장일치로 의견이 모아지는 경우는 거의 없다.
- 각자 가장 중요한 특성 3개를 뽑으라고 하고, 합의를 이끌어내기 쉽고 가장 중요한 것은 무엇일까 논의하고 트레이드 오프를 분석하여 결정하자.
- 아키텍트와 도메인 이해관계자들이 서로 다른 언어로 말을 한다는 게 문제 (😅 ㅋㅋ)
- 아키텍트는 확장성, 상호운용성, 내고장성, 학습성, 가용성은 운운하는데, 도메인 이해관계자는 인수병합, 고객 만족, 출시 시점, 경쟁 우의를 논하는 식
- 그래서 도메인 관심사를 아키텍처 특성으로 옮겨야 한다.
도메인 관심사 | 아키텍처 특성 |
---|---|
인수 병합 | 상호운용성, 확장성, 신장성 |
출시 시기 | 민첩성, 시험성, 배포성 |
유저 만족 | 성능, 가용성, 내고장성, 시험성, 배포성, 민첩성, 보안 |
경쟁 우위 | 민첩성, 시험성, 배포성, 확장성, 가용성, 내고장성 |
시간 및 예산 | 단순성, 실행성 |
5.2 요구사항에서 아키텍처 특성 도출
- 요구사항 정의서에 명시된 문장에서 도출한 아키텍처 특성도 있다.
- 예를 들면, 예상 유저 수와 그에 따른 확장 문제는 보통 도메인 관심사에서 빠지지 않는 단골 사항
💡 아키텍트가 도메인 지식에서 도출되는 특성들도 있는데, 이것이 아키텍트가 도메인 지식을 갖고 있으면 이로운 이유이다.