방법: NuGet 로컬 피드
Source: Dev.to
위에 제공된 소스 링크 외에 번역할 텍스트가 포함되어 있지 않습니다. 번역을 원하는 본문 내용을 알려주시면 한국어로 번역해 드리겠습니다.
Introduction
NuGet packages 은 .NET 개발자가 코어 라이브러리, 서드‑파티 도구, 내부 회사 구성 요소 등 재사용 가능한 코드를 공유, 버전 관리, 그리고 소비 하는 표준 방법입니다. NuGet 패키지는 기본적으로 컴파일된 어셈블리, 메타데이터, 종속성 정보를 포함하는 압축 번들이며, 이를 통해 Visual Studio와 .NET CLI가 프로젝트에 필요한 올바른 버전을 자동으로 복원할 수 있습니다.
이 시스템은 수년간 사용되어 왔으며, 일관성을 강제함으로써 효과를 발휘합니다: 이제 DLL을 직접 복사할 필요가 없고, 대신 의존성을 선언하면 NuGet이 업데이트, 충돌 및 빌드를 예측 가능하고 반복 가능한 방식으로 관리해 줍니다.
이 문서에서는 로컬 소스에 게시하는 코드를 작성하는 방법을 배웁니다.
NuGet.org의 개별 계정
패키지를 게시하고 관리하려면 개별 계정을 만들어야 합니다.
로컬 피드 / 소스
NuGet 로컬 피드는 단순히 머신이나 네트워크에 있는 폴더로, NuGet이 이를 패키지 소스로 인식하여 원격 저장소(예: nuget.org)에 게시하지 않고도 NuGet 패키지를 만들고, 저장하고, 사용할 수 있게 합니다.
로컬 피드는 빠르고 오프라인 친화적이며 사내 혹은 실험용 패키지에 이상적이지만, 정식 패키지 서버에서 제공되는 거버넌스, 버전 관리 규율, 감사 가능성은 부족합니다.
로컬 패키지를 생성해야 할 때
- 개발자가 동일한 코드를 반복해서 사용한다.
- 해당 코드는 개발자 또는 조직에 독점적이다.
- 유지보수가 쉽고 여러 버전을 동시에 제공할 수 있다.
시작 예제 1
개발자 또는 팀은 Dapper가 DateOnly와 TimeOnly 구조체를 이해하도록 타입 핸들러를 만들어야 합니다. 이는 로컬 패키지이거나 공개 패키지가 될 수 있습니다(공개 버전은 여기에서 확인하세요).
public class SqlDateOnlyTypeHandler : SqlMapper.TypeHandler
{
public override void SetValue(IDbDataParameter parameter, DateOnly date)
=> parameter.Value = date.ToDateTime(new TimeOnly(0, 0));
public override DateOnly Parse(object value) => DateOnly.FromDateTime((DateTime)value);
}
public class SqlTimeOnlyTypeHandler : SqlMapper.TypeHandler
{
public override void SetValue(IDbDataParameter parameter, TimeOnly time)
{
parameter.Value = time.ToString();
}
public override TimeOnly Parse(object value) => TimeOnly.FromTimeSpan((TimeSpan)value);
}
Starter example 2
개발자 또는 팀이 내부에서만 사용되는 독점 API를 개발합니다. 이러한 패키지는 보호되어야 합니다; 그렇지 않으면 해커가 쉽게 소스 코드를 얻을 수 있습니다. 패키지 파일은 .dll 파일만큼 쉽게 해킹될 수 있습니다.
로컬 피드/소스에 게시하기 – 도구
이 도구의 목적은 패키지 파일을 개인용 또는 개발자 팀을 위한 로컬 피드 폴더에 복사하는 것입니다.
- 소스 코드:
스크린샷
도구 사용
- package를 선택합니다.
- version을 선택합니다.
- Publish 버튼을 클릭합니다.
- 확인 대화 상자가 나타납니다; 계속하려면 Yes를 클릭합니다.
- 패키지가 이미 존재하면 덮어쓰게 됩니다.
구성
도구를 구성하려면 appsettings.json 파일을 엽니다.
PackageLocation
Microsoft Visual Studio용 로컬 NuGet 패키지가 저장된 폴더를 가리킵니다.
NuGet 패키지 소스에 대한 Visual Studio 옵션 대화 상자

ProjectItems 섹션
.nupkg 파일이 하나 이상 포함된 프로젝트 폴더 경로를 하나 이상 추가합니다.
- 경로는 프로젝트 폴더를 가리키며,
.nupkg파일 자체를 직접 가리키지는 않습니다. - 경로는 하나 이상의 Visual Studio 솔루션에 속할 수 있습니다.
예시 appsettings.json (다섯 경로)
{
"PackageLocation": "C:\\NuGetLocal",
"ProjectItems": [
{ "Path": "C:\\DotnetLand\\VS2022\\ProjectTemplates2025\\SpectreConsoleLibrary" },
{ "Path": "C:\\DotnetLand\\VS2022\\BogusTrainingSolution\\BogusLibrary" },
{ "Path": "C:\\DotnetLand\\VS2022\\SerilogSolution\\SeriLogThemesLibrary" },
{ "Path": "C:\\DotnetLand\\VS2022\\ConsoleHelpersSolution\\ConsoleConfigurationLibrary" },
{ "Path": "c:\\DotnetLand\\VS2019\\dapper-libraries\\Dapper.Handlers" }
]
}
중요
💡 DirectoryHelper.ProjectItems 메서드는 appsettings.json의 ProjectItems에 지정된 폴더를 순회합니다. 존재하고 .nupkg 파일을 포함하는 경로만 처리됩니다.
도구에 최소 하나의 .nupkg가 표시됩니다.
Summary
이 문서에서는 로컬 NuGet 패키지를 사용하는 방법과 개발자 또는 개발팀이 로컬 NuGet 패키지를 사용하고자 하는 이유, 그리고 패키지를 로컬 피드 폴더로 복사하는 도구에 대해 설명합니다. 로컬 NuGet 패키지를 작업하는 데 도움이 됩니다.
