54. [3] NuGet 패키지
NuGet 패키지를 통해서 자신이 만든 라이브러리를 전세계 개발자들에게 공개할 수 있습니다. 마찬가지로 전세계 개발자가 만들어놓은 유용한 라이브러리 및 프레임워크를 NuGet을 통해서 내려받아 프로젝트에 포함시켜 사용할 수 있습니다.
> // NuGet: 닷넷용 패키지 관리자로 NuGet 갤러리를 통해서 전세계 개발자/소비자와 공유
54.1. 패키지 관리자와 NuGet
앞서 우리는 DLL 파일로 생성되는 클래스 라이브러리 프로젝트를 만들고 나만의 라이브러리를 생성해보았습니다. 이렇게 생성된 DLL 파일은 같은 솔루션이라면 <참조 추가>
메뉴를 통해서 쉽게 참조해서 사용할 수 있습니다. 만약, 우리가 만든 DLL 파일을 전세계 개발자들과 공유해서 사용하고자 한다면 어떻게 해야할까요? 직접 DLL 파일을 전달해줄 수도 있지만, 닷넷 커뮤니티는 NuGet 공식 사이트(https://nuget.org)를 통해서 어셈블리와 같은 패키지를 공유할 수 있습니다.
54.2. [실습] 나만의 NuGet 패키지 만들기
54.2.1. 소개
나만의 NuGet 패키지를 만들고 전세계 개발자에게 공개하는 내용에 대해서 살펴보도록 하겠습니다.
54.2.2. 따라하기 1: Dul
프로젝트로 NuGet 패키지 생성
(1) 앞서 작업한 Dul
솔루션과 Dul
프로젝트를 Visual Studio로 엽니다. 여러분들은 여러 분들이 직접 작성한 클래스 라이브러리 프로젝트를 사용하면 됩니다.
(2) Dul
프로젝트에 마우스 오른쪽 버튼 클릭 후 [속성]
을 선택합니다.
그림: 프로젝트 속성 선택
(3) Dul
프로젝트의 속성 창의 패키지 탭을 열고 다음 그림과 같이 패키지 버전, 작성자, 회사, 제품, 설명 등의 란을 입력합니다. Visual Studio가 버전이 최신 버전으로 업데이트되면서 조금씩 모양이 다를 수 있습니다.
그림: 프로젝트 속성 창의 패키지 탭 살펴보기
참고로, 박용준 강사가 입력한 내용은 다음과 같습니다. 만약, 나만의 NuGet 패키지를 만들고자 한다면 아래 내용을 본인이 원하는 값으로 설정하면 됩니다. 다음의 패키지 버전은 1.1.7로 설정했지만, 이 부분도 1.0.0과 같이 원하는 버전으로 설정하면 됩니다.
- 패키지 ID: Dul
- 패키지 버전: 1.1.7
- 작성자: RedPlus
- 회사: VisualAcademy
- 제품: Dul
- 설명: Development Utility Library
- 프로젝트 URL: https://github.com/VisualAcademy/Dul
- 태그: C#, .NET Standard
(4) 패키지 탭에서 [빌드 시 NuGet 패키지 생성]
체크박스를 클릭하고 Dul
프로젝트를 다시 빌드하면 NuGet 패키지가 생성이 됩니다.
그림: 프로젝트 다시 빌드하기
(5) NuGet 패키지를 생성하는 더 편리한 방법은 프로젝트에 마우스 오른쪽 버튼 클릭시 나타나는 [팩]
메뉴를 사용하면 됩니다.
그림: Visual Studio의 팩 메뉴를 사용하여 NuGet 패키지 만들기
(6) 닷넷 스탠다드 기반의 클래스 라이브러리 프로젝트인 Dul
의 하위 폴더인 bin 폴더를 보면 Debug 또는 Release 폴더가 생깁니다. 박용준 강사는 [Release]
모드로 빌드했을 때 다음 그림과 같이 Dul.1.1.7.nupkg 파일이 생성됨을 알 수 있습니다. 앞서 속성에서 패키지 버전을 작성한 형태로 nupkg 파일이 생성됩니다. 이렇게 생성된 NUPKG 파일은 NuGet 공식 사이트에 업로드해서 외부에 공개할 수 있습니다.
그림: nupkg 파일로 생성된 NuGet 패키지 확인하기
54.2.3. 따라하기 2: NuGet 공식 사이트에 패키지 업로드하기
(1) 우리가 만든 패키지 파일을 외부에 공개할 때에는 NuGet 공식 사이트에서 진행할 수 있습니다. 웹 브라우저로 다음 사이트를 엽니다. 참고로, 이번에 진행되는 Dul.dll 파일은 박용준 강사가 등록한 순서를 보여줍니다. 만약, 본인이 만든 라이브러리를 등록하고자 한다면 Dul
이름이 아닌 본인만의 라이브러리 이름을 사용하면 됩니다. NuGet 공식 사이트는 다른 사람이 이미 등록된 패키지와 동일한 이름으로 등록되지 않습니다. 도메인과 같이 전세계 유일한 이름의 값을 설정해야 합니다.
그림: NuGet 공식 사이트
(2) NuGet 공식 사이트에서 로그인(Sign in) 링크를 클릭해서 마이크로소프트 계정으로 로그인합니다.
그림: NuGet 공식 사이트에 마이크로소프트 계정으로 로그인하기
(3) 오래전에는 NuGet 사이트 계정이 따로 있었지만, 현재는 마이크로소프트 계정으로만 로그인이 가능합니다.
그림: NuGet 공식 사이트에 로그인한 후의 모습
(4) NuGet 사이트에 정상적으로 로그인했다면 다음 그림과 같이 업로드 링크를 클릭합니다.
그림: 업로드 버튼 클릭
(5) 찾아보기(Browse…)
버튼을 클릭하여 앞서 생성한 [Dul.1.1.7.nupkg]
와 같은 나만의 라이브러리를 첨부하여 업로드합니다. 업로드된 패키지 파일은 정상적인 파일인지 유효성 검사를 진행합니다. 당연한 얘기겠지만, Dul
이름은 박용준 강사가 사용하고 있기에 이 이름으로는 업로드가 안됩니다.
그림: 생성된 NuGet 패키지 업로드
(6) 유효성 검사를 확인 후 이상이 없다면 전송(Submit) 버튼을 클릭하여 최종으로 업로드합니다.
그림: NuGet 패키지 전송 완료
(7) 업로드된 패키지는 다시 한 참의 시간동안 유효성 검사를 진행합니다. 이 시간은 박용준 강사의 환경에서 10분 이상 걸렸습니다.
그림: NuGet 사이트에 등록된 나만의 라이브러리
(8) 일반적으로 패키지가 게시가 완료되면 이메일로 전송이 됩니다. 한참의 시간이 흐른뒤에 위 리스트를 새로고침 해보면 유효성 검사를 통과하여 정상적으로 Listed되어 해당 NuGet 패키지가 전세계 사용자에게 공개가 됩니다.
그림: 패키지가 정상적으로 등록되었다는 이메일 내용
(9) 자, 드디어 나만의 라이브러리가 정상적으로 NuGet 공식 사이트에 게시(Listed)가 되었습니다.
그림: 나만의 라이브러리 등록 버전 정보
54.2.4. 마무리
여러 종류의 클래스 라이브러리 프로젝트의 결과물은 DLL 파일이고 이를 포함한 NUPKG 파일을 NuGet 공식 사이트에 업로드하는 과정을 보여드렸습니다. 박용준 강사가 만든 Dul.dll 파일은 이미 오래전에 공개가되어 사용되고 있습니다. 이번에 살펴본 내용을 통해서 독자분들도 나만의 라이브러리 만들기에 도전해보세요.
54.3. [실습] 내가 만든 NuGet 패키지 사용하기
54.3.1. 소개
NuGet 공식 사이트에 올려져 있는 나만의 라이브러리를 사용해 보겠습니다.
54.3.2. 따라하기 1: 프로젝트에 Dul
패키지 설치
(1) Dul
솔루션에 마우스 오른쪽 버튼을 클릭하여 [추가]-[새 솔루션 폴더]
를 선택한 후 NuGet.Tests
이름으로 솔루션 폴더를 생성합니다.
(2) NuGet.Tests
솔루션 폴더에 마우스 오른쪽 버튼을 클릭하여 [새 프로젝트]
를 추가합니다. 나중에는 웹, 데스크톱 등에서 참조 추가를 하겠지만, 지금은 [콘솔 앱(.NET Core)] 프로젝트 템플릿을 사용하겠습니다.
그림: 콘솔 앱 추가히기
(3) 프로젝트 이름은 Dul.NuGetPackage.Test
이름으로 설정합니다.
그림: 콘솔 앱 이름 지정하기
(4) 새롭게 생성된 콘솔 앱 프로젝트의 [종속성]
노드에 마우스 오른쪽 버튼을 클릭하여 [NuGet 패키지 관리]
메뉴를 선택합니다.
그림: NuGet 패키지 관리자 실행하기
(5) NuGet 패키지 관리자의 [찾아보기]
탭에서 Dul
을 검색합니다. 다음 그림과 같이 최신 버전의 Dul
패키지가 목록에 나타납니다. [설치]
버튼을 클릭하여 프로젝트에 DLL 파일을 추가합니다. 현재 버전은 1.1.7이지만 나중에 살펴보면 버전이 업데이트될 수 있습니다. 버전이 업데이트되도 상관없습니다.
그림: Dul 라이브러리 검색 및 설치
(6) 바로 위의 (5)번 순서에서 NuGet 패키지 관리자를 통해서 DLL 파일을 설치해도되지만 다른 방법으로는 Visual Studio의 [보기] – [다른 창] –[패키지 관리자 콘솔]
을 실행하고 다음과 같이 설치해도 됩니다.
그림: 패키지 관리자 콘솔에서 명령어로 패키지 설치하기
패키지 관리자 콘솔에서는 다음 명령어를 사용해서 DLL 파일을 다운로드했습니다. Install-Package
와 같은 다양항 명령들을 패키지 관리자 콘솔에서 사용할 수 있습니다. 현재 학습 시점에서는 이 명령 하나만 알아도 충분합니다.
PM> Install-Package Dul
54.3.3. 따라하기 2: Dul
패키지의 API를 콘솔 앱에서 테스트
(1) Dul.NuGetPackage.Test
콘솔 앱 프로젝트의 Program.cs 파일 열고 다음과 같이 코드를 작성합니다. NuGet 패키지 관리자를 통해서 내려 받은 Dul.dll 파일에 정의된 Creator
클래스, Math
클래스 등이 정상적으로 호출이됩니다.
코드: Program.cs
using System;
using Dul; // NuGet에서 내려받은 Dul.dll 파일에 대한 네임스페이스 참조
class Program
{
static void Main()
{
//[1] Creator 호출 테스트
Console.WriteLine(Creator.GetName());
//[2] Math 호출 테스트
Console.WriteLine(Dul.Math.Abs(-1234)); // System.Math와 Dul.Math 충돌 방지
//[3] StringLibrary 호출 테스트
Console.WriteLine("안녕하세요.".CutStringUnicode(6));
//[4] DateTimeUtility 호출 테스트
Console.WriteLine(DateTimeUtility.ShowTimeOrDate(DateTime.Now));
}
}
(2) 프로젝트를 시작 프로젝트로 설정 후 Ctrl+F5를 눌러 실행합니다. 정상적으로 실행됨을 확인합니다.
RedPlus
1234
안녕하...
03:13:32
C:\Program Files\dotnet\dotnet.exe(23300 프로세스)이(가) 0 코드로 인해 종료되었습니다.
이 창을 닫으려면 아무 키나 누르세요.
54.3.4. 마무리
나만의 NuGet 패키지를 만들고 전세계 닷넷 개발자들에게 공개하는 내용을 다루어 보았습니다. 현재 NuGet 사이트의 패키지들은 이처럼 간단한 유틸리티 라이브러리를 포함하여 프레임워크까지 굉장히 많은 기능들을 담고 있습니다. 여러분들도 기회가 되면 나만의 멋진 라이브러리를 작성 후 이를 NuGet 사이트를 통해서 전세계 닷넷 개발자에게 공유해 보기를 권장해 드립니다.
54.4. 장 요약
닷넷에는 기본으로 제공하지 않는 어떤 API가 있고 이를 자주 사용한다면 이를 닷넷 스탠다드 기반의 클래스 라이브러리로 만들고, 이를 테스트 프로젝트를 통해서 여러 방법으로 테스트를 하여 무결성을 가지는 API로 만든 후 다시 이를 NuGet 갤러리에 패키지로 배포하는 일련의 과정을 3개 장에 걸쳐 살펴보았습니다. 이렇게 만들어진 라이브러리는 C#의 모든 영역에서 가져다 사용할 수 있습니다. 이번 강의의 내용을 Dul
이 아닌 나만의 이름으로 라이브러리로 만든 후 NuGet에 공개해 보세요.