PHP Annotated – September 2023
Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2023년 9월호입니다.
PHP Annotated 9월호에 오신 것을 환영합니다! 엄선된 뉴스, 기사, 도구, 동영상을 통해 지난 한 달간 PHP 커뮤니티에서 가장 흥미로운 발전 사항을 요약해드립니다.
Highlights
PHP 8.0.30, PHP 8.1.22, and PHP 8.2.9 have been released
PHP 8.0.30, PHP 8.1.22 및 PHP 8.2.9가 릴리스되었습니다.
❗보안 릴리스이며 GHSA-3qrf-m4j2-pcrr(XML에서 외부 엔티티를 활성화하지 않고 로드) 및 GHSA-jqcx-ccgc-xwhv(phar_dir_read()
의 버퍼 오버플로 및 초과 읽기)에 대한 수정이 포함되어 있습니다.
아직 PHP 7.*을 사용 중이라면 Remi의 리포지토리에 백포트된 보안 수정이 포함된 업데이트가 있습니다.
PHP 8.3.0RC2 has been released
두 번째 RC가 일정에 따라 제공되었습니다. 다음 릴리스는 9월 28일에 예정된 RC3이며, PHP 8.3의 자세한 기능 목록은 php.watch 또는 stitcher.io에서 확인할 수 있습니다.
RFC Vote
Brent Roose가 RFC에 대한 커뮤니티 투표를 위한 프로젝트를 시작했습니다.
공식 RFC 투표는 내부 개발자로 제한되지만, RFC 투표는 모든 사람에게 목소리를 제공합니다. 이는 공식 PHP RFC 결과에 직접적인 영향을 미치지는 않지만 의사 결정 과정에 참여하는 사람들에게 귀중한 자료가 될 수 있습니다.
brendt/rfc-vote 프로젝트는 오픈소스이며, 브렌트가 유튜브의 PHP Annotated에서 개발 전 과정을 스트리밍하고 있습니다.
WordPress 6.3 “Lionel” is out
워드프레스 6.3 “라이오넬”이 출시되었습니다.
무엇보다도 성능이 크게 개선되었습니다.
PhpStorm 2023.2 Is Available and the PhpStorm 2023.3 roadmap has been released
PhpStorm 2023.2 사용 가능하고PhpStorm 2023.3 로드맵이 출시되었습니다.
The PHP Foundation is hiring PHP core developers
PHP 코어에 기여하거나 확장 프로그램을 개발한 경험이 있고 유급 오픈소스 작업을 하고 싶다면 이번 기회가 좋은 기회가 될 수 있습니다.
지원서 접수는 9월 30일까지입니다.
CakePHP 5 is out
이번 릴리스에서는 프레임워크 전반에 걸쳐 향상된 타입 힌트, PHPUnit 10.x로의 업그레이드, ORM의 새로운 열거형 유형 매핑 지원, PSR17 HTTP 팩토리 지원 등을 제공합니다.
Concerns over the European Union’s Cyber Resilience Act (CRA)
WordPress, Drupal, Joomla! 및 TYPO3 프로젝트는 유럽에서 오픈소스의 더 나은 미래를 위해 CRA를 개선하는 방법에 대한 비판과 권고 사항을 담은 공개 서한을 EU 입법자들에게 보냈습니다.
개인, 중소기업, 기관은 CRA에 따른 처벌을 우려해 막대한 행정적 부담이나 활동 위축(그리고 미국 기술 대기업으로의 쏠림 현상)으로 인해 방해를 받게 될 것입니다.
EU-CRA에 대한 가장 좋은 요약은 Apache Software Foundation의 이 블로그 게시물에서 확인할 수 있습니다.
TLDR;
오픈 소스를 포함한 소프트웨어는 전 세계적으로 규제를 받고 있습니다. 이 긴 블로그 게시물에서는 유럽 연합의 사이버 복원력법(Cyber Resilience Act)의 배경, 좋은 점, 결점, 오픈 소스에 미칠 수 있는 부정적인 영향에 대해 설명합니다.
더 간단하게 정리된 한글 문서를 원하시면 유럽의회 ‘사이버복원력법(CRA)’ 수정안 개요를 읽어보세요.
PHP Core
대부분의 핵심 소식은 PHP 재단의 PHP Core Roundup series에서 자세히 다루고 있으므로 여기서는 몇 가지만 간략하게 언급하겠습니다:
📣RFC: A new JIT implementation based on IR Framework
Dmitry Stogov가 별도로 개발된 IR 프레임워크에 기반한 새로운 JIT 구현을 제안합니다.
이 제안이 받아들여지면 일반 PHP 사용자는 성능 향상을 크게 느끼지 못할 수도 있습니다. 현재 상태의 새로운 JIT를 사용하면 PHP-Parser 및 AMPHP와 같이 CPU를 사용하는 애플리케이션의 속도가 약간 향상될 것입니다. 추가 최적화를 통해 속도가 더 빨라지겠지만 극적인 증가는 없을 것입니다.
새 엔진의 가장 큰 장점은 사용이 간편하다는 점입니다. PHP와는 별개의 컴포넌트로 개발되었기 때문에 IR 프로젝트는 PHP 외부에서 활용할 수 있습니다. 이는 잠재적으로 JIT 구현과 관련된 ‘버스 팩터’를 줄이는 데 도움이 될 수 있습니다.
📣RFC: DOM HTML5 parsing and serialization
Niels Dossche는 DOM 확장에 두 개의 새로운 클래스를 추가할 것을 제안합니다: DOM\HTMLDocument
와 DOM\XMLDocument
입니다.
HTMLDocument
클래스는 사양을 준수하는 HTML5 문서 구문 분석 및 직렬화에 대한 지원을 추가할 것입니다. XMLDocument
클래스는 호환성을 위해 유지되는 \DOMDocument
의 최신 대안으로 사용될 것입니다. 이 새로운 클래스는 또한 문서 로딩을 위한 보다 오용을 방지할 수 있는 API를 제공할 것입니다.
전역 네임스페이스에 있는 기존 DOM 클래스는 새 DOM 네임스페이스에서 별칭을 갖게 되므로 새 구현이 기본값이 됩니다.
Who Is Behind PHP by Christoph Rumpel.
PHP의 배후는 누구인가 by Christoph Rumpel.
이 블로그 게시물에서 Christoph는 누가 투표권을 갖는지, Karma란 무엇인지, PHP에 기여자가 되는 방법 등 PHP 개발 프로세스에서 명확하지 않은 모든 종류의 사항을 명확하게 설명합니다.
Tools
theodo-group/LLPhant - Langchain과 LLamaIndex에서 영감을 얻은 OpenAI GPT 4를 사용하는 포괄적인 PHP 생성 AI 프레임워크입니다.
이 프레임워크를 사용하면 한 줄로 함수를 자동으로 정의하고 OpenAI가 응답에서 그렇게 말하면 함수를 실행할 수 있습니다.
더 많은 예제는 이 블로그 게시물에서 확인할 수 있습니다: https://blog.theodo.com/2023/08/qdrant-llphant-generative-ai-php/. 또한 PHP로 AutoGPT 클론을 만들 수도 있습니다:Super happy that I've added a crazy simple way to make @OpenAI calls any function from your codebase with #LLPhant in #PHP 🐘
— Maxime Thoonsen 🌳 (@maxthoon) August 23, 2023
This is one of my favorite feature from #GPT4 because it opens a vast amount of possibilities.
If you don't know it, OpenAI has refined its model to… pic.twitter.com/hwH25mJap2🤩Really happy to announce AutoPHP, the autonomous agent in #PHP !
— Maxime Thoonsen 🌳 (@maxthoon) September 15, 2023
Here is a video to showcase it with the objective :
"find the name of wives or girfriends from at least 2 players from the 2023 male french football team" pic.twitter.com/AGeHhnrET6emreyarligan/enum-concern – 라라벨 컬렉션으로 손쉽게 열거를 처리할 수 있는 패키지입니다.
hyperf/hyperf – 초고속과 유연성에 중점을 둔 Swoole 기반 코루틴 프레임워크입니다.
loupe-php/loupe – 토큰화, stemming(어간추출), 오타 허용, 필터 및 지역 지원 기능을 갖춘 PHP와 SQLite만을 기반으로 하는 전체 텍스트 검색 엔진입니다.
TomasVotruba/lines – 어디서나 실행 가능한 CLI 도구로 PHP 프로젝트의 규모를 빠르게 측정할 수 있습니다.
Chemaclass/bashunit – bash 스크립트를 위한 최소한의 테스트 라이브러리입니다.
laminas/laminas-text – 멋진 아스키 텍스트 배너를 원하셨나요?
$figlet = new Laminas\Text\Figlet\Figlet();
echo $figlet->render('PHP Rocks');espocrm/espocrm – PHP로 구축된 성숙한 오픈소스 CRM입니다.
Can I PHP? – 특정 기능을 도입한 PHP 버전을 빠르게 확인할 수 있습니다.
Symfony
- 심포니 및 API 플랫폼 프로젝트를 위한 6배 더 빠른 Docker 빌드 by Kévin Dunglas.
- 새로운 Doctrine 마이그레이션 방법 by Grégoire Pineau.
- Symfony vs Flask vs Spring Boot – Usability and Speed of Codingby Sergii Demianchuk.
- 이 하나의 라이브러리로 Symfony에서 DTO의 강력한 기능을 활용하세요! by Jakub Skowron.
- Symfony 7.0 Type 선언 by Wouter de Jong.
- zenstruck/messenger-monitor-bundle – 메신저 작업자, 전송, 일정, 메시지를 모니터링할 수 있는 UI입니다.
- ❗CVE-2023-41336: symfony/ux-autocomplete Prevent injection of invalid entity ids for “autocomplete” fields by Ryan Weaver.
- ❗Twig 2 end of life by Fabien Potencier.
Laravel
- Filament 3.0.0이 출시되었습니다
- 실험: ECS에서 Symfony DI를 Laravel 컨테이너로 교체한 방법 및 Laravel 컨테이너에서 서비스를 제거하는 것은 그렇게 쉽지 않습니다 by Tomas Votruba.
- Laravel에서 사용자 정의 파일 시스템 어댑터를 만드는 방법 by Benjamin Crozat.
- Next.js의 대안으로서 Laravel의 사례 만들기 by Andrew Schmelyun.
- 라라벨 현황 설문조사 결과.
- NativePHP 튜토리얼: Mac MenuBar 애플리케이션 구축하기 by Shane D Rosenthal.
- 라라벨에서 Hashid 사용하기(UUID 대신) by Julien Bourdeau.
- 정통적이지 않은 Eloquent by Muhammed Sari.
- 그리고 이 글에서는 Shawn McCool의 Active Record에 관한 글을 읽어 보도록 여러번 강조합니다.
- thedevdojo/genesis – Laravel Folio 및 Volt로 구축된 애플리케이션 스타터 키트.
- WendellAdriel/laravel-lift – Eloquent models with PHP attributes.
- Laravel은 지구상에서 가장 행복한 개발자 커뮤니티인가 by Klint Finley – GitHub의 ReadME 프로젝트 블로그에 게시되었습니다.
기타
- 탄력적인 코드 구축: 값 객체의 힘 활용하기 by Paul Conroy.
- 불필요한 트랜지션 종속성을 제거하는 방법 by Tomas Votruba (Rector).
- PHP에서 직렬화 이해하기 작성자 by Ryan Chandler.
- 숨겨진 코드 by Derick Rethans – TIL: php.ini에서 확장을 추가하는 순서가 매우 중요하며, 특히 Xdebug는 Opcache 다음에 추가해야 합니다.
- 사용자가 제공한 INI 문자열과 파일을 구문 분석할 때 고려해야 할 보안 사항 by Ayesh Karunaratne.
- PHP Fibers: 실용적인 예제 by Keith Maika.
- The PHP stat cache explained by Benjamin Eberlei (Tideways, PHP Foundation).
- 소프트웨어 아키텍처 패턴 by Roman Dykyi – DIP, SOLID, GRASP, CQR, CQRS, 육각형 아키텍처, 계층형 아키텍처, 모듈형 모놀리스, 마이크로서비스, 이벤트 중심 아키텍처, DDD에 대한 간결한 설명입니다.
- 트래픽이 많은 여러 PHP 애플리케이션을 위한 인프라 관리 by Mohamed Said.
- PHP에서 SQLite를 벡터 저장소로 사용하기 by Andreas Gohr.
- 📺 PHP에서 Trait, Interface, Abstract 클래스를 언제 사용해야 하는가 by Andrew Schmelyun.
- 📺 Debugging FFI and PHP by Derick Rethans (Xdebug, PHP Foundation).
- PHP 8: Attributes by Brent Roose (JetBrains).
- An Internet of PHP by Timo Tijhof (Wikimedia).
- Upgrading PHP by Rasmus Schultz – 패키지 및 프로젝트의 최소 PHP 버전 요구 사항을 업그레이드하기 위한 가이드라인입니다.
Fun
디스크 조각 모음기 스타일의 PHPUnit 출력:
Update: the somebody is me, I'm doing it.
— Ben Holmen (@benholmen) September 18, 2023
My prototype is mostly working! Now to hook into the PHPUnit event system. https://t.co/0TFWShakuI pic.twitter.com/nU0LBdHZbjphpgl/flappyphpant – PHP로 작성되고 PHP-GLFW 및 VISU 프레임워크를 기반으로 하는 간단한 플래피 버드와 유사한 게임입니다.
A love snippet from Frédéric Bouchery:
for ($y = 15; $y >= -15; $y--) {
for ($x = -30; $x < 30; $x++) {
echo (
pow(pow($x*0.05, 2)+pow($y*0.1, 2)-1, 3)-
pow($x*0.05, 2)*pow(($y*0.1), 3) <= 0
) ? 'LovePHP!'[($x - $y) % 8]:' ';
}
echo "\n";
}P!LovePHP vePHP!Lov
ePHP!LovePHP!Love !LovePHP!LovePHP!
vePHP!LovePHP!LovePHP!LovePHP!LovePHP!Lov
vePHP!LovePHP!LovePHP!LovePHP!LovePHP!LoveP
vePHP!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP
ePHP!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP!
PHP!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP!L
HP!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP!Lo
P!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP!Lov
!LovePHP!LovePHP!LovePHP!LovePHP!LovePHP!Love
ovePHP!LovePHP!LovePHP!LovePHP!LovePHP!Love
ePHP!LovePHP!LovePHP!LovePHP!LovePHP!Love
PHP!LovePHP!LovePHP!LovePHP!LovePHP!LoveP
!LovePHP!LovePHP!LovePHP!LovePHP!Love
ovePHP!LovePHP!LovePHP!LovePHP!Love
ePHP!LovePHP!LovePHP!LovePHP!Love
P!LovePHP!LovePHP!LovePHP!Lov
ovePHP!LovePHP!LovePHP!Lo
PHP!LovePHP!LovePHP!L
LovePHP!LovePHP
PHP!LoveP
Lov
v
Conferences
- Longhorn PHP – Austin, TX, USA, November 2–4, 2023.
- Laracon AU – Sydney, Australia, November 16–17, 2023.
- PHPCon Poland – Zawiercie, Poland, November 17–18, 2023.
- SymfonyCon – Brussels, Belgium, December 7–8, 2023.
- Laracon EU – Amsterdam, The Netherlands, Feb 5-6, 2024. CFP 🆕
- PHP UK – London, UK, February 15–16, 2024. CFP
- PHP[TEK] 2024 – Chicago, IL, USA, April 23–25, 2024. CFP 🆕