.NET 프로젝트에 패키지 추가

완료됨

.NET에는 파일 관리, HTTP, 파일 압축에 이르는 모든 것을 처리하는 많은 핵심 라이브러리가 함께 제공됩니다. 타사 라이브러리로 구성된 대규모 에코시스템도 있습니다. .NET 패키지 관리자인 NuGet을 사용하여 핵심 라이브러리를 설치하고 애플리케이션에서 사용할 수 있습니다.

.NET 및 해당 에코시스템은 ‘종속성’이라는 단어를 많이 사용합니다. 패키지 종속성은 타사 라이브러리입니다. 이것은 특정 기능을 수행하며 애플리케이션에 추가될 수 있는 재사용 가능한 코드 조각입니다. 타사 라이브러리는 애플리케이션이 작동하기 위해 ‘의존’하는 항목이며, 그래서 ‘종속성’이라는 단어를 사용합니다.

타사 라이브러리를 패키지로 생각할 수 있으며 리포지토리에 저장됩니다. 패키지는 관련 기능을 활용할 수 있도록 애플리케이션에 추가할 수 있는 하나 이상의 라이브러리로 구성됩니다.

패키지 종속성을 집중적으로 다루겠습니다. .NET 프로젝트에 패키지된 종속성뿐만 아니라, 프레임워크, 분석기, 프로젝트 참조, 공유 프로젝트 종속성을 포함한 다른 유형의 종속성이 있을 수 있습니다.

패키지가 필요한지 결정

프로젝트에 패키지가 필요한지 어떻게 알 수 있을까요? 다음과 같은 몇 가지 요소를 고려해야 하는 복잡한 질문입니다.

  • 더 나은 코드: 예를 들어 보안과 같은 작업을 처리하고 있으며 인증 및 권한 부여를 구현하려고 하는지 자신에게 질문합니다. 이는 개발자 데이터와 고객 데이터를 보호하기 위해 ‘제대로 수행’해야 하는 작업입니다. 많은 개발자가 사용하는 라이브러리와 표준 패턴이 있습니다. 이러한 라이브러리는 항상 필요한 기능을 구현하며 문제가 발생하면 패치됩니다. 직접 만드는 대신 이러한 라이브러리를 사용해야 합니다. 고려해야 하는 에지 사례가 너무 많아서, 직접 코드를 작성하는 경우 잘하지 못할 수 있습니다.
  • 시간 절약: 유틸리티 라이브러리나 UI 구성 요소 라이브러리와 같은 대부분의 항목을 직접 빌드할 수 있지만, 시간이 걸립니다. 직접 빌드한 결과가 사용 가능한 항목과 비슷하더라도, 필요하지 않다면 이 코드를 작성하는 작업을 복제하는 데 시간을 들이지 않는 것이 좋습니다.
  • 유지 관리: 언젠가는 모든 라이브러리와 앱을 유지 관리해야 합니다. 유지 관리에는 새 기능 추가 및 버그 수정이 포함됩니다. 개발자나 해당 팀이 라이브러리를 유지 관리하는 것이 좋습니까, 아니면 OSS(오픈 소스 소프트웨어) 팀이 유지 관리를 처리하게 하는 것이 더 좋습니까?

패키지 평가

라이브러리를 설치하기 전에 라이브러리의 종속성을 검사하는 것이 좋습니다. 이러한 종속성은 패키지를 사용하도록 결정하는 요인이 될 수도, 사용하지 않을 이유가 될 수도 있습니다. 프로젝트의 종속성을 선택할 때 고려할 몇 가지 요소는 다음과 같습니다.

  • 크기: 종속성 수가 많으면 큰 메모리 공간이 생성될 수 있습니다. 대역폭이 제한되거나 다른 하드웨어 제한이 있는 경우 이 요인은 문제가 될 수 있습니다.
  • 라이선스: 라이브러리에 부여된 라이선스가 상업적, 개인적, 교육용 등 의도한 모든 용도를 충족하는지 확인해야 합니다.
  • 활성 유지 관리: 패키지가 사용되지 않거나 오랫동안 업데이트되지 않은 종속성에 의존하는 경우 문제가 될 수 있습니다.

패키지를 설치하기 전에 https://www.nuget.org/packages/<package name>으로 이동하여 패키지에 대해 자세히 알아볼 수 있습니다. 이 URL을 선택하면 패키지의 상세 페이지로 이동합니다. 종속성 드롭다운 목록을 선택하면 이 종속성에 의존하여 작동하는 패키지를 확인할 수 있습니다.

