PHP Annotated – October 2023
Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2023년 10월호입니다.
PHP Annotated 10월호에 오신 것을 환영합니다! 엄선된 뉴스, 기사, 도구, 동영상을 통해 지난 한 달간 PHP 커뮤니티에서 가장 흥미로운 발전 사항을 요약해드립니다.
Highlights
PHP 8.3.0 RC5 has been released
https://www.php.net/archive/2023.php#2023-10-26-1
또 다른 릴리스 후보가 일정에 따라 제공되었습니다. 여섯 번째 RC는 11월 9일에 예정되어 있으며, PHP 8.3의 최종 릴리스 전 마지막 RC가 될 것입니다.
PHP 8.3에 추가되는 기능에 대한 자세한 목록은 php.watch 또는 stitcher.io를 참조하세요.
다음은 곧 출시될 버전에 대한 다른 리소스입니다:
- PHP 8.3의 새로운 PHP 오류 메시지(Damien Seguy 작성). 곧 출시될 새 PHP 버전에 익숙해지는 좋은 방법은 오류 메시지에 대해 읽어보는 것입니다.
- Readonly clones, #[Override], and json_validate: PHP 8.3의 새로운 기능 by Brent Roose.
- 라이브스트림: PHP 8.3의 새로운 기능 by Nuno Maduro.
The PHP 8.1.25 and PHP 8.2.12 bug-fix releases are now available
PHP 8.1.25 및 PHP 8.2.12 버그 수정 릴리스를 지금 사용할 수 있습니다.
What was that final
noise about after all?
PHP 커뮤니티를 뒤흔든 또 다른 소동은 stevebauman/unfinalize 패키지의 출시로 인해 발생했습니다. 이 패키지는 vendor
디렉토리에 있는 모든 라이브러리 클래스를 살펴보고 모든 클래스와 메서드에서 final
키워드를 제거합니다.
— Steve Bauman (@ste_bau) September 28, 2023
일부 개발자는 공급업체 패키지에서 클래스를 확장할 수 있기를 원하기 때문에 Unfinalize를 사용하는 것입니다. 하지만 패키지 관리자가 클래스를 최종 클래스로 표시하는 데는 그럴 만한 이유가 있습니다: 일부 클래스나 메서드를 내부에 유지하여 사용자 코드를 손상시키지 않고 수정할 수 있기를 원하기 때문입니다.
이 주제는 CS 업계에서 새로운 것이 아니며 취약한 기본 클래스 문제(fragile base class problem)로 알려져 있습니다.
예를 들어 Kotlin과 같은 일부 프로그래밍 언어에서는 클래스가 기본적으로 최종적입니다 😱. 다른 언어에서는 수정자가 단지 규칙일 뿐이지만 이를 준수하지 않으면 종속성을 업데이트하면 애플리케이션이 손상될 수 있습니다.
바로 이 부분에서 PHP 8.3의 #[Override]
속성이 도움이 될 것입니다! 어떤 이유로 클래스에서 final
을 제거한 다음 확장해야 하는 경우 PHP 8.3에서는 자식 클래스의 메소드를 #[Override]
로 표시할 수 있습니다. 이 경우 적어도 기본 클래스 메서드가 변경되면 알림을 받을 수 있습니다.
다음은 이 주제에 대한 커뮤니티의 다른 글입니다:
unfinalize
에 대한 마지막 한마디 by Grzegorz Korba.- PHP | Java | Any의 파이널 클래스 by Jose Maria Valera Reales.
- ramsey/uuid가 파이널을 사용하는 이유 by Ben Ramsey.
- 📺 Livestream: PHP Unfinalize 드라마에 대해 토론합니다 by Nuno Maduro.
PHP Core
대부분의 핵심 소식은 PHP 재단의 PHP 코어 라운드업 시리즈에서 자세히 다루고 있으므로 여기서는 몇 가지만 간략하게 언급하겠습니다:
✅ RFC: Increasing the default bcrypt cost
기본 BCrypt 비용을 늘리자는 Tim Düsterhus의 제안이 받아들여졌습니다. PHP 8.4에서는 비용이 12로 증가합니다.
보안 팁: bcrypt 라운드 늘리기 by Stephen Rees-Carter.
역자주:
Laravel에서도 기본 bcrypt 라운드를 12(성능과 보안 사이에서 최적의 지점)로 늘리는 PR이 머지되어 있습니다.
이 PR에는 관련된 논의를 따라갈 수 있는 링크와 대화가 많은데, 이중에는 bcrypt의 대안으로 알려졌던 Argon2에 관한 내용도 있습니다.
요약하자면, 일부 PHC 심사위원조차도 UX 허용 범위 연구(사용자당 인증 지연 500ms~1초)에 맞춰 인증 속도를 달성하려면 Argon2 제품군과 scrypt를 모두 “하향” 조정해야 한다는 점을 인정합니다. 동등한 인증 속도의 bcrypt보다 오프라인 공격에 대한 저항력이 떨어 집니다 (!)
역설적이게도 다중 사용자 대화형 로그인 사용 사례와 “여러 해시의 오프라인 공격 저항” 사례의 경우 적절하게 조정된 bcrypt가 여전히 우수합니다.
즉… 가장 단순하고 가장 이전 버전과 호환되는 옵션(bcrypt 비용 증가)은 현재 가장 안전한 옵션이기도 합니다.
✅ RFC: A new JIT implementation based on IR Framework
새로운 JIT 구현을 병합하자는 제안이 만장일치로 받아들여졌습니다. PHP 8.4에는 완전히 새로운 빌트인 JIT가 적용될 예정입니다.
새로운 JIT에 대한 기술적 세부 사항을 공개하는 프레젠테이션: (PDF) 차세대 PHP용 JIT의 기반이 되는 IR JIT 프레임워크가 발표되었습니다.
📣 RFC: Rounding integers as int
현재 round
, ceiling
, floor
함수는 부동 소수점을 반환하지만 2^53
이상의 정수를 사용할 경우 정밀도 손실로 인해 예상치 못한 결과가 발생합니다.
Marc Bennewitz는 정수에 대해 반올림을 수행하고 가능한 경우 결과 정수를 반환할 것을 제안합니다.
📣 RFC: RFC1867 for non-POST HTTP verbs
RFC: 비-POST HTTP 동사를 위한 RFC1867
Ilija Tovilo는 기존 기능을 사용자 영역에 노출하는 새로운 함수 request_parse_body()
를 추가하여 PUT
및 PATCH와
같은 다른 HTTP 동사에 사용할 수 있도록 제안합니다.
Tools
dunglas/frankenphp - 필요한 모든 것을 갖춘 최신 PHP 애플리케이션 서버로 자동 HTTPS, HTTP/3, 103 Early Hints, Zstandard, PHP용 워커 모드 등을 제공합니다. Caddy를 기반으로 구축되었으며 가장 간단한 구성 프로세스를 제공합니다.
utopia-php/framework – 배우기 쉬운 빠르고 가벼운 마이크로 PHP 프레임워크입니다. Appwrite team에서 유지 관리합니다.
saloonphp/saloon 3.0.0 - 멋진 API 통합 및 SDK를 구축하기 위한 패키지입니다.
phpro/soap-client 3.0.0 - SOAP를 처리해야 하는 경우 유지 관리되지 않는 PHP 확장 프로그램을 사용하지 마세요. 대신 이 범용 PHP용 SOAP 클라이언트를 사용해 보세요. 새로운 옵션이 될 수도 있습니다.
flow-php/flow - Flow PHP는 강력하게 유형화된 데이터 처리 프레임워크입니다.
benholmen/defrag - 이 패키지는 90년대 조각 모음 도구 스타일의 출력을 PHPUnit 테스트 스위트로 생성합니다.
flavioheleno/watchr - 도메인 이름과 TLS 인증서의 만료일을 확인하는 명령줄 유틸리티 및 GitHub Action입니다.
ad-aures/castopod - CodeIgniter로 구축된 오픈 소스 호스팅 플랫폼으로, 청중의 참여를 유도하고 소통하고자 하는 팟캐스터를 위해 만들어졌습니다.
PhpStorm
- 이제 Pest 플러그인을 JetBrains에서 유지 관리합니다.
- PhpStorm 2023.3 얼리 액세스 프로그램이 이제 시작되었습니다.
- LLM - 이 플러그인을 사용하면 PhpStorm에서 모든 Hugging Face 모델을 사용할 수 있습니다.
- Voices - 이 플러그인을 사용하면 코드에 음성 주석을 남길 수 있습니다 👁️👄👁️.
Symfony
Symfony turns 18 🎂
🎉 Today marks 18 years since the first public commit of the Symfony project (https://t.co/PbX1sp6poL). Big thanks to all contributors, the community, and projects that have embraced Symfony! Your dedication has made a huge impact in the #PHP ecosystem! 🚀 #OpenSource pic.twitter.com/qtp1ujHSER
— Symfony News (@symfony_en) October 18, 2023Symfony 6.4에 새롭게 추가된 기능 시리즈 by Javier Eguiluz:
Symfony로 로그인 CSRF 대응하기 by Wouter de Jong.
Symfony 7.1에는 새로운 JSON 인코더 컴포넌트도 도입됩니다.
Symfony/Workflow에는 워크플로우를 탐색하고 그래픽 표현을 볼 수 있는 새로운 프로파일러가 가되었습니다.
Laravel
- 일회용 테스트 by Tim MacDonald.
- 재미와 이익을 위해 라라벨 프롬프트 해킹하기 by Joe Tannenbaum.
- 유연하면서도 추상적인 외부 통합 구조 구축 by Ruben Van Assche.
- 깔끔하고 간결한 코드를 작성하는 데 도움이 되는 8가지 방법 by Benjamin Crozat.
- 라라벨을 사용한 데브옵스: Kubernetes 시작하기 by Martin Joo.
- .env 파일 없는 Laravel by Marco Deleu.
- TomatoPHP - Laravel/Splade로 빌드된 이 프레임워크에는 앱 빌드를 위한 수많은 플러그인과 헬퍼가 있습니다.
기타
- 2023년 모든 소프트웨어 개발자가 유니코드에 대해 알아야 할 최소한의 정보(여전히 변명의 여지가 없습니다!) by Nikita Prokopov.
이모티콘으로 문자열의 정확한 길이를 어떻게 구할 수 있을까요?
strlen('👨👩👧👦');
반환값 25.mb_strlen('👨👩👧👦');
반환값 7.grapheme_strlen('👨👩👧👦');
은 1을 반환합니다.
이 포스트에서 그 이유를 설명합니다.
- 모든 PHP 스크립트를 네이티브 단일 파일 바이너리로 전환하기 by Roman Pronskiy.
- 문서화를 위한 PHP 플레이그라운드를 만드는 방법 by Antoine Bluchet.
- 예제로 보는 PHP - Go와 Rust의 비슷한 예제에서 영감을 얻은 이 글은 PHP 초보자에게 좋은 입문서가 될 수 있습니다.
- PHP는 이상하고, 무상태이며, 아름답다 by Chris Fidao.
- 📺 PHP-FPM과 Swoole 실행 모델 비교 by Mateus Guimarães.
- 📺 PHP 제네릭은 오지 않는다… by Brent Roose.
Fun
📺 PHP는 자바스크립트보다 4배 빠릅니다! by Nuno Maduro.
php.net/robots.txt에는 아시모프의 로봇 공학 법칙이 포함되어 있습니다 🤖:
jeremeamia/mu - 이 “진짜” 🌚 마이크로 프레임워크는 단 세 줄의 코드(3-LOC)에 들어갑니다.
(new µ)->get('/hello/(?<name>\w+)', function ($app, $params) {
echo "<p>Hello, {$params['name']}!</p>";
})
->run();
Conferences
발표를 위해 방문하고 신청할 만한 다음 PHP 행사를 확인해 보세요:
- 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
- Laracon India – Udaipur, India, March 23–24, 2024. CFP 🆕
- PHP[TEK] 2024 – Chicago, IL, USA, April 23–25, 2024. CFP 🆕
- phpday 2024 – Verona, Italy, May 16–17, 2024. CFP 🆕
가까운 곳에서 다음 PHP 밋업이 언제 열리는지 궁금하다면 Tomas Votruba가 운영하는 멋진 밋업 애그리게이터 friendsofphp.org에서 확인할 수 있습니다. php.net - 이벤트에도 캘린더가 있습니다: 2023년 11월.