종속성 다이어그램을 사용하는 이유는 무엇인가요?
코드가 디자인과 충돌하지 않도록 하려면 Visual Studio에서 종속성 다이어그램을 사용하여 코드의 유효성을 검사합니다. 이렇게 하면 다음을 수행할 수 있습니다.
코드의 종속성과 종속성 다이어그램에 대한 종속성 간의 충돌을 찾습니다.
제안된 변경 내용의 영향을 받을 수 있는 종속성을 찾습니다.
예를 들어 종속성 다이어그램을 편집하여 잠재적인 아키텍처 변경 내용을 표시한 다음 코드의 유효성을 검사하여 영향을 받는 종속성을 확인할 수 있습니다.
코드를 다른 디자인으로 리팩터링하거나 마이그레이션합니다.
코드를 다른 아키텍처로 이동할 때 작업이 필요한 코드 또는 종속성을 찾습니다.
요구 사항
비주얼 스튜디오
.NET Core 프로젝트에 대한 종속성 다이어그램을 만들려면 Visual Studio 2019 버전 16.2 이상이 있어야 합니다.
종속성 다이어그램이 있는 모델링 프로젝트가 있는 솔루션입니다. 이 종속성 다이어그램은 유효성을 검사하려는 C# 또는 Visual Basic 프로젝트의 아티팩트와 연결되어야 합니다. 코드에서 종속성 다이어그램 만들기를 참조하세요.
이 기능을 지원하는 Visual Studio 버전을 확인하려면 아키텍처 및 모델링 도구에 대한 Edition 지원을 참조하세요.
Visual Studio의 열린 종속성 다이어그램 또는 명령 프롬프트에서 수동으로 코드의 유효성을 검사할 수 있습니다. 로컬 빌드 또는 Azure Pipelines 빌드를 실행할 때 코드의 유효성을 자동으로 검사할 수도 있습니다.
중요합니다
TFS(Team Foundation Server)를 사용하여 계층 유효성 검사를 실행하려면 빌드 서버에 동일한 버전의 Visual Studio도 설치해야 합니다.
라이브 종속성 검증
종속성 유효성 검사는 실시간으로 발생하며 오류 목록은 즉시 오류 목록에 표시됩니다.
라이브 유효성 검사는 C# 및 Visual Basic에 대해 지원됩니다.
라이브 종속성 유효성 검사를 사용할 때 전체 솔루션 분석을 사용하도록 설정하려면 오류 목록에 표시되는 골드 막대에서 옵션 설정을 엽니다.
- 솔루션의 모든 아키텍처 문제를 확인하는 데 관심이 없는 경우 골드 막대를 영구적으로 해제할 수 있습니다.
- 전체 솔루션 분석을 사용하도록 설정하지 않으면 편집 중인 파일에 대해서만 분석이 수행됩니다.
라이브 유효성 검사를 사용하도록 프로젝트를 업그레이드하는 경우 대화 상자에 변환 진행률이 표시됩니다.
라이브 종속성 유효성 검사를 위해 프로젝트를 업데이트할 때 NuGet 패키지 버전은 모든 프로젝트에 대해 동일하게 업그레이드되며 사용 중인 가장 높은 버전입니다.
새 종속성 유효성 검사 프로젝트를 추가하면 프로젝트 업데이트가 트리거됩니다.
항목이 유효성 검사를 지원하는지 확인
여러 앱에서 공유되는 프로젝트의 웹 사이트, Office 문서, 일반 텍스트 파일 및 파일에 레이어를 연결할 수 있지만 유효성 검사 프로세스에는 계층이 포함되지 않습니다. 해당 레이어 사이에 종속성이 나타나지 않으면 개별 계층에 연결된 프로젝트 또는 어셈블리에 대한 참조에 대한 유효성 검사 오류가 나타나지 않습니다. 코드에서 이러한 참조를 사용하지 않는 한 이러한 참조는 종속성으로 간주되지 않습니다.
종속성 다이어그램에서 하나 이상의 레이어를 선택하고 선택 영역을 마우스 오른쪽 단추로 클릭한 다음 링크 보기를 클릭합니다.
계층 탐색기에서 지원 유효성 검사 열을 확인합니다. 값이 false이면 항목이 유효성 검사를 지원하지 않습니다.
유효성 검사를 위해 다른 .NET 어셈블리 및 프로젝트 포함
항목을 종속성 다이어그램으로 끌면 해당 .NET 어셈블리 또는 프로젝트에 대한 참조가 모델링 프로젝트의 레이어 참조 폴더에 자동으로 추가됩니다. 이 폴더에는 유효성 검사 중에 분석되는 어셈블리 및 프로젝트에 대한 참조가 포함되어 있습니다. 다른 .NET 어셈블리 및 프로젝트를 종속성 다이어그램으로 수동으로 끌어서 놓지 않고 유효성 검사를 위해 포함할 수 있습니다.
솔루션 탐색기에서 모델링 프로젝트 또는 레이어 참조 폴더를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.
참조 추가 대화 상자에서 어셈블리 또는 프로젝트를 선택한 다음 확인을 클릭합니다.
수동으로 코드 유효성 검사
솔루션 항목에 연결된 열린 종속성 다이어그램이 있는 경우 다이어그램에서 바로 가기 유효성 검사 명령을 실행할 수 있습니다. 명령 프롬프트를 사용하여 /p:ValidateArchitecture 사용자 지정 속성이 True로 설정된 msbuild 명령을 실행할 수도 있습니다. 예를 들어 코드를 변경할 때 종속성 충돌을 조기에 catch할 수 있도록 정기적으로 계층 유효성 검사를 수행합니다.
열린 종속성 다이어그램에서 코드 유효성 검사
다이어그램 화면을 마우스 오른쪽 단추로 클릭한 다음 아키텍처 유효성 검사를 클릭합니다.
비고
기본적으로 종속성 다이어그램(.layerdiagram) 파일의 빌드 작업 속성은 유효성 검사 로 설정되므로 다이어그램이 유효성 검사 프로세스에 포함됩니다.
오류 목록 창에서 발생하는 모든 오류를 보고합니다. 유효성 검사 오류에 대한 자세한 내용은 계층 유효성 검사 문제 해결을 참조하세요.
각 오류의 원본을 보려면 오류 목록 창에서 오류를 두 번 클릭합니다.
비고
Visual Studio는 오류의 원본 대신 코드 맵을 표시할 수 있습니다. 이 문제는 코드에 종속성 다이어그램으로 지정되지 않은 어셈블리에 대한 종속성이 있거나 코드에 종속성 다이어그램에 지정된 종속성이 누락된 경우에 발생합니다. 코드 맵 또는 코드를 검토하여 종속성이 있는지 여부를 확인합니다. 코드 맵에 대한 자세한 내용은 솔루션 전체의 맵 종속성을 참조하세요.
오류를 관리하려면 계층 유효성 검사 오류 해결을 참조하세요.
명령 프롬프트에서 코드 유효성 검사
Visual Studio 명령 프롬프트를 엽니다.
다음 중 하나를 선택합니다.
솔루션의 특정 모델링 프로젝트에 대해 코드의 유효성을 검사하려면 다음 사용자 지정 속성을 사용하여 MSBuild를 실행합니다.
msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true-또는-
모델링 프로젝트(.modelproj) 파일 및 종속성 다이어그램이 포함된 폴더로 이동한 다음, 다음 사용자 지정 속성을 사용하여 MSBuild를 실행합니다.
msbuild /p:ValidateArchitecture=true솔루션의 모든 모델링 프로젝트에 대해 코드의 유효성을 검사하려면 다음 사용자 지정 속성을 사용하여 MSBuild를 실행합니다.
msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true-또는-
종속성 다이어그램이 포함된 모델링 프로젝트를 포함해야 하는 솔루션 폴더로 이동한 다음, 다음 사용자 지정 속성을 사용하여 MSBuild를 실행합니다.
msbuild /p:ValidateArchitecture=true발생하는 모든 오류가 나열됩니다. MSBuild에 대한 자세한 내용은 MSBuild 및 MSBuild 작업을 참조하세요.
유효성 검사 오류에 대한 자세한 내용은 계층 유효성 검사 문제 해결을 참조하세요.
유효성 검사 오류 관리
개발 프로세스 중에 유효성 검사 시 보고된 충돌 중 일부를 억제하고 싶을 수 있습니다. 예를 들어, 이미 해결 중이거나 특정 시나리오에 맞지 않는 오류를 숨기고 싶을 수 있습니다. 오류를 무시할 때, Team Foundation에서 작업 항목을 기록하는 것이 바람직한 방법입니다.
경고
작업 항목을 만들거나 연결하려면 TFS SCC(소스 코드 제어)에 이미 연결되어 있어야 합니다. 다른 TFS SCC에 대한 연결을 열려고 하면 Visual Studio에서 현재 솔루션을 자동으로 닫습니다. 작업 항목을 만들거나 연결하기 전에 해당 SCC에 이미 연결되어 있는지 확인합니다. Visual Studio의 이후 릴리스에서는 SCC에 연결되지 않은 경우 메뉴 명령을 사용할 수 없습니다.
유효성 검사 오류에 대한 작업 항목 만들기
- 오류 목록 창에서 오류를 마우스 오른쪽 단추로 클릭하고 작업 항목 만들기를 가리킨 다음 만들려는 작업 항목의 유형을 클릭합니다.
다음 작업을 사용하여 오류 목록 창에서 유효성 검사 오류를 관리합니다.
| 에서 | 다음 단계를 수행합니다. |
|---|---|
| 선택한 오류를 유효성 검사 중에 억제하다 | 하나 또는 여러 개의 선택한 오류를 마우스 오른쪽 단추로 클릭하고 유효성 검사 오류 관리를 가리킨 다음 오류 표시 안 을 클릭합니다. 표시되지 않는 대신, 억제된 오류는 취소선 서식으로 표시됩니다. 다음에 유효성 검사를 실행하면 이러한 오류가 표시되지 않습니다. 억제된 오류는 해당 종속성 다이어그램 파일에 대한 .suppressions 파일에서 추적됩니다. |
| 선택한 오류 억제 중지 | 선택한 억제된 오류 또는 오류들을 마우스 오른쪽 버튼으로 클릭하고 유효성 검사 오류 관리를 가리킨 다음, 오류 억제 중지를 클릭합니다. 다음에 유효성 검사를 실행할 때 선택된 억제된 오류가 표시됩니다. |
| 오류 목록 창에서 표시되지 않는 모든 오류 복원 | 오류 목록 창의 아무 곳이나 마우스 오른쪽 단추로 클릭하고 유효성 검사 오류 관리를 가리킨 다음 표시되지 않는 모든 오류 표시를 클릭합니다. |
| 오류 목록 창에서 표시되지 않는 모든 오류 숨기기 | 오류 목록 창의 아무 곳이나 마우스 오른쪽 단추로 클릭하고 유효성 검사 오류 관리를 가리킨 다음 표시되지 않는 모든 오류 숨기기를 클릭합니다. |
자동으로 코드 유효성 검사
로컬 빌드를 실행할 때마다 계층 유효성 검사를 수행할 수 있습니다. 팀에서 Azure DevOps를 사용하는 경우 사용자 지정 MSBuild 작업을 만들어 지정할 수 있는 제어된 체크 인을 사용하여 계층 유효성 검사를 수행하고 빌드 보고서를 사용하여 유효성 검사 오류를 수집할 수 있습니다. 제어된 체크 인 빌드를 만들려면 TFVC 제어 체크 인을 참조하세요.
로컬 빌드 중에 코드의 유효성을 자동으로 검사하려면
텍스트 편집기를 사용하여 모델링 프로젝트(.modelproj) 파일을 연 다음, 다음 속성을 포함합니다.
<ValidateArchitecture>true</ValidateArchitecture>
- 또는 -
솔루션 탐색기에서 종속성 다이어그램 또는 다이어그램이 포함된 모델링 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
속성 창에서 모델링 프로젝트의 아키텍처 유효성 검사 속성을 True로 설정합니다.
여기에는 유효성 검사 프로세스의 모델링 프로젝트가 포함됩니다.
솔루션 탐색기에서 유효성 검사에 사용할 종속성 다이어그램(.layerdiagram) 파일을 클릭합니다.
속성 창에서 다이어그램의 빌드 작업 속성이 유효성 검사로 설정되어 있는지 확인합니다.
여기에는 유효성 검사 프로세스의 종속성 다이어그램이 포함됩니다.
오류 목록 창에서 오류를 관리하려면 계층 유효성 검사 오류 해결을 참조하세요.
계층 유효성 검사 문제 해결
다음 표에서는 계층 유효성 검사 문제 및 해결에 대해 설명합니다. 이러한 문제는 코드와 디자인 간의 충돌로 인해 발생하는 오류와 다릅니다. 이러한 오류에 대한 자세한 내용은 계층 유효성 검사 문제 해결을 참조하세요.
| Issue | 가능한 원인 | Resolution |
|---|---|---|
| 유효성 검사 오류는 예상대로 발생하지 않습니다. | 유효성 검사는 솔루션 탐색기의 다른 종속성 다이어그램에서 복사되고 동일한 모델링 프로젝트에 있는 종속성 다이어그램에서 작동하지 않습니다. 이러한 방식으로 복사되는 종속성 다이어그램은 원래 종속성 다이어그램과 동일한 참조를 포함합니다. | 모델링 프로젝트에 새 종속성 다이어그램을 추가합니다. 원본 종속성 다이어그램의 요소를 새 다이어그램으로 복사합니다. |
계층 유효성 검사 오류 해결
종속성 다이어그램에 대해 코드의 유효성을 검사하는 경우 코드가 디자인과 충돌할 때 유효성 검사 오류가 발생합니다. 예를 들어 다음 조건으로 인해 유효성 검사 오류가 발생할 수 있습니다.
아티팩트가 잘못된 계층에 할당됩니다. 이 경우 아티팩트 이동
클래스와 같은 아티팩트에서는 아키텍처와 충돌하는 방식으로 다른 클래스를 사용합니다. 이 경우 코드를 리팩터링하여 종속성을 제거합니다.
이러한 오류를 해결하려면 유효성 검사 중에 더 이상 오류가 나타나지 않을 때까지 코드를 업데이트합니다. 이 작업은 반복적인 방식으로 수행할 수 있습니다.
다음 섹션에서는 이러한 오류에 사용되는 구문을 설명하고, 이러한 오류의 의미를 설명하고, 오류를 해결하거나 관리하기 위해 수행할 수 있는 작업을 제안합니다.
| Syntax | 설명 |
|---|---|
| ArtifactN(ArtifactTypeN) |
ArtifactN 은 종속성 다이어그램의 계층과 연결된 아티팩트입니다. ArtifactTypeN은 클래스 또는 메서드와 같은 ArtifactN의 형식입니다. 예를 들면 다음과 같습니다. MySolution.MyProject.MyClass.MyMethod(메서드) |
| NamespaceNameN | 네임스페이스의 이름입니다. |
| LayerNameN | 종속성 다이어그램의 레이어 이름입니다. |
| DependencyType | Artifact1과 Artifact2 간의 종속성 관계 유형입니다. 예를 들어 Artifact1은 호출 관계가 Artifact2와 있습니다. |
| 오류 구문 | 오류 설명 |
|---|---|
| DV0001: 잘못된 종속성 | 이 문제는 계층에 매핑된 코드 요소(네임스페이스, 형식, 멤버)가 다른 계층에 매핑된 코드 요소를 참조하지만 이 계층을 포함하는 종속성 유효성 검사 다이어그램에서 이러한 계층 사이에 종속성 화살표가 없는 경우에 보고됩니다. 종속성 제약 조건 위반입니다. |
| DV1001: 잘못된 네임스페이스 이름 | 이 문제는 "허용된 네임스페이스 이름" 속성에 이 코드 요소가 정의된 네임스페이스를 포함하지 않는 계층과 연결된 코드 요소에서 보고됩니다. 이는 명명 제약 조건 위반입니다. "허용된 네임스페이스 이름"의 구문은 계층과 연결된 코드 요소를 정의할 수 있는 네임스페이스의 세미콜론 목록이어야 합니다. |
| DV1002: 참조할 수 없는 네임스페이스에 대한 종속성 | 이 문제는 계층과 연결된 코드 요소에서 보고되며 계층의 "참조할 수 없는 네임스페이스" 속성에 정의된 네임스페이스에 정의된 다른 코드 요소를 참조합니다. 이는 명명 제약 조건 위반입니다. "참조할 수 없는 네임스페이스" 속성은 이 계층과 연결된 코드 요소에서 참조해서는 안 되는 세미콜론으로 구분된 네임스페이스 목록으로 정의됩니다. |
| DV1003: 허용되지 않는 네임스페이스 이름 | 이 문제는 "허용되지 않는 네임스페이스 이름" 속성에 이 코드 요소가 정의된 네임스페이스가 포함된 계층과 연결된 코드 요소에서 보고됩니다. 이는 명명 제약 조건 위반입니다. "허용되지 않는 네임스페이스 이름" 속성은 이 계층과 연결된 코드 요소를 정의해서는 안 되는 세미콜론으로 구분된 네임스페이스 목록으로 정의됩니다. |
| DV2001: 레이어 다이어그램 현재 상태 | 이 문제는 종속성 다이어그램 파일을 포함하지 않지만 종속성 유효성 검사 분석기를 참조하는 프로젝트에서 보고됩니다. 종속성 유효성 검사를 사용하지 않은 경우 솔루션 탐색기에서 직접 "Microsoft.DependencyValidation.Analyzers"를 제거하거나 이 경고를 표시하지 않을 수 있습니다. 종속성 다이어그램을 추가하려면 코드에서 종속성 다이어그램 만들기를 참조하세요. |
| DV2002: 매핑되지 않은 형식 기준 | 이 문제는 코드 요소가 계층에 매핑되지 않은 경우에 보고됩니다. |
| DV3001: 링크 누락 | 레이어 'LayerName'은 찾을 수 없는 '아티팩트'에 연결됩니다. 어셈블리 참조가 누락되었나요? |
| DV9001: 아키텍처 분석에서 내부 오류를 발견했습니다. | 결과가 완료되지 않을 수 있습니다. 자세한 내용은 자세한 빌드 이벤트 로그 또는 출력 창을 참조하세요. |