나열된 종속성의 수로는 모든 사실을 알 수 없습니다. 패키지를 다운로드하는 경우 수십 개의 패키지를 포함하는 패키지 종속성이 발생할 수도 있습니다. 왜 그럴까요? 모든 패키지에는 종속성 목록이 있습니다. 패키지를 사용할 수 있는지 확인하기 위해 dotnet add package <package name> 명령을 실행할 때 모든 종속성이 크롤링 및 다운로드됩니다.

패키지 설치

패키지를 설치하는 데는 몇 가지 방법이 있습니다. Visual Studio 및 Mac용 Visual Studio에는 기본 제공되는 패키지 관리자 명령줄과 그래픽 사용자 인터페이스가 있습니다. 프로젝트 파일에 패키지 참조를 수동으로 추가하거나 패킷 또는 .NET Core CLI와 같은 CLI(명령줄 인터페이스) 도구를 통해 설치할 수 있습니다.

이 모듈의 경우 기본 제공 .NET Core CLI를 사용하여 패키지를 설치합니다. 터미널에서 명령을 호출하여 .NET 프로젝트에 패키지를 추가할 수 있습니다. 일반적인 설치 명령은 dotnet add package <name of package>와 같습니다. add package 명령을 실행하면 명령줄 도구는 전역 레지스트리에 연결되고 패키지를 가져와서 모든 프로젝트가 사용할 수 있는 캐시된 폴더 위치에 저장합니다.

프로젝트가 설치되고 빌드되면 참조가 디버그 또는 릴리스 폴더에 추가됩니다. 프로젝트 디렉터리는 다음과 같습니다.

-| bin/
---| Debug/
------| net3.1
--------| <files included in the dependency>

패키지 찾기

개별 개발자는 NuGet.org에서 전역 레지스트리를 사용하여 앱에 필요한 패키지를 찾고 다운로드할 수 있습니다. 회사에는 사용할 수 있는 패키지와 패키지를 찾을 위치에 관한 전략이 준비되어 있을 수 있습니다.

Screenshot of NuGet.org showing a list of popular packages.

패키지는 다양한 위치에 있을 수 있습니다. 해당 원본 중 일부는 공개적으로 사용할 수 있으며 일부는 제한되고 특정 회사의 직원만 사용할 수 있습니다. 패키지가 있을 수 있는 위치는 다음과 같습니다.

  • 레지스트리: NuGet.org 레지스트리와 같은 전역 레지스트리를 예로 들 수 있습니다. 프라이빗 또는 퍼블릭일 수 있는 고유한 레지스트리를 호스트할 수 있습니다. GitHub 및 Azure DevOps 같은 서비스는 프라이빗 레지스트리를 사용 가능하게 만듭니다.
  • 파일: 로컬 폴더에서 패키지를 설치할 수 있습니다. 고유한 .NET 라이브러리를 개발하려고 하고 로컬에서 패키지를 테스트하려고 하거나 특정 이유로 레지스트리를 사용하지 않으려는 경우에는 패키지에서 설치하는 것이 일반적입니다.

Diagram that illustrates the relationship between package creators, package hosts, and package consumers.

NuGet 레지스트리 및 dotnet 도구

dotnet add package <name of dependency>를 실행하면 .NET은 NuGet.org 레지스트리라는 전역 레지스트리로 이동하고 다운로드할 코드를 검색합니다. https://nuget.org에 있습니다. 브라우저를 사용하여 방문하는 경우 이 페이지에서 패키지를 찾아볼 수 있습니다. 모든 패키지에는 개발자가 방문할 수 있는 전용 웹 사이트가 있습니다.

Screenshot of the landing page for a NuGet package.

해당 사이트에서 소스 코드가 있는 위치에 대해 자세히 알아볼 수 있습니다. 또한 다운로드의 메트릭과 유지 관리 정보 등의 다른 정보를 찾을 수 있습니다.

Screenshot of information and metrics on a NuGet package.

.NET 명령

지금까지 .NET Core CLI를 사용하여 종속성을 설치하는 방법을 알아봤습니다. 그러나 이 도구는 훨씬 더 많은 작업을 수행할 수 있습니다.

