PHP Annotated – October 2022

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 10월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 10월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미진진한 일들을 따라잡을 것입니다.

News

PHP 8.2.0 RC 5 has been released

PHP 8.2.0 RC 5가 출시 되었습니다. 일정에 따라 또다른 릴리스 후보가 전달되었습니다. 여섯 번째 RC는 11월 10일에 예정되어 있으며 PHP 8.2의 최종 릴리스 이전의 마지막 RC가 될 것입니다.

PHP 8.2에 추가될 기능에 대한 자세한 목록은 PHP.Watch 또는 stitcher.io를 참조 하십시오.

또한 PHP 8.2 in 8 code blocks(8개의 코드 블럭으로 보는 PHP 8.2)에서 확인하고 싶을 수도 있습니다.

Martin Joo(@mmartin_joo)의 트윗

Me: “Hey Joe! What do you think about modern PHP?”
Joe:

What do you think about modern PHP 이미지

PHP 8.0.25 and PHP 8.1.12 have been released

PHP 8.0.25PHP 8.1.12가 출시되었습니다.

❗현재 지원되는 브랜치의 보안 릴리스입니다. 모든 사용자는 업그레이드하는 것이 좋습니다.
업데이트는 Phar 확장 및 쿠키 무결성의 취약점을 수정합니다. PHP.Watch의 이 블로그 게시물에서 자세히 알아볼 수 있습니다.

AWS X-Ray launches support for tracing PHP applications via OpenTelemetry in public preview.

AWS X-Ray는 public preview에서 OpenTelemetry를 통한 PHP 애플리케이션 추적 지원을 시작합니다.

The RedMonk Programming Language Rankings: June 2022

RedMonk 프로그래밍 언어 순위: 2022년 6월

mwop(@mwop)의 트윗

RedMonk는 PHP가 항상 top 5, 보통은 top 4에 올라온다는 사실에 대해 이야기하지 않습니다. 그들은 상위 3위 안에 드는 언어에 대해서만 이야기하거나 다른 “인기 있는” 언어가 목록에서 오르거나 내릴 때만 이야기합니다.

PHP Core

핵심 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다루므로 간략하게만 언급하겠습니다.

✅ RFC: json_validate #PHP 8.3

RFC: json_validate

Juan Carlos Morales json_validate()는 문자열에 유효한 JSON이 포함되어 있는지 확인하는 새로운 함수를 추가할 것을 제안했습니다. 문자열을 완전히 구문 분석할 필요가 없을 때 메모리를 절약하고 JSON인지 확인하기만 하면 됩니다.

var_dump(json_validate('{ "test": { "foo": "bar" } }'));  // bool(true)
var_dump(json_validate('{ "": "": "" } }')); // bool(false)

❌✅ RFC: Improve unserialize() error handling #PHP 8.3

unserialize()의 오류 핸들링 개선

Tim Düsterhus는 직렬화 해제(역직렬화)가 실패할 때 새로운 UnserializationFailedException을 던질 것을 제안했습니다.
이 RFC는 Twitter에서 엄청난 토론https://twitter.com/nicolasgrekas/status/1581023556707618818을 일으켰고 궁극적으로 새로운 예외 부분은 받아들여지지 않았습니다. 대신, 이제 발생한 오류의 심각도가 E_NOTICE에서 E_WARNING로 증가합니다.

📣 RFC: Randomizer Additions #PHP 8.3

\Random\Randomizer에 새로운 빌딩 블록 추가

Tim Düsterhus와 Joshua Rüsweg는 \Random\Randomizer에 새로운 “빌딩 블록” 방법을 추가할 것을 제안합니다. 이러한 방법은 장황하거나 사용자 영역에서 구현하기 매우 어려운, 일반적으로 유용한 작업을 구현합니다.

namespace Random; 
final class Randomizer {
// […]
public function getBytesFromAlphabet(string $alphabet, int $length): string {}
public function nextFloat(): float {}
public function getFloat(float $min, float $max): float {}
}

📣 RFC: Destructuring Coalesce #PHP 8.3

RFC: Destructuring Coalesce

Bob Weinand는 Destructuring 할당에서 기본값에 대한 연산자를 추가할 것을 제안합니다.

$input = 'key=value';
[$key, $val ?? 'default value'] = explode('=', $input, 2);

그건 그렇고, 현재는 기본값을 다음과 같이 배열에 추가할 수 있습니다.

[$key, $val] = explode('=', $input, 2) + [null, null]

