Composer 패키지 만들기

직접 만든 코드 모듈을 Composer 패키지로 만들거나, CodeIgniter 4용 Composer 패키지를 만들 수 있습니다.

폴더 구조

다음은 Composer 패키지의 일반적인 디렉터리 구조입니다:

your-package-name/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── composer.json
├── src/
   └── YourClass.php
└── tests/
    └── YourClassTest.php

composer.json 만들기

패키지 디렉터리의 루트에 composer.json 파일을 만듭니다. 이 파일은 패키지와 그 의존성에 대한 메타데이터를 정의합니다.

composer init 명령이 파일 생성을 도와줍니다.

예를 들어, composer.json은 다음과 같은 형태일 수 있습니다:

{
    "name": "your-vendor/your-package",
    "description": "Your package description",
    "type": "library",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "YourVendor\\YourPackage\\": "src/"
        }
    },
    "authors": [
        {
            "name": "Your Name",
            "email": "yourname@example.com"
        }
    ],
    "require": {
        // Any dependencies required by your package go here
    },
    "require-dev": {
        // Any development dependencies (e.g., PHPUnit) go here
    }
}

패키지 이름

여기서 name 필드가 중요합니다. 패키지 이름은 일반적으로 모두 소문자로 “vendor-name/package-name” 형식으로 작성합니다. 일반적인 예시는 다음과 같습니다:

  • your-vendor-name: 벤더(패키지 제작자)를 식별하는 이름으로, 본인의 이름이나 조직명 등을 사용합니다.

  • your-package-name: 만드는 패키지의 이름입니다.

따라서 다른 패키지와 구별하기 위해 이름을 고유하게 만드는 것이 중요합니다. 특히 배포 시에는 고유성이 매우 중요합니다.

네임스페이스

패키지 이름은 autoload.psr4의 벤더 네임스페이스를 결정합니다.

패키지 이름이 your-vendor/your-package이면, 벤더 네임스페이스는 YourVendor이어야 합니다. 따라서 다음과 같이 작성합니다:

"autoload": {
    "psr-4": {
        "YourVendor\\YourPackage\\": "src/"
    }
},

이 설정은 Composer에게 패키지의 소스 코드를 자동으로 로드하도록 지시합니다.

라이선스 선택

오픈 소스 라이선스에 익숙하지 않다면 https://choosealicense.com/을 참조하세요. CodeIgniter를 포함한 많은 PHP 패키지가 MIT 라이선스를 사용합니다.

개발 도구 준비

코드 품질을 보장하는 데 도움이 되는 다양한 도구가 있습니다. 이러한 도구들을 사용하는 것이 좋습니다. CodeIgniter DevKit을 사용하면 이러한 도구를 쉽게 설치하고 구성할 수 있습니다.

DevKit 설치

패키지 디렉터리의 루트에서 다음 명령을 실행합니다:

composer config minimum-stability dev
composer config prefer-stable true
composer require --dev codeigniter4/devkit

DevKit은 개발에 도움이 되는 다양한 Composer 패키지를 설치하고, vendor/codeigniter4/devkit/src/Template에 해당 템플릿을 설치합니다. 그 안의 파일을 프로젝트 루트 폴더에 복사하고 필요에 맞게 편집하세요.

코딩 표준 수정기 구성

DevKit은 PHP-CS-Fixer를 기반으로 한 CodeIgniter Coding Standard을 사용하는 코딩 표준 수정기를 제공합니다.

vendor/codeigniter4/devkit/src/Template/.php-cs-fixer.dist.php를 프로젝트 루트 폴더에 복사합니다.

캐시 파일을 위한 build 폴더를 만듭니다:

your-package-name/
├── .php-cs-fixer.dist.php
├── build/

편집기에서 .php-cs-fixer.dist.php를 열고 폴더 경로를 수정합니다:

--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -7,7 +7,7 @@ use PhpCsFixer\Finder;
 $finder = Finder::create()
     ->files()
     ->in([
-        __DIR__ . '/app/',
+        __DIR__ . '/src/',
         __DIR__ . '/tests/',
     ])
     ->exclude([

이제 코딩 표준 수정기를 실행할 수 있습니다:

vendor/bin/php-cs-fixer fix --ansi --verbose --diff

composer.jsonscripts.cs-fix를 추가하면 composer cs-fix 명령으로 실행할 수 있습니다:

{
    // ...
    },
    "scripts": {
        "cs-fix": "php-cs-fixer fix --ansi --verbose --diff"
    }
}

설정 파일

사용자가 설정을 재정의할 수 있도록 허용

패키지에 설정 파일이 있고 사용자가 설정을 재정의할 수 있도록 하려면, 설정 파일을 호출할 때 config('YourConfig')처럼 짧은 클래스명과 함께 config()를 사용하세요.

그러면 사용자는 YourVendor\YourPackage\Config\YourConfig와 같은 패키지 Config 클래스를 확장하는 동일한 짧은 클래스명의 설정 클래스를 app/Config에 배치하여 패키지 설정을 재정의할 수 있습니다.

app/Config에서 설정 재정의

app/Config 폴더의 알려진 설정을 재정의하거나 추가해야 하는 경우, 암묵적 등록자를 사용할 수 있습니다.

참고 자료

공식 패키지가 일부 게시되어 있습니다. 직접 패키지를 만들 때 이 패키지들을 참고로 활용할 수 있습니다: