패키지 composer.json > Require, Require-dev 분석
* 기존 선배들이 작성한 코드를 바탕으로 분석
composer.json 구조
https://xpressengine.github.io/Composer-korean-docs/doc/04-schema.md/
composer.json의 구조
composer.json의 구조 이 챕터에서는 composer.json에서 사용가능한 모든 항목에 대해서 설명하겠습니다. JSON의 구조 JSON의 구조는 문서화 형태로 포맷이 구성되어 있고, composer.json의 형태를 검증하는데
xpressengine.github.io
기존 코드의 composer.json > require, require-dev 파트
"require": {
"php": "^8.1",
"ext-json": "*",
"ext-openssl": "*",
"guzzlehttp/guzzle": "^7.7",
"netresearch/jsonmapper": "^4.2"
},
"require-dev": {
"orchestra/testbench": "^8.5",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^10.1",
"symfony/var-dumper": "^6.2"
}
[Require] : 해당 패키지에서 필요한 패키지들
1. Guzzle
HTTP 통신방법으로 Guzzle 과 CURL 이 있는데,
CURL: 비동기식 처리가 불가하므로 앞단의 요청이 끝날 때까지 기다려야고
Guzzle: (비동기식 처리가 가능한) HTTP 요청을 쉽게 보내고 웹 서비스와 쉽게 통합 할 수있는 PHP HTTP 클라이언트
- 쿼리 문자열 작성, POST 요청, 대용량 업로드 스트리밍, 대용량 다운로드 스트리밍, HTTP 쿠키 사용, JSON 데이터 업로드 등을 위한 간단한 인터페이스 입니다.
(참고: https://blog.naver.com/tang1013/222170076820)
2. netresearch/jsonmapper
중첩된 JSON 구조를 PHP 클래스에 매핑할 수 있는 PHP 라이브러리
JSON 데이터를 미리 정의된 PHP 클래스의 인스턴스로 자동 변환할 수 있습니다.
- 자동 형변환: 클래스 속성 타입이나 제공된 문서 블록을 기반으로 JSON 값을 올바른 PHP 타입으로 자동 형변환할 수 있습니다.
- 사용자 정의 핸들러: 특정 타입이나 필드에 대한 사용자 정의 핸들러를 설정할 수 있습니다.
- 중첩 구조 처리: jsonmapper는 깊게 중첩된 JSON 구조를 처리하고 중첩된 PHP 객체에 매핑할 수 있습니다.
[Require-dev] : 해당 패키지를 개발하거나 테스트를 수행하는 등에 필요한 패키지들
1. Orchestra/Testbench
Laravel 패키지를 테스트하기 위한 간단하고 편리한 방법을 제공
- 테스트 환경: 새로운 Laravel 설치를 모방하는 테스트 환경을 제공합니다. 이를 통해 패키지가 사용될 환경과 유사한 환경에서 테스트될 수 있습니다.
- 서비스 제공자 & 별칭: 패키지에 서비스 제공자나 별칭이 있다면, Orchestra/Testbench를 사용하여 테스팅에 쉽게 로드할 수 있습니다.
- 데이터베이스 테스팅: Orchestra/Testbench는 기본적으로 테스팅을 위한 메모리 내 SQLite 데이터베이스를 제공합니다. 하지만 필요한 경우 다른 데이터베이스로 쉽게 바꿀 수 있습니다.
- Laravel 기능: Laravel을 기반으로 하고 있으므로, Laravel의 모든 테스팅 기능(팩토리, 마이그레이션 등)을 사용할 수 있습니다.
2. Phpstan/phpstan
코드를 실행하지 않고도 코드의 버그를 찾을 수 있도록 도와주는 PHP의 정적 분석 도구
(Laravel의 특정 패턴과 구조를 인식하지 못할 수 있으므로 nunomaduro/larastan 추가 사용 권장)
1) PHPStan 설정 파일 생성
프로젝트 루트에 phpstan.neon 또는 phpstan.neon.dist 파일을 생성하고 아래 내용을 추가
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters:
level: max
paths:
- app
2) 분석실행
아래 명령어로 PHPStan 분석을 실행합니다:
vendor/bin/phpstan analyse
3) 자주 분석 실행시, scripts 섹션에 추가
"scripts": {
"phpstan": "vendor/bin/phpstan analyse"
}
4) 분석 실행
composer phpstan 명령어로 PHPStan 분석을 실행
3. Phpunit/phpunit
PHP 개발자들에게 널리 사용되는 테스트 프레임워크
코드의 기능과 예상되는 동작을 검증하는 단위 테스트(unit tests)와 기타 여러 종류의 테스트를 작성하고 실행가능
- Assertions: 테스트 중에 기대값과 실제값을 비교하는데 사용되는 메서드들입니다. 예: $this->assertEquals(), $this->assertTrue(), 등.
- Annotations: 테스트 메서드나 테스트 클래스에 메타데이터를 제공하기 위해 사용되는 주석. 예: @dataProvider, @depends, @group 등.
- Mock Objects: 객체의 실제 동작을 모방(mock)하여 단위 테스트에서 사용하기 위한 객체.
- Code Coverage Analysis: 테스트가 코드의 어느 부분을 커버하고 있는지 확인하게 해주는 기능. 이를 위해서는 Xdebug 확장이 필요합니다.
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase
{
public function testAddition()
{
$calculator = new Calculator();
$result = $calculator->add(1, 2);
$this->assertEquals(3, $result);
}
}
4. Symfony/var-dumper
변수를 보다 향상된 형태로 출력(dump)해주는 도구로 개발 과정에서 변수의 현재 상태나 값을 확인하고자 할 때 유용
코드 내에서 dump() 함수를 사용하여 변수를 출력