PHP Annotated – December 2022
Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 12월의 번역/해석본입니다.
이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.
안녕하세요!
PHP Annotated 12월 기사에 오신 것을 환영합니다. 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일들을 따라잡을 것입니다.
News
🎉 PHP 8.2.0 released!
PHP 8.2는 PHP 언어의 주요(major) 업데이트입니다. 여기에는 readonly classes, DNF 유형, 독립 실행형 유형으로써의 null / false / true, 새로운 랜덤마이저 API(random extension) 및 trait에서의 상수를 포함한 새로운 기능이 포함되어 있습니다.
이 릴리스에는 몇 가지 지원 중단(deprecation) 사항이 포함되어 있으며, 지원 중단된 동적 속성(dynamic property)이 아마도 가장 중요할 것입니다. 평소와 같이 성능 향상도 있습니다.
PHP 8.2의 새로운 기능에 대한 자세한 목록은 릴리스 페이지를 확인하세요.
또한 PHP.Watch에서 PHP 8.2 Highlights와 동료 Brent 의 PHP 8.2 overview 비디오를 확인하십시오.
PHP 8.2 설치/업그레이드
- Windows: 컴파일된 바이너리는 windows.php.net에서 받을 수 있습니다.
- Ubuntu/Debian: PHP 8.2는 ondrej/php PPA에서 가능합니다. 자세한 설치/업그레이드 가이드는 PHP.Watch에서 볼 수 있습니다.
- Fedora/RHEL/CentOS/Alma/Rocky: Remi 저장소에서 소프트웨어 컬렉션 php82로 사용 가능.
- Mac OS: Shivammathur/homebrew-php tap으로 Homebrew를 통해 PHP 8.2를 설치할 수 있습니다.
- Docker: PHP 8.2 이미지는 8.2* tag로 Docker Hub에서 사용할 수 있습니다.
⚠️ PHP 7 has reached end of life
PHP 7.4.33은 PHP 7의 마지막 릴리스였습니다. PHP 7은 더 이상 공식 보안 업데이트를 받지 않습니다.
그러나 RedHat 또는 Ubuntu와 같은 주요 배포판은 LTS 전제의 일부로 PHP 7.4용 보안 업데이트를 제공합니다.
PHP 8.0.26 and PHP 8.1.13 have been released
PHP 8.0.26 및 PHP 8.1.13이 릴리스되었습니다
🐛 이들은 버그 수정 릴리스 입니다.
PHP 8.0 branch는 활성 지원(active support)을 종료했으며 보안 수정 업데이트만 받게 됩니다.
🎂 PHP Foundation turns 1 year
PHP Foundation이 1년을 맞이합니다.
PHP Foundation은 1 년 전에 설립되었습니다.
지난 1년 동안 PHP 재단은 6명의 핵심 개발자의 작업을 지원 했으며 PHP 언어에 상당한 기여를 했습니다.
2022년 영향 및 투명성 보고서를 확인 하여 달성한 내용을 알아보고 2023년의 높은 수준의 목표를 확인하십시오.
OpenCollective를 통해 PHP 재단을 지원하는 것을 고려하십시오.
PhpStorm 2022.3 is out
이 주요 업데이트는 새로운 UI 미리 보기, 완전한 PHP 8.2 지원, 데이터베이스 도구의 Redis 지원, PHP용 Code Vision, quick-fix 미리 보기, Xdebug 구성 유효성 검사, ParaTest 지원, PHPDoc용 리더 모드, 그리고 다른 많은 기능들.
Symfony 6.2 is out
더 나은 이모지 지원, 액세스 토큰 인증자, 내장된 Cache+Security+Template+Doctrine Attribute, 개선된 열거형(enum) 지원 등이 있습니다.
이 새로운 릴리스의 하이라이트에 대해 알아보려면 선별된 새 기능 목록(Curated New Features)을 확인하십시오.
📺 PHP Annotated on YouTube
https://www.youtube.com/@phpannotated
PHP Annotated가 PHP Annotated 뉴스레터 외에도 이제 YouTube에 전용 PHP Annotated 채널이 있습니다.
이 채널은 PHP와 커뮤니티에 관한 것이며 Brent Roose의 첫 번째 비디오를 확인할 수 있습니다.
✅ PSR-20: Clock accepted
PSR-20: Clock이 accepted가 됐습니다.
PHP-FIG 그룹은 날짜 및 시간에 대해 권장되는 ClockInterface를 사용하여 PSR-20을 수락하고 태그를 지정했습니다.
🎉 Psalm 5 is out
Psalm 5가 출시되었습니다.
이 릴리스에는 다음과 같은 몇 가지 새로운 기능이 있습니다: list{int, string, float}, properties-of, variable templates, int-range<x, y>.
Xdebug 3.2.0 is out
이 릴리스는 PHP 8.2에 대한 지원을 추가하고 PHP 7.2-7.4에 대한 지원을 중단합니다. 함수 반환 값 을 검사하는 새로운 기능이 있으며 더 나은 경고 메시지가 제공됩니다.
PHPStan 1.9.0 has been released
이 업데이트는 PHPDoc 어설션, 목록 유형, reference에 의해 할당된 매개변수에 대한 @param-out 태그 및 기타 개선 사항을 제공합니다.
Drupal 10 is available
Symfony 6.2 및 PHP 8.1 이상 필요하며 모든 시스템에서 많은 개선 사항을 추가합니다.
PHP Core
Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다루므로 간단히 언급하겠습니다.
📣 PHP RFC: Dynamic class constant fetch #PHP 8.3
PHP RFC: 동적 클래스 상수 가져오기 #PHP 8.3
Ilija Tovilo는 클래스 상수를 찾기 위한 구문 도입을 제안했습니다.
class Foo { |
📣 RFC: Arbitrary static variable initializers #PHP 8.3
RFC: 임의의 정적 변수 이니셜라이저 #PHP 8.3
Ilija Tovilo는 정적 변수 이니셜라이저에 임의의 표현식을 포함할 수 있는 구문 확장을 제안했습니다.
function bar() { |
📣 RFC: Readonly amendments #PHP 8.3
RFC: 읽기 전용 수정안 #PHP 8.3
Nicolas Grekas 및 Máté Kocsis는 읽기 전용 속성 및 클래스를 개선하여 ‘읽기 전용이 아닌 클래스’가 ‘읽기 전용 클래스’를 확장할 수 있도록 하고 복제 중에 읽기 전용 속성이 다시 초기화되도록 할 것을 제안했습니다.
readonly class Foo { |
📊 RFC: More Appropriate Date/Time Exceptions #PHP 8.3
RFC: 보다 적절한 날짜/시간 예외 #PHP 8.3
Derick Rethans는 날짜/시간 확장 관련 예외 및 오류를 도입할 것을 제안했습니다.
📣 RFC: List\unique() and Assoc\unique() #PHP 8.3
RFC: List\unique() 와 Assoc\unique() #PHP 8.3
Ilija Tovilo는 array_unique()
에서 지원하지 않는 경우에 대해 두 가지 새로운 기능을 추가할 것을 제안했습니다.
List\unique([1, 2, 3, 1, '2', 3.0, new Foo, ['bar']]); |
📣 RFC: Unicode Text Processing #PHP 8.3
RFC: 유니코드 텍스트 처리 #PHP 8.3
Derick Rethans는 유니코드 텍스트 처리의 모든 복잡성을 알 필요 없이 훨씬 개발자 친화적으로 유니코드 텍스트를 사용하고 처리할 수
있는 새로운 Text
클래스를 도입할 것을 제안합니다.
$content = new Text('नमस्ते दुनिया'); |
Tools
@phptinker
Marcel Pociot는 @phptinker를 언급하면 GitHub issues에서 PHP 코드 블록을 평가(evaluate)하는 깔끔한 GitHub 봇을 만들었습니다.
ramsey/uuid
ramsey/uuid – 어디에서나(universally) 고유한 식별자를 생성하기 위한 패키지의 새 버전은 UUID v8 및 사용자 지정 UUID를 지원합니다.
loophp/collection
loophp/collection – 메모리 친화적인 모듈식 컬렉션 클래스가 새로운 major 버전인 7.0.0을 출시했습니다.
php-rust-tools/parser
php-rust-tools/parser – Ryan Chandler와 Saif Eddin이 Rust로 작성하며 아직 작업 중인 PHP 파서입니다.
어쩌면 당신은 언제든 순수하고 안전한 Rust를 사용하여 PHP 확장을 작성할 수 있게 해주는 도구인 PHPer에도 관심이 있을 것 입니다.
ScriptFUSION/Porter
ScriptFUSION/Porter – 규모에 맞게 데이터를 소비하고 테스트 가능한 SDK를 배포(publishing)하기 위한 내구성 있는, 비동기식으로 데이터 가져오는 도구(importer).
PHP client for OpenAI
ChatGPT가 모든 것을 대체하고 있으므로 OpenAI용 PHP 클라이언트를 확인하고 싶을 수 있습니다.
- openai-php/client – OpenAI API와 상호 작용할 수 있는 강력한 PHP API 클라이언트입니다.
orhanerday/open-ai – OpenAI GPT-3 API에 액세스하기 위한 PHP SDK입니다.
qossmic/deptrac 1.0
qossmic/deptrac 1.0 – 애플리케이션 계층 간의 종속성을 결정하기 위한 프로젝트 아키텍처 분석 도구입니다.
revoltphp/event-loop 1.0.0
revoltphp/event-loop 1.0.0 – 이 이벤트 루프는 ReactPHP와 Amphp 관리자 간의 공동 노력입니다. 이제 production에서 사용할 준비가 되었으며 다양한 응용 프로그램 및 시나리오에서 테스트되었으며 fiber를 완벽하게 지원합니다.
a docker registry, which magically adds a docker layer for each extension requested with image
Shyim(@Shyim97)의 트윗
몇 년 동안 #docker를 사용한 #PHP 확장에 짜증이 났습니다. install-php-extensions가 도움이 되지만 여전히 확장을 컴파일해야 합니다.
그래서 이미지로 요청된 각 확장에 대한 도커 레이어를 마술처럼 추가하는 도커 레지스트리를 구축합니다. 이것은 실험적입니다!
rob893/emoji-cache
rob893/emoji-cache – LRU 캐시 구현이지만 모든 식별자는 이모티콘입니다.
Symfony
API rate liming per route in Symfony 6.1 by Christian Nielebock.
Christian Nielebock의 Symfony 6.1에서 route당 API 속도 제한.
Asserting the output of Symfony console commands by Andreas Möller.
Andreas Möller의 Symfony 콘솔 명령 출력 어설션.
Discover Symfony UX components and enhance your front-end by Jakub Tobiasz.
Jakub Tobiasz의 Symfony UX 구성 요소를 살펴보고 프런트엔드를 개선하십시오.
Centralized exception handling with Symfony and custom PHP attributes by Dejan Angelov.
Dejan Angelov의 Symfony 및 맞춤형 PHP 속성을 사용한 중앙 집중식 예외 처리.
Laravel
Laravel best practices: the definitive guide for 2022 by Benjamin Crozat.
Benjamin Crozat의 Laravel best practices: 2022년 최종 가이드.
Table of contents
- Keep Laravel up to date
- Keep packages up to date
- Keep your project tested
- Stick to the default directory structure
- Use custom form requests
- Use single action controllers
- Use policies
- Prevent N+1 issues with eager loading
- Use Eloquent’s strict mode
- Use the new way of declaring accessors and mutators
- Use anonymous migrations (Laravel 8 and above)
- Use the down() method correctly
- Use dispatchAfterResponse() for long-running tasks
- Use queues for even longer running tasks
- Lazily refresh your database
- Make use of factories
- Test against the production stack whenever it’s possible
- Use database transactions
- Don’t waste API calls, use mocks
- Prevent stray HTTP requests
- Don’t track your .env file
- Don’t track your compiled CSS and JavaScript
Are Your Queue Workers … Working? by Jamison Valenta.
대기열이 실행 중인지 확인하기 위해 Envoyer의 heartbeats 사용.
Using Generators for Pagination by James Bannister.
James Bannister의 Pagination을 위한 Generator 사용.
Unique jobs and reserving resources on the queue by Tim MacDonald.
Tim MacDonald의 대기열에 있는 고유한 작업 및 예약 리소스.
ShouldBeUnique
와 WithoutOverlapping
을 활용해 큐에서의 원자적 잠금을 구현합니다.
A Look at What’s Coming to Laravel 10 by Paul Redmond.
Paul Redmond가 쓴 Laravel 10의 새로운 기능 살펴보기.
Save 1 million queries with Laravel Eager Loading by Valerio Barbera.
Valerio Barbera의 Laravel Eager Loading으로 하루에 백만 쿼리를 줄인 방법.
Rector rule set for Laravel – Even if you don’t use Rector, check out this link anyway! It has some interesting refactoring examples (diffs) for Laravel projects.
Laravel에 대한 Rector 규칙 세트 – Rector를 사용하지 않더라도 어쨌든 이 링크를 확인하십시오! Laravel 프로젝트에 대한 몇 가지 흥미로운 리팩토링 예제(diff)가 있습니다.
이외의 프레임워크
- Yii news 2022, issue 2 by Alexander Makarov.
- Yii3 Overview 1. Intro.
- Spiral 3.3.0 has been released – With a built-in OpenTelemetry support.
기타
24 Days in December
매년 12월의 첫 24일 동안 PHP 커뮤니티 회원들이 생각을 공유합니다. 다음은 언급할 가치가 있는 몇 가지입니다.
- Edward Barnard의 진화하는 PHP.
- “현재 PHP 개발 속도로는 userland가 따라갈 수 없습니다. 무언가를 주어야 합니다.”
- PHP의 개발 속도가 너무 빠르고 하위 호환을 깨는 상황을 우려하고 있습니다. “PHP 7까지는 10년 분량의 레거시 코드 베이스를 유지하고 패치하여 계속 실행할 수 있습니다”
- “현재 PHP 개발 속도로는 userland가 따라갈 수 없습니다. 무언가를 주어야 합니다.”
- Ben Scheffer의 개발자가 된다는 것은 코딩하는 방법을 아는 것과는 다릅니다.
- Sergey Panteleev의 PHP 8.2 릴리스 관리자.
- PHP 8.2 릴리스 관리자가 누구이며 무엇을 하는지
- Nigel James의 PHP에 대한 송가.
Generics via Attributes in PHP by Roman Pronskiy.
Roman Pronskiy의 PHP에서 Attribute를 통한 제네릭.
PHP에서 제네릭을 검토했던 과정과 논의 내용을 소개하고 아래와 같은 방식으로 Attribute를 활용한 제네릭을 사용하는 것은 어떤지 질문합니다.
#[<T>] |
From annotations to attributes by Grégoire Paris.
Grégoire Paris의 annotation에서 attributes까지.
Doctrine project에서 ORM의 테스트를 annotation 방식에서 attribute 방식으로 변경한 과정을 설명합니다.
Rector를 통해 쉽게 변환됐고(2개의 오류만 발견), 변경점은 Run Rector라는 커밋으로 확인해보실 수 있습니다.
How to Measure Your Type Coverage by Tomas Votruba.
Tomas Votruba 의 Type Coverage를 측정하는 방법.
A story of Lazy Loading File System Operations for better dev system performance by Benjamin Eberlei.
Benjamin Eberlei의 더 나은 개발 시스템 성능을 위한 레이지 로딩 파일 시스템 작업에 대한 이야기.
Video
📺 Writing declarative PHP by Andrew Schmelyun.
Andrew Schmelyun의 선언적 PHP 작성.
📺 What’s New in PHP 8.2 by MergePHP.
MergePHP가 제공 하는 PHP 8.2의 새로운 기능.
📺 Guido van Rossum (creator of Python) and Lex Fridman discuss the $ sign in PHP variable names
Guido van Rossum(Python 창시자)과 Lex Fridman이 PHP 변수 이름의 $ 기호에 대해 논의합니다: Lex Fridman on PHP 프로그래밍.
Conferences
- Laracon EU – Lisbon (Portugal), January 26–27, 2023.
- PHP UK Conference – London (UK), February 14–16, 2023.
- Php[tek] – Chicago (US), May 16–18, 2023.
- Laracon US – Nashville, TN, July 19–20, 2023.
해피 홀리데이, PHPers! 🎄🐘