팁 주셔서 감사합니다 , Sergii Shymko!

PHP_CLI_SERVER_WORKERS

Joe Watkins(@krakjoe)의 트윗

이건 비밀로 했어야 했는데, 문서화 되어서…
#PHP CLI 서버는 7.4부터 PHP_CLI_SERVER_WORKERS를 설정하면 여러 요청을 동시에 처리할 수 있습니다 …
다양하게 문제가 되긴 했었지만 개발용의 최신 PHP 버전에서는 괜찮을 수 있습니다.

Tools

dunglas/frankenphp

dunglas/frankenphp – Go로 작성되고 Caddy 웹 서버에 포함된 최신 PHP 앱 서버입니다.

Kevin Dunglas는 이 서버와 RoadRunner의 주요 차이점을 요약했습니다.

그의 reddit 답변은,

  • Roadrunner와 FrankenPHP는 접근 방식이 다릅니다.
  • Roadrunner는 php-cli를 실행하고 GRPC를 통해 웹 서버에 연결합니다. FrankenPHP는 임시 SAPI를 사용하며 Apache의 mod_php와 더 비슷하고 Go 코드는 PHP 인터프리터를 라이브러리로 사용하며 모두 동일한 프로세스에 있습니다.
  • RoadRunner에는 작업자 모드만 있으며 호환되는 앱에서만 작동할 수 있습니다. FrankenPHP에는 모든 기존 응용 프로그램과 호환되는 “표준” 모드와 일부 코드 변경(예: RR)이 필요한 작업자 모드가 있습니다.
  • RoadRunner는 PSR-7 HTTP 메시지를 사용합니다. FrankenPHP는 일반 슈퍼글로벌과 스트림(일반 모드와 작업자 모드 모두)을 사용하며 처리된 각 요청 후에 재설정됩니다.
  • RoadRunner는 전투 테스트를 거쳤고 프로덕션 준비가 되었습니다. FrankenPHP는 실험적이며 아직 프로덕션에 사용할 준비가 되지 않았습니다.
  • FrankenPHP는 또한 Go 라이브러리로 사용되어 PHP를 Go 프로그램이나 서버에 통합할 수 있습니다(이론적으로는 FrankenPHP를 Go로 작성된 Traefik 또는 로컬 Symfony 웹 서버에 통합할 수 있어야 합니다).

krakjoe/parallel

krakjoe/parallel – PHP 8+를 위한 간결한 병렬 동시성 API. 확장은 병렬 처리에 대한 Golang의 철학을 따릅니다. “메모리를 공유하여 통신하지 마십시오. 대신 통신을 통해 메모리를 공유하십시오.” – 채널, 이벤트 및 Future와 같은 필요한 모든 브릭을 제공합니다.

cachewerk/relay

cachewerk/relay – PhpRedis 및 Predis와 같은 Redis 클라이언트이지만 PHP 확장으로 작성되었기 때문에 훨씬 빠릅니다. 저자는 캐싱을 위한 Laravel, WordPress 및 Magento 연동 기능도 제공합니다.

GitHub 페이지에 들어가보면 벤치마크 결과도 빠르게 확인할 수 있게 제공합니다. 주의 사항은,

참고: 우리는 New Relic의 열렬한 팬이지만 APM 에이전트를 활성화하면 Relay 속도가 크게 느려지고 벤치마크가 왜곡됩니다.

PhpRedis 역시 PHP 확장(extension)인데,
Relay의 Documentation을 보면 APCu와 같은 shared in-memory cache라고 소개합니다. 모든 FPM worker 간 공유되는 PHP 메모리에 보관하기 때문에 더 빠르게 동작할 수 있습니다.

Saeghe

Saeghe – 최신 PHP 패키지 관리자입니다.

PHP에는 이제 패키지 관리자가 하나 더 있습니다! GitHub 링크를 종속성으로 사용합니다. 또한 PSR-autoloading에 의존하지 않고 대신 빌드 단계에 의존합니다(패키지를 추가한 후 별도의 빌드 단계를 거친다는 뜻).

경쟁은 언제나 옳다!

composer-unused/composer-unused

composer-unused/composer-unused – 코드를 스캔하여 사용되지 않은 composer 종속성을 드러내는 패키지입니다.

square/pjson

square/pjson – 이 라이브러리는 JSON을 사용자 정의 클래스의 실제 객체로 역직렬화하는 데 도움이 됩니다. 클래스 속성에 PHP 8의 attribute를 사용하여 수행합니다.