.NET Core CLI에는 매우 많은 명령이 있습니다. 이러한 명령은 패키지 설치, 패키지 작성, .NET 프로젝트 초기화 등의 작업에 도움이 됩니다. 모든 명령을 자세히 알 필요는 없습니다. .NET을 사용하기 시작할 때 일부 명령만 사용할 가능성이 있습니다. .NET 사용을 확대함에 따라 다양한 범주에서 점점 더 많은 명령을 사용할 수도 있습니다.

명령에 따라 수행되는 작업을 기억하려면 명령이 다음 범주에 속하는 것으로 생각하면 됩니다.

  • 종속성 관리: 이 범주의 명령은 설치, 제거, 패키지 설치 후 정리, 패키지 업데이트를 처리합니다.
  • 프로그램 실행: .NET Core 도구를 사용하면 애플리케이션 개발에서 흐름을 관리할 수 있습니다. 애플리케이션 흐름의 예로는 테스트 실행, 코드 빌드 및 마이그레이션 명령 실행을 통한 프로젝트 업그레이드가 있습니다.
  • 패키지 작성 및 게시: 압축된 패키지를 만들고 패키지를 레지스트리에 푸시하는 등의 작업에 도움이 되는 여러 가지 명령이 있습니다.

모든 명령의 자세한 목록을 보려면 터미널에 dotnet --help를 입력합니다.

패키지를 설치하는 방법

dotnet add package <dependency name> 명령을 사용하여 애플리케이션의 일부로 사용되어야 하는 일반 종속성을 설치합니다.

참고

일부 패키지는 전역으로 설치할 수 있습니다. 이러한 패키지는 프로젝트로 가져올 수 없습니다. 그런 이유로 많은 전역 패키지는 CLI 도구이거나 템플릿입니다. 패키지 리포지토리에서 이러한 전역 도구를 설치할 수도 있습니다. dotnet tool install <name of package> 명령을 사용하여 도구를 설치합니다. dotnet new -i <name of package> 명령을 사용하여 템플릿을 설치합니다.

설치 후

설치된 패키지는 .csproj 파일의 dependencies 섹션에 나열됩니다. 폴더에 있는 패키지를 확인하려면 dotnet list package를 입력하면 됩니다.

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

이 명령은 최상위 패키지만 나열하며 전이적 패키지라고 하는 패키지 종속성은 나열하지 않습니다. 간단하게 살펴볼 때 유용합니다. 자세히 살펴보고자 하는 경우 모든 전이적 패키지를 나열할 수 있습니다. 이렇게 하면 list 명령이 다음과 같이 표시됩니다.

dotnet list package --include-transitive

전이적 패키지를 포함하면 설치한 모든 패키지와 함께 종속성을 볼 수 있습니다. dotnet list package --include-transitive를 실행하는 경우 다음과 같이 출력될 수 있습니다.

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

   Transitive Package               Resolved
   > Humanizer.Core                 2.7.9
   > Humanizer.Core.af              2.7.9
   > Humanizer.Core.ar              2.7.9
   > Humanizer.Core.bg              2.7.9
   > Humanizer.Core.bn-BD           2.7.9
   > Humanizer.Core.cs              2.7.9
   ...

종속성 복원

프로젝트를 만들거나 복제하는 경우 포함된 종속성은 프로젝트 빌드 시까지 다운로드되거나 설치되지 않습니다. dotnet restore 명령을 실행하여 프로젝트 파일에 지정된 프로젝트 특정 도구뿐만 아니라 종속성도 수동으로 복원할 수 있습니다. 대부분의 경우 명령을 명시적으로 사용할 필요가 없습니다. new, buildrun과 같은 명령을 실행하면 필요한 경우 NuGet 복원이 암시적으로 실행됩니다.

종속성 정리

조만간 패키지가 더 이상 필요하지 않다는 걸 깨닫게 되거나, 설치한 패키지가 필요한 패키지가 아니라는 것을 알게 될 수 있습니다. 또는 작업을 더 잘 수행하는 패키지를 발견했을 수도 있습니다. 어떤 이유로든 사용하지 않는 종속성은 제거해야 합니다. 그러면 깔끔하게 유지할 수 있습니다. 또한 종속성은 공간을 차지합니다.

프로젝트에서 패키지를 제거하려면 dotnet remove package <name of dependency>와 같이 remove 명령을 사용합니다. 이 명령은 프로젝트의 .csproj 파일에서 패키지를 제거합니다.