# 커스텀 패키지 생성

> Understand the development workflow for creating new UPM packages.

Unity 패키지 관리자는 Unity의 공식 패키지 관리 시스템입니다. 패키지 관리자는 다음 작업을 수행합니다.

* Unity가 빠르고 간편하게 새로운 기능을 배포하고 기존 기능을 업데이트하도록 해 줍니다.
* 사용자들이 재사용 가능한 컴포넌트를 발견하고 공유할 수 있는 플랫폼을 제공합니다.
* Unity를 확장 가능한 개방형 플랫폼으로 홍보합니다.

패키지 관리자를 사용하여 프로젝트 종속성을 정의하고, 패키지 종속성을 확인하고, 패키지를 다운로드 및 추가하고, 프로젝트에 콘텐츠를 통합할 수 있습니다.

패키지 소개와 Unity 패키지 관리자의 작동 방식에 대한 일반적인 내용은 [패키지](/engine/6000.0/manual/packages-list/packages.md) 기술 자료를 참조하십시오.

## 개요

패키지는 다음을 포함할 수 있습니다.

* C# 스크립트
* 어셈블리
* 네이티브 플러그인
* 모델, 텍스처, 애니메이션 및 오디오 클립, 기타 에셋.

**참고**: 패키지 관리자는 패키지의 스트리밍 에셋을 지원하지 않습니다. 대신 [Addressables](https://docs.unity3d.com/Packages/com.unity.addressables@latest) 패키지를 설치합니다.

또한 각 패키지는 패키지 이름, 패키지 버전, 종속성 목록, 저장소 URL 등과 같은 정보가 들어 있는 [패키지 매니페스트](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md) 파일을 포함합니다.

## 절차

새 패키지를 만들려면 다음 단계를 따르십시오.

1. 다음 방법 중 하나를 사용하여 패키지를 위한 빈 셸을 만듭니다.

   * [포함된 패키지를 설정합니다](#EmbedMe).
   * [로컬 패키지를 설정합니다](#LocalMe).

2. 폴더 구조의 레이아웃이 Unity 패키지의 [패키지 레이아웃 규칙](/engine/6000.0/manual/packages-list/custom-packages/cus-layout.md)을 따라야 합니다. 예를 들어 Editor 및 Runtime 라이브러리가 있는 경우 `Editor` 및 `Runtime` 폴더에 저장해야 합니다.

3. 패키지에 코드가 포함된 경우, 생성한 패키지 레이아웃에 필요한 어셈블리 정의 파일이 있어야 합니다. 어셈블리 정의 파일 생성 및 정의에 대한 자세한 내용은 [어셈블리 정의 및 패키지](/engine/6000.0/manual/packages-list/custom-packages/cus-asmdef.md)를 참조하십시오. 자세한 내용은 [어셈블리 정의](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md)를 참조하십시오.

   **참고**: 어셈블리 정의 파일을 추가한 후 콘솔 창에 경고가 표시되면 프로젝트를 저장하고 닫은 후 다시 엽니다.

4. 패키지에 필요한 툴, 라이브러리, 에셋을 추가합니다.

5. 패키지에 [테스트](/engine/6000.0/manual/packages-list/custom-packages/cus-tests.md)를 추가합니다. 테스트는 패키지가 다른 시나리오에서도 의도한 대로 동작하는지 확인하기 위해 반드시 필요합니다.

   * 모든 에디터 테스트를 `Tests/Editor`에 작성합니다.
   * 모든 플레이 모드 테스트를 `Tests/Runtime`에 작성합니다.

6. 패키지 샘플이 있다면 [적합한 샘플 하위 폴더](/engine/6000.0/manual/packages-list/custom-packages/cus-samples.md)에 추가합니다.

   **참고**: 패키지는 샘플만 포함할 수 있지만 동일한 레이아웃과 JSON 구조를 사용한 툴 또는 템플릿 패키지의 일부로 샘플을 포함할 수도 있습니다.

7. 새 버전을 퍼블리시할 때마다 `CHANGELOG.md` 파일을 업데이트할 수 있습니다. 모든 새로운 기능이나 버그 수정은 이 파일에 트레이스가 있어야 합니다. 선택한 변경 기록 형식에 대한 자세한 내용은 [변경 기록 유지](http://keepachangelog.com/en/1.0.0/) 기술 자료를 참조하십시오.

   이 단계는 공유하지 않는 패키지에서는 선택 사항이지만, 공유하는 패키지에는 강력하게 권장됩니다. 이를 통해 사용자는 자신에게 가장 적합한 버전을 알 수 있습니다.

   **팁**: 패키지의 `package.json` 매니페스트 파일에 있는 [changelogUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#changelogUrl) 프로퍼티를 설정하여 이 패키지의 변경 기록을 호스팅하는 외부 웹페이지로 연결되는 링크를 제공할 수 있습니다.

8. `LICENSE.md` 및 `THIRD PARTY NOTICES.md` 파일에 [라이선스 및 타사 알림을 포함](/engine/6000.0/manual/packages-list/custom-packages/cus-legal.md)할 수 있습니다.

   이 단계는 공유하지 않는 패키지에서는 선택 사항이지만, 공유하는 패키지에는 강력하게 권장됩니다. 이를 통해 사용자는 패키지를 오용하거나 타사 라이선스를 위반하는 일을 방지할 수 있습니다.

   **팁**: 패키지의 `package.json` 매니페스트 파일에 있는 [licensesUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#licensesUrl) 프로퍼티를 설정하여 이 패키지의 라이선스 부여 및 타사 알림을 호스팅하는 외부 웹페이지로 연결되는 링크를 제공할 수 있습니다.

9. 패키지를 [문서화](/engine/6000.0/manual/packages-list/custom-packages/cus-document.md)합니다.

   **팁**: 패키지의 `package.json` 매니페스트 파일에 있는 [documentationUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#documentationUrl) 프로퍼티를 설정하여 이 패키지의 기술 자료를 호스팅하는 외부 웹페이지로 연결되는 링크를 제공할 수 있습니다.

10. 패키지를 [공유](/engine/6000.0/manual/packages-list/custom-packages/cus-share.md)합니다.

## 내장된 패키지 새로 만들기

[프로젝트 폴더 내부에](/engine/6000.0/manual/packages-list/packages/upm-manifest-prj/upm-embed.md) 커스텀 패키지를 만들려면 다음 지침을 따르십시오.

**참고**: 이러한 지침은 [커스텀 패키지 생성](#procedure)을 위한 더 큰 절차의 일부입니다.

1. Unity Hub를 열고 컴퓨터에 [빈 프로젝트를 생성](https://docs.unity3d.com/hub/manual/Projects.html)합니다.

   컴퓨터의 기존 프로젝트를 사용하여 [패키지를 프로젝트 아래에 포함](/engine/6000.0/manual/packages-list/packages/upm-manifest-prj/upm-embed.md)하거나 [로컬 폴더에서 패키지를 설치](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/local.md)할 수도 있습니다. 하지만 새 프로젝트를 시작하면 패키지 콘텐츠에 오류가 발생할 가능성이 낮아집니다.

2. 컴퓨터의 파일 관리자(예: Windows 파일 탐색기 또는 macOS Finder)를 사용하여 프로젝트 폴더로 이동한 후 `Packages` 하위 디렉토리를 찾습니다.

3. `Packages` 폴더 내에서 [패키지 이름](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#name)과 일치하고 [명명 규칙](/engine/6000.0/manual/packages-list/custom-packages/cus-naming.md)을 따르는 이름을 사용하여 패키지에 대한 새 하위 디렉토리를 만듭니다. 예를 들어 패키지 이름이 `com.example.mypackage`인 경우 `com.example.mypackage`라는 하위 디렉토리를 만듭니다.

   **참고**: 이는 패키지에 에셋이 포함된 경우 특히 중요한데, 실제 폴더 이름과 상관없이 [AssetDatabase가 `Packages/<your-package-name>/Assets`와 일치하는 에셋 경로를 찾기](/engine/6000.0/script-reference/unity-editor/asset-database/load-asset-at-path.md) 때문입니다.

4. 선호하는 텍스트 에디터를 열고 패키지 폴더의 루트에 `package.json`이라는 이름의 JSON 파일을 생성합니다.

5. `package.json` 파일의 모든 [필수 및 권장 필드](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#required)를 입력합니다. 참고로 [패키지 매니페스트 예시](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#example)를 사용할 수 있습니다.

Unity를 다시 열면 새 패키지가 [패키지 관리자 창](/engine/6000.0/manual/packages-list/packages.md)과 프로젝트 창에 표시되므로 패키지 콘텐츠를 보고 수정할 수 있습니다. 프로젝트 창에서 `package.json` 파일을 선택하면 인스펙터 창에서 직접 JSON 값을 수정할 수도 있습니다.

[주요 절차](#procedure)로 돌아가 패키지 생성을 완료합니다.

## 새로운 로컬 패키지 만들기

프로젝트 폴더 외부에 커스텀 패키지를 만들려면 다음 지침을 따르십시오.

**참고**: 이러한 지침은 [커스텀 패키지 생성](#procedure)을 위한 더 큰 절차의 일부입니다.

1. 컴퓨터의 파일 관리자(예: Windows 파일 탐색기 또는 macOS Finder)를 사용하여 패키지용 폴더를 만듭니다.

   패키지의 일부 콘텐츠를 이미 만든 경우에는 기존 위치를 사용할 수도 있습니다.

2. 선호하는 텍스트 에디터를 열고 패키지 폴더의 루트에 `package.json`이라는 이름의 JSON 파일을 생성합니다.

3. `package.json` 파일의 모든 [필수 및 권장 필드](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#required)를 입력하고, `name` 프로퍼티가 [명명 규칙](/engine/6000.0/manual/packages-list/custom-packages/cus-naming.md)을 따르도록 합니다. 참고로 [패키지 매니페스트 예시](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#example)를 사용할 수 있습니다.

4. Unity에서 새 프로젝트를 만들거나 기존 프로젝트를 엽니다.

5. [패키지 관리자 창](/engine/6000.0/manual/packages-list/packages/upm-ui.md)을 열고 방금 생성한 `package.json` 파일을 사용하여 [로컬 패키지 설치](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/local.md) 지침을 따릅니다. 이 단계는 필요한 `.meta` 파일을 생성하는 데 필수적입니다.

새 패키지는 패키지 관리자 창과 프로젝트 창에 표시되므로 패키지 콘텐츠를 보고 수정할 수 있습니다. 프로젝트 창에서 `package.json` 파일을 선택하면 인스펙터 창에서 직접 JSON 값을 수정할 수도 있습니다.

[주요 절차](#procedure)로 돌아가 패키지 생성을 완료합니다.