doctrine/collections 2.0.0

doctrine/collections 2.0.0 – 더 엄격한 유형과 기본 매개변수 및 반환 유형을 추가하는 주요 업데이트를 추가된 인기 있는 컬렉션 라이브러리입니다.

heiglandreas/holidayChecker

heiglandreas/holidayChecker – 이 패키지를 사용하면 주어진 날짜가 공휴일인지, 로케일을 인식하는지 확인할 수 있습니다.

Laragon

Laragon – 또 다른 로컬 개발 환경 도구 – XAMPP 및 유사 솔루션에 대한 이식 가능하고 격리된 빠르고 강력한 대안입니다. PHP.Watch의 이 게시물에서 자세히 알아보세요.

gacela-project/gacela

gacela-project/gacela – 이 패키지는 통합된 방식으로 프로젝트를 여러 모듈로 분할하여 모듈식 PHP 애플리케이션을 빌드하는 데 도움이 됩니다. Spryker 에서 크게 영감을 받았습니다.

Symfony

Symfony: translate Assert custom messages from entities

Thomas Dutrion의 Symfony: 엔터티의 사용자 지정 Assert 메시지 번역.

❗️ Twig security release

Fabien Potencier의 Twig 보안 릴리스: 파일 시스템 로더를 사용할 때 구성된 디렉토리 외부에서 템플릿을 로드할 가능성.

CQRS Principle with Symfony Messenger

Mert Simsek의 Symfony Messenger를 사용한 CQRS 원리.

emr-dev/sf-bug-bundle

emr-dev/sf-bug-bundle – Symfony 프로파일러 페이지를 공유하기 위한 패키지입니다. 작동 방식은 다음과 같습니다.

Emojis are new Symfony’s best friends!

Alexandre Daubois의 이모지는 새로운 Symfony의 절친입니다!.

New in Symfony 6.2

Javier Eguiluz의 Symfony 6.2의 새로운 기능: 내장(built-in) 캐시, 보안, 템플릿 및 Doctrine Attribute.

Laravel

What’s new in Laravel 10?

Benjamin Crozat의 Laravel 10의 새로운 기능은? – Laravel 10은 2023년 2월 7일에 출시됩니다. 개발은 여전히 진행 중입니다.

spatie/laravel-dynamic-servers

spatie/laravel-dynamic-servers – 서버를 동적으로 생성하고 제거하기 위한 패키지입니다. 사용 방법은 다음과 같습니다.

ryangjchandler/laravel-feature-flags

ryangjchandler/laravel-feature-flags – Laravel을 위한 독자적인 기능 플래그 패키지입니다. Laravel 프로젝트에 기능 플래그를 추가하는 방법을 배우세요.

creagia/laravel-sign-pad

creagia/laravel-sign-pad – 문서에 서명하고 Eloquent 모델과 관련된 인증된 PDF를 선택적으로 생성하기 위한 패키지입니다. 사용 방법은 다음과 같습니다.

hammerstonedev/sidecar

hammerstonedev/sidecar – Laravel 애플리케이션에서 AWS Lambda 기능을 배포하고 실행하는 도구입니다.

Laravel Vapor는 훌륭한 도구이지만, 가볍게 한 두개의 기능만 배포하고 싶을 때 이 패키지를 이용할 수 있습니다. 심지어 Python, Ruby, Java 등 타 언어를 배포할 수도 있습니다.

사이드카가 하지 않는 일

  • Sidecar는 API 게이트웨이, 데이터베이스, 캐시 등을 처리 하지 않습니다 . Sidecar가 관심을 갖는 유일한 것은 Lambda 함수를 패키징, 생성, 배포 및 실행하는 것입니다.
  • 사이드카는 HTTP를 통해 기능을 실행하는 방법을 제공하지 않습니다. 제공된 메소드를 통해 라라벨 앱에서 실행해야 합니다.
  • 다른 서비스가 필요한 경우 Vapor가 설정한 인스턴스를 사용하거나 직접 설정하는 것이 좋습니다.

Using jobs instead of commands in the schedule of a Laravel app

Freek Van der Herten의 Laravel 스케줄러에서 command 대신 job 사용.

Laravel’s safety mechanisms

Aaron Francis의 Laravel의 안전 메커니즘.

