그누보드에 composer가 들어가다니 세상이 변하려나 봅니다 정보
그누보드에 composer가 들어가다니 세상이 변하려나 봅니다본문
https://github.com/gnuboard/g5-update/commit/8a8d018202292f56067def9cc605440789125b03
그누보드에 composer는 물론 `API`로 시작하는 namespace에 각종 클래스들... 그리고 PHP 7.4!
아찔해지네요.
근데 아마도 PHP 8.1 이상에서 composer.lock 파일이 생성된 모양입니다. 현재 구성에서는 PHP 8.1 이상에서만 동작하게 됩니다.
PHP 버전을 명시하고, 지원범위의 최소 버전에서 composer 를 다시 실행해서 lock을 갱신해야겠네요. Slim 4를 설치한 것을 보니 PHP 7.4로 명시하면 될 것 같습니다.
➜ gnuboard5 git:(feat/rest_api_G5-175) ✗ composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.
Problem 1
- firebase/php-jwt is locked to version v6.10.1 and an update of this package was not requested.
- firebase/php-jwt v6.10.1 requires php ^8.0 -> your php version (7.4.33) does not satisfy that requirement.
Problem 2
- paragonie/sodium_compat is locked to version v2.0.1 and an update of this package was not requested.
- paragonie/sodium_compat v2.0.1 requires php ^8.1 -> your php version (7.4.33) does not satisfy that requirement.
Problem 3
- psr/log is locked to version 3.0.0 and an update of this package was not requested.
- psr/log 3.0.0 requires php >=8.0.0 -> your php version (7.4.33) does not satisfy that requirement.
Problem 4
- slim/psr7 is locked to version 1.7.0 and an update of this package was not requested.
- slim/psr7 1.7.0 requires php ^8.0 -> your php version (7.4.33) does not satisfy that requirement.
Problem 5
- psr/log 3.0.0 requires php >=8.0.0 -> your php version (7.4.33) does not satisfy that requirement.
- slim/slim 4.14.0 requires psr/log ^1.1 || ^2.0 || ^3.0 -> satisfiable by psr/log[3.0.0].
- slim/slim is locked to version 4.14.0 and an update of this package was not requested.
PHP 7.4를 타겟으로 한다면 아래와 같이 되겠네요.
{
"require": {
"php": "^7.4",
"slim/psr7": "^1.6",
"slim/slim": "^4.14",
"firebase/php-jwt": "^6.10",
"paragonie/sodium_compat": "^1.21"
}
}
그리고... autoload를 구성하지 않고 기존처럼 require를 사용해서 파일을 로드하셨네요.
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/_common.php';
require __DIR__ . '/Auth/jwt.php';
require __DIR__ . '/functions.php';
require __DIR__ . '/Handlers/HttpErrorHandler.php';
require __DIR__ . '/Handlers/ShutdownHandler.php';
require __DIR__ . '/middleware.php';
require __DIR__ . '/ResponseEmitter/ResponseEmitter.php';
composer.json 파일에 "autoload" 설정을 사용하면 좋습니다. https://getcomposer.org/doc/04-schema.md#autoload
PSR-4, files를 참고하시면 됩니다.
아래와 같이 구성할 수 있겠네요.
{
"require": {
"php": "^7.4",
"slim/psr7": "^1.6",
"slim/slim": "^4.14",
"firebase/php-jwt": "^6.10",
"paragonie/sodium_compat": "^1.21"
},
"autoload": {
"psr-4": {
"API\\": "api/"
},
"files": [
"api/functions.php"
]
}
}
그럼 api/index.php 파일의 require는 아래와 같이 변경해도 됩니다.
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/_common.php';
require __DIR__ . '/Auth/jwt.php'; // 이건 PSR-4 규칙에 맞지 않음
// require __DIR__ . '/functions.php'; // autoload.files 에 구성함
require __DIR__ . '/middleware.php'; // 이건 파일을 클래스별로 분리하는 게 나을 듯
files 에는 function.php 파일을 예시로 넣었는데, middleware.php 파일은... 흠.... 이건 파일을 분리하는 것이 나을 것 같네요.
api/Auth/jwt.php 는 PSR-4 규칙에 맞지 않습니다. JwtTokenManager.php 로 파일명을 변경하는 것이 낫겠군요.
namespace가 `G5\API`, `Gnuboard\API`, `SIR\Gnuboard\API` 이런식으로 org, package 이름을 넣는 게 좋을 것 같네요. 나중에 API 외에도 네임스페이스를 확장해야할 때를 고려해서요.
- G5\API
- G5\Lib\Cache
- G5\Plugin\Browscap
- G5\Theme\Basic
그리고 이참에 dotenv도 도입되면 좋겠네요.
상수 설정이 번거롭고 업데이트 시 `ACCESS_TOKEN_SECRET_KEY` 이런거 덮어버리면 굉장히 난감해지죠.
https://github.com/symfony/dotenv
그리고! 브라우저 내에서는 어차피 로그인된 세션과 쿠키가 있을테니 그걸 활용해 인증해도 좋을 것 같습니다. JWT는 외부 서비스나 앱 등에서 활용하면 되겠고요.
그리고!
!-->!-->!-->!-->!-->5
댓글 4개
훔..나는 지금 무엇을 위해 그누6에서 매달렸던가? 하하하하하하하하하하
그누 5도 많이 발전하고 있네요!
어질어질....
Composer는 PHP에서 사용되는 의존성 관리 도구입니다. Composer의 주요 역할은 다음과 같습니다:
-
의존성 관리:
- Composer는 프로젝트에서 필요한 외부 라이브러리와 패키지를 관리합니다.
composer.json
파일을 통해 프로젝트에 필요한 라이브러리를 지정하고, Composer는 이 파일을 기반으로 모든 의존성을 설치합니다.
- Composer는 프로젝트에서 필요한 외부 라이브러리와 패키지를 관리합니다.
-
자동 로딩(Autoloading):
- Composer는 클래스 파일을 자동으로 로딩할 수 있는 기능을 제공합니다. 이를 통해 복잡한
require
혹은include
문을 사용하지 않아도 됩니다.composer.json
파일의autoload
섹션을 통해 PSR-4와 같은 표준을 따르는 자동 로딩 규칙을 설정할 수 있습니다.
- Composer는 클래스 파일을 자동으로 로딩할 수 있는 기능을 제공합니다. 이를 통해 복잡한
-
버전 관리:
- Composer는 프로젝트에 필요한 라이브러리의 특정 버전을 관리할 수 있습니다. 버전 규칙을 사용하여 프로젝트에 필요한 라이브러리의 최소 및 최대 버전을 지정할 수 있습니다.
-
의존성 충돌 방지:
- Composer는 설치된 라이브러리 간의 버전 충돌을 방지합니다.
composer.lock
파일을 사용하여 설치된 패키지의 정확한 버전을 기록하고, 이 파일을 기반으로 의존성을 정확히 재현할 수 있습니다.
- Composer는 설치된 라이브러리 간의 버전 충돌을 방지합니다.
-
패키지 업데이트:
- Composer를 사용하면 프로젝트에 사용된 패키지들을 쉽게 업데이트할 수 있습니다.
composer update
명령을 통해 모든 의존성을 최신 버전으로 갱신할 수 있으며, 특정 패키지만 업데이트할 수도 있습니다.
- Composer를 사용하면 프로젝트에 사용된 패키지들을 쉽게 업데이트할 수 있습니다.
-
패키지 배포:
- Composer를 통해 자체적인 PHP 패키지를 만들어 배포할 수 있습니다. 이를 위해
packagist.org
와 같은 공개 저장소에 패키지를 등록할 수 있습니다.
- Composer를 통해 자체적인 PHP 패키지를 만들어 배포할 수 있습니다. 이를 위해