앱의 아키텍처 모델링
소프트웨어 시스템 또는 응용 프로그램이 사용자의 요구를 충족하도록 하기 위해 소프트웨어 시스템 또는 응용 프로그램의 전체 구조 및 동작에 대한 설명의 일부로 Visual Studio에서 모델을 만들 수 있습니다. 모델을 사용하여 디자인 전체에서 사용되는 패턴을 설명할 수도 있습니다. 이러한 모델은 기존 아키텍처를 이해하고, 변경 내용을 논의하고, 의도를 명확하게 전달하는 데 도움이 됩니다.
이 기능을 지원하는 Visual Studio 버전을 확인하려면 아키텍처 및 모델링 도구에 대한 에디션 지원을 참조하세요.
모델의 목적은 자연어 설명에서 발생하는 모호성을 줄이고, 사용자와 동료들이 디자인을 시각화하고 대체 디자인을 논의할 수 있도록 돕는 것입니다. 모델은 다른 문서 또는 논의와 함께 사용해야 합니다. 모델 자체는 아키텍처의 완전한 사양을 나타내지 않습니다.
참고 항목
이 항목 전체에서 "시스템"은 개발 중인 소프트웨어를 의미합니다. 다양한 소프트웨어 및 하드웨어 구성 요소의 큰 컬렉션, 단일 애플리케이션 또는 애플리케이션의 일부일 수 있습니다.
시스템의 아키텍처를 다음 두 개의 영역으로 나눌 수 있습니다.
전반적인 디자인입니다. 주요 구성 요소 및 해당 구성 요소가 각 요구 사항을 수행하기 위해 서로 상호 작용 하는 방식을 설명합니다. 시스템이 대규모인 경우 각 구성 요소가 더 작은 구성 요소로 이루어진 방식을 표시하는 전반적인 자체 디자인을 포함할 수 있습니다.
구성 요소의 디자인 전체에서 사용되는 디자인 패턴 및 규칙입니다. 패턴은 프로그래밍 목표를 달성하기 위한 특정 접근 방식을 설명합니다. 디자인 전체에 동일한 패턴을 사용하여 팀에서 변경 및 새로운 소프트웨어 개발 비용을 줄일 수 있습니다.
전반적인 디자인
전반적인 디자인은 시스템의 주요 구성 요소 및 구성 요소가 디자인의 목표를 달성하기 위해 서로 상호 작용하는 방식을 설명합니다. 다음 목록의 동작은 반드시 특정 순서를 따를 필요는 없지만 전반적인 디자인 개발에 포함됩니다.
기존 코드를 업데이트하는 경우 주요 구성 요소를 설명하는 것에서 시작할 수 있습니다. 사용자 요구 사항의 변경 내용을 이해하고 구성 요소 간의 상호 작용을 추가하거나 수정해야 합니다. 새 시스템을 개발하는 경우 사용자 요구의 주요 기능을 이해하는 것에서 시작합니다. 주요 사용 사례에 대한 상호 작용 시퀀스를 살펴본 후 구성 요소 디자인에 시퀀스를 통합할 수 있습니다.
어떤 경우에든, 다양한 활동을 병렬로 개발하고 초기 단계에서 코드 및 테스트를 개발하면 도움이 됩니다. 이러한 측면 중 하나를 완료한 후 다른 측면을 시작하려고 하지 마세요. 일반적으로 요구 사항 및 시스템을 디자인하는 최선의 방법 이해는 둘 다 코드를 작성하고 테스트하는 동안 변경됩니다. 따라서 먼저 요구 사항 및 디자인의 주요 기능을 이해하고 코딩해야 합니다. 프로젝트의 이후 반복에서 세부 정보를 채웁니다.
요구 사항 이해. 모든 디자인의 시작점은 사용자 요구에 대한 명확한 이해입니다.
아키텍처 패턴. 시스템의 핵심 기술 및 아키텍처 요소에 대한 사용자 선택입니다.
구성 요소 및 인터페이스의 데이터 모델입니다. 구성 요소 간에 전달되고 구성 요소 내부에 저장되는 정보를 설명하는 클래스 다이어그램을 그릴 수 있습니다.
요구 사항 이해
완전한 애플리케이션의 전반적인 디자인은 요구 사항 모델 또는 사용자 요구에 대한 기타 설명과 함께 개발할 경우 가장 효과적입니다. 요구 사항 모델에 대한 자세한 내용은 사용자 요구 사항 모델링을 참조하세요.
개발 중인 시스템이 대규모 시스템의 구성 요소인 경우 일부 또는 모든 요구 사항을 프로그래밍 인터페이스에 구현할 수 있습니다.
요구 사항 모델은 다음과 같은 필수 정보를 제공합니다.
제공된 인터페이스. 제공된 인터페이스는 시스템이나 구성 요소가 실제 사용자든, 다른 소프트웨어 구성 요소든 관계없이 해당 사용자에게 제공해야 하는 서비스 또는 작업을 나열합니다.
필요한 인터페이스. 필요한 인터페이스는 시스템이나 구성 요소가 사용할 수 있는 서비스 또는 작업을 나열합니다. 경우에 따라 이러한 모든 서비스를 자체 시스템의 일부로 디자인할 수 있습니다. 그렇지 않은 경우, 특히 대부분의 구성에서 다른 구성 요소와 결합될 수 있는 구성 요소를 디자인하는 경우 필요한 인터페이스는 외부 고려 사항에 의해 설정됩니다.
서비스 품질 요구 사항. 성능, 보안, 견고성, 기타 목표 및 시스템이 충족해야 하는 제약 조건입니다.
요구 사항 모델은 실제 사용자든, 다른 소프트웨어 구성 요소든 관계없이 시스템 사용자의 관점에서 작성됩니다. 시스템 사용자는 시스템의 내부 작업에 대해 아무것도 알지 못합니다. 이와 반대로, 아키텍처 모델의 목표는 내부 작업을 설명하고 사용자 요구를 충족하는 방법을 보여 주는 것입니다.
요구 사항 및 아키텍처 모델을 별도로 유지하면 사용자와 요구 사항을 더 쉽게 논의할 수 있으므로 유용합니다. 요구 사항을 그대로 유지하는 동시에 디자인을 리팩터링하고 대체 아키텍처를 고려하는 것도 도움이 됩니다.
요구 사항 또는 아키텍처 모델에 입력해야 하는 세부 정보의 양은 프로젝트 규모 및 팀의 크기와 분포에 따라 달라집니다. 단기 프로젝트의 소규모 팀은 비즈니스 개념 및 일부 디자인 패턴의 클래스 다이어그램만 스케치하면 됩니다. 두 개 이상의 지역에 분산된 대규모 프로젝트는 훨씬 더 많은 세부 정보가 필요합니다.
아키텍처 패턴
개발 초기 단계에서 디자인에 사용되는 주요 기술 및 요소를 선택해야 합니다. 이러한 선택이 필요한 영역은 다음과 같습니다.
데이터베이스와 파일 시스템 간의 선택, 네트워크로 연결된 애플리케이션과 웹 클라이언트 간의 선택 등의 기본 기술 선택
Windows Workflow Foundation 또는 ADO.NET Entity Framework 간의 선택과 같은 프레임워크 선택
엔터프라이즈 서비스 버스 또는 지점간 채널 간 선택과 같은 통합 방법 선택
이러한 선택은 규모 및 유연성과 같은 서비스 품질 요구 사항에 의해 결정되는 경우가 많으며, 자세한 요구 사항이 알려지기 전에 수행할 수 있습니다. 대규모 시스템에서는 하드웨어 및 소프트웨어의 구성이 서로 밀접하게 관련되어 있습니다.
선택 내용이 아키텍처 모델을 사용 및 해석하는 방법에 영향을 줍니다. 예를 들어 데이터베이스를 사용하는 시스템에서는 클래스 다이어그램의 연결이 데이터베이스의 관계 또는 외래 키를 나타내는 반면, XML 파일을 기반으로 하는 시스템에서는 연결이 XPath를 사용하는 상호 참조를 나타낼 수 있습니다. 분산 시스템에서는 시퀀스 다이어그램의 메시지가 통신 중인 메시지를 나타낼 수 있습니다. 자체 포함된 애플리케이션에서는 함수 호출을 나타낼 수 있습니다.
디자인 패턴
디자인 패턴은 소프트웨어의 특정 측면, 특히 시스템의 여러 파트에서 되풀이되는 측면을 디자인하는 방법의 개요입니다. 프로젝트 전체에서 일관된 접근 방식을 채택하면 디자인 비용을 줄이고, 사용자 인터페이스의 일관성을 유지하고, 코드 이해 및 변경 비용을 줄일 수 있습니다.
관찰자와 같은 일부 일반적인 디자인 패턴은 잘 알려져 있으며 광범위하게 적용할 수 있습니다. 해당 프로젝트에만 적용할 수 있는 패턴도 있습니다. 예를 들어 웹 판매 시스템에서 코드의 여러 작업은 변경 내용이 고객 주문에만 적용됩니다. 모든 단계에서 주문 상태가 정확하게 표시되려면 이러한 모든 작업이 특정 프로토콜을 따라 데이터베이스를 업데이트해야 합니다.
소프트웨어 아키텍처의 작업 중 일부는 디자인 전체에서 채택해야 하는 패턴을 결정합니다. 프로젝트가 진행됨에 따라 새 패턴 및 기존 패턴의 개선 사항이 검색되기 때문에 일반적으로 이는 진행 중인 작업입니다. 초기 단계에서 각각의 주요 디자인 패턴을 실행하도록 개발 계획을 구성하는 것이 유용합니다.
대부분의 디자인 패턴은 프레임워크 코드에 부분적으로 포함될 수 있습니다. 데이터베이스가 올바르게 처리되게 하는 데이터베이스 액세스 레이어와 같은 특정 클래스 또는 구성 요소를 개발자가 사용하도록 패턴의 파트를 줄일 수 있습니다.
디자인 패턴은 문서에서 설명되며, 일반적으로 다음 파트를 포함합니다.
이름.
패턴을 적용할 수 있는 컨텍스트에 대한 설명. 어떤 조건에서 개발자가 이 패턴의 적용을 고려해야 하나요?
패턴을 통해 해결되는 문제에 대한 간략한 설명
주요 파트 및 해당 관계의 모델. 둘 간에 연결 및 종속성이 있는 클래스 또는 구성 요소와 인터페이스가 있을 수 있습니다. 요소는 일반적으로 다음 두 가지 범주로 나뉩니다.
명명 규칙.
패턴을 통해 문제를 해결하는 방법에 대한 설명
개발자가 채택할 수 있는 변형에 대한 설명