고통스러운 실수를 방지하는 데 도움이 될 수 있는 Laravel의 많은 안전 기능

  • N+1 prevention
  • Partially hydrated model protection
  • Attribute typos and renamed columns
  • Mass assignment protection
  • Model strictness
  • Polymorphic mapping enforcement
  • Long-running event monitoring

📺 Laravel Bootcamp: from start to finish

Brent Roose의 Laravel Bootcamp: 처음부터 마지막까지

📺 What’s new in Laravel 9.32.0

Christoph Rumpel의 Laravel 9.32.0의 새로운 기능.

📺 Laravel’s New Strict Mode (Everything You Need to Know)

Jeffrey Way의 Laravel의 새로운 Strict 모드(당신이 알아야 할 모든 것).

기타

Why I Don’t Enjoy Writing PHP Anymore

Michael Bodnarchuk의 내가 더 이상 PHP 작성을 즐기지 않는 이유 - 클릭을 유도하는 제목에도 불구하고 이 게시물은 PHP 버전의 이전 버전과의 호환성 중단에 대한 건설적인 우려를 제기합니다.

Composer의 저자 중 한 명인 Jordi는 일부 업그레이드 문제를 해결하는 데 도움이 될 수 있는 팁을 게시했습니다:

asgrim.rs(@asgrim)의 트윗

이 논의 후에 일부 사람들은 다음과 같이 보입니다.

  1. 시맨틱 버전 관리가 무엇을 의미하는지 이해하지 못함
  2. 공개 API에 대한 BC 중단이 무엇을 의미하는지 이해하지 못합니다. 특히 semver에 관해.
  3. PHP가 semver를 엄격히 따르지 않는다는 것을 깨닫지 못합니다.
    이것들을 이해하면 수긍이 될 겁니다.

위에 대한 답변으로, Jordi Boggiano(@seldaek)의 트윗

또한 안전을 위해 --ignore-platform-req=php+를 사용하십시오
더하기 기호를 사용하면 pkg에서 8.1이 필요한 경우 php 8.2를 사용할 수 있지만, php 8.0을 사용할 수 없습니다.

All the Easter Eggs in PHP

Ayesh Karunaratne의 PHP의 모든 이스터 에그.

phpinfo() 출력에는 4월 1일에만 볼 수 있는 특별한 PHP 로고가 있습니다.
Easter Eggs in PHP 이미지

Pragmatic development 3: Telegram bot

Vladimir Martsul의 실용적인 개발 3: Telegram 봇.

Loosely coupled Microservices in PHP

Dariusz Gafka의 PHP에서 느슨하게 결합된 마이크로 서비스.

Unpacked, named and positional arguments are in a call…

Damien Seguy의 함수 호출 시 압축된(unpacked) 인수, 명명된(named) 인수 및 고정된(positional) 인수.

세 가지 인수 전달 방식을 함께 사용하는 경우를 실험합니다.

Extrinsic sorting: A benchmark

Larry Garfield의 외부 정렬: 벤치마크 – 우선 순위, 그룹, 토폴로지 및 기타 사소하지 않은 정렬을 설명합니다.

Contract Tests

Kai Sassnowski의 계약(Contract) 테스트 – 인터페이스의 모든 구현에서 일관된 동작을 보장하기 위한 테스트 작성 지침.

PHP preload VS running as a daemon (RoadRunner)

PHP preload VS 데몬으로 실행(RoadRunner) – Pavel Murzakov의 벤치마크.

Supporting Legacy PHP project: painless switching to cloud storage

Vlad Reshetilo의 레거시 PHP 프로젝트 지원: 클라우드 스토리지로의 간편한 전환 – PHP의 기본 스트림 API를 사용하기 위한 깔끔한 트릭입니다.

How to build your next PHP project with a touch of AI

Benjamin Crozat의 AI로 다음 PHP 프로젝트를 빌드하는 방법.

Modern PHP features explained – PHP 8.0 and 8.1

최신 PHP 기능 설명 - PHP 8.0 및 8.1 – Steve McDougall

Using PHP enums as method calls

Thorsten Suckow-Homberg의 메소드 호출로 PHP 열거형을 사용 – 메소드 호출을 기존 유형 값에 동적으로 매핑 – 열거형의 깔끔하고 예상치
못한 사용법입니다.

Videos

Conferences

다음 PHP 모임이 언제인지 궁금하시다면 Tomas Votruba가 그의 멋진 friendsofphp.org 모임 수집 도구로 여러분을 안내해 드리겠습니다. php.net - 이벤트: 2022년 11월 캘린더도 있습니다 .