php-annotated-november-2019
Roman Pronskiy가 쓰고 JetBrains에서 제공하는 월간 PHP Annotated Monthly 2019년 11월호의 번역본입니다.
이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.
⚡️ News & Releases
PHP 7.4.0 RC5
PHP 7.4는 11월 말 쯤 하나의 RC 만을 남겨두고 있습니다. What’s new in PHP 7.4를 확인해보세요.
PHP 7.3.11, 7.2.24, 7.1.33
https://www.php.net/ChangeLog-7.php#7.3.11
https://www.php.net/ChangeLog-7.php#7.2.24
https://www.php.net/ChangeLog-7.php#7.1.33
이 업데이트는 심각한 취약성(CVE-2019-11043)을 문제 해결을 포함합니다. 특정 형식으로 request하면 원격 코드 실행이 가능해집니다. PHP-FPM을 사용하고 있다면 당장 업데이트 하세요. 더 자세한 내용을 보고 싶으시면 이 취약성을 분석한 글을 더 읽어보세요.
그나저나 PHP 5.* 버전은 오랫동안 지원되지 않고 있고, 당연히 이 수정사항이 반영되지 않았답니다.
Xdebug 2.8.0
https://xdebug.org/#2019-10-31
PHP 7.4를 완벽히 지원하고 여러 버그 수정과 기능 개선이 있었습니다.
🐘 PHP Internals
[RFC] Union Types 2.0
https://wiki.php.net/rfc/union_types_v2#vote
Union Types 2.0 RFC가 거의 만장일치로 진행되고 있다는 소식입니다.
그러나 투표 기간이 2019-10-25 ~ 2019-11-08. 현 시점(11월 9일)에는 Status: Accepted 상태입니다. PHP 8.0에서 만나요.
더 궁금하시다면 Nikita Popov가 이야기하는 팟캐스트(🔈 PHP Internals News #33)에서 들어보세요.
그리고 지난 소식에서 들려드린 것처럼, 토론과 스펙 작업을 GitHub에서 진행했던 것이 전반적으로 성공적이었다고 합니다. 그리고 Nikita는 이런 식의 작업 흐름(GitHub RFC workflow)을 optional/test 모드로 허락할 것을 제안했습니다.
[RFC] Deprecate Backtick Operator (V2)
PHP에서 백틱(backticks, `) 문자를 사용하면 shell_exec()를 실행한 것과 동일한 효과를 볼 수 있습니다. 백틱 안의 문자열을 커맨드로 인식하고 쉘 안에서 실행할 수 있는 것이죠. 이 기능을 deprecate 시키자는 제안이 투표 중에 있습니다(반대가 많네). 이를 제안한 Mark Randall이 참여한 팟캐스트 🔈 PHP Internals News #34에서 더 자세한 이야기를 들어보세요.
[RFC] Implement new DOM Living Standard APIs in ext/dom
https://wiki.php.net/rfc/dom_living_standard_api
Benjamin Eberlei는 PHP core extension인 ext/DOM을 DOM Living Standard를 반영하자는 제안을 올렸습니다. 🔈 PHP Internals News #31에서 더 자세한 이야기를 들어보세요.
🛠 Tools
mougrim/php-xdebug-proxy
https://github.com/mougrim/php-xdebug-proxy
여러 유저가 Xdebug를 동시에 사용하기 위해선 Proxy가 필요한데요. 이를 Amp(non-blocking concurrency framework)을 활용해 PHP로 만든 것입니다.
webmozarts/console-parallelization
https://github.com/webmozarts/console-parallelization
symfony/console을 병행으로 실행할 수 있게 해주는 패키지입니다. 이런 식으로…
$ bin/console import:movies --processes 2 |
php-defer/php-defer
https://github.com/php-defer/php-defer
Go의 defer()의 PHP 버전. 이 함수에 전달된 콜백은 현재 scope을 빠져나올 때 실행됩니다. 내부에는 destructor를 사용했습니다. 사실 새로운 아이디어는 아니고 이미 phplang/scope-exit에서 구현된 바 있습니다.
spatie/phpunit-snapshot-assertions
https://github.com/spatie/phpunit-snapshot-assertions
PHPUnit에서 snapshot-testing을 지원하는 툴입니다. 객체의 상태를 확인해서 이전 테스트와 달라진 것이 있는지 확인합니다.
matteosister/GitElephant
https://github.com/matteosister/gitelephant
Git repository를 php로 다루기 위한 추상 레이어.
danog/MadelineProto
https://github.com/danog/MadelineProto
Telegram의 MTProto protocol을 위한 Async PHP client/server API입니다. Bot API 없이 Telegram과 인터렉션을 할 수 있습니다.
Symfony
Symfony 5: The Fast Track
https://www.kickstarter.com/projects/fabpot/symfony-5-the-fast-track
Fabien Potencier가 새로운 책을 쓰기 위해 crowdfunding을 진행했습니다. Symfony 5 기반의 어플리케이션을 기초부터 프로덕션 레벨까지 만드는 방법을 다룹니다.
You may have memory leaking from PHP 7 and Symfony tests.
https://jolicode.com/blog/you-may-have-memory-leaking-from-php-7-and-symfony-tests
A Week of Symfony #670 (28 October – 3 November 2019)
https://symfony.com/blog/a-week-of-symfony-670-28-october-3-november-2019
Laravel
Laravel beyond CRUD
https://stitcher.io/blog/laravel-beyond-crud
Laravel로 큰 어플리케이션을 어떻게 만들 수 있는가에 대한 책을 위해 정리하는 블로그입니다. 첫 챕터는 Domain-oriented Laravel이고, 그 안에는 PhpStorm에서 코드를 리팩토링하는 방법이 나와있습니다.
Why you should stick to the default Laravel architecture.
https://schlein.net/blog/stick-to-the-default
Crafting maintainable Laravel applications
https://jasonmccreary.me/articles/crafting-maintainable-laravel-applications/
유지보수를 지속할 수 있는 Laravel 어플리케이션 만들기
- Stay Current
- Adopt the standards
- Vanity namespaces
- Default the structure
- Where things go
- Managing packages
- Smooth bindings
- Configuring Configs
- Avoid overwriting
- Grok the framework
- Honor the MVC architecture
- Write tests
Deploying Laravel Projects to Kubernetes.
https://medium.com/swlh/deploying-laravel-projects-to-kubernetes-a29edc0b588e
🔈 Laravel Lunch Break
https://www.laravellunchbreak.com/1
Marcel Pociot와 Dries Vints의 새로운 팟캐스트 등장.
🎥 Astrocasts: Event Sourcing with Laravel and EventSauce.
https://astrocasts.com/live-sessions/projects/event-sourcing-with-laravel-and-eventsauce/session-3
🎥 A series of videos on How to use TDD to build a REST API in Laravel
https://www.youtube.com/playlist?list=PLrIm-p2rpV0F-rl4NPjNslEmW-D83AHOr
🎥 Screencasts on creating laravel-shift/blueprint.
https://www.youtube.com/watch?v=2sPfQIC7cqk
Zend/Laminas
올 해 초, Zend Framework이 Laminas로 이름을 바꾼다는 소식이 있었습니다. 프로젝트 저장소에는 Laminas로 마이그레이션 할 수 있는 laminas/laminas-migration(현재까지는 테스트 목적으로만 가능)와 guide on how to test migration문서가 존재합니다.
🌀 Async PHP
seregazhuk/php-watcher
https://github.com/seregazhuk/php-watcher
특정 디렉토리에 파일이 변경되는 것을 보면서 오랫동안 실행되는 PHP 어플리케이션을 재시작 해줍니다.
Building RESTful API With ReactPHP
https://leanpub.com/building-restful-api-with-reactphp
이 video tutorial 시리즈에 기반한 새로운 책.
apisearch-io/symfony-react-server
https://github.com/apisearch-io/symfony-react-server
Symfony Async Server built on top of ReactPHP.
기타 읽을 만한 글
What is garbage collection in PHP
PHP에서의 garbage collection을 다룬 글입니다.
Derick Rethans와 함께 토론한 팟캐스트도 확인해보세요.
An example of creating a custom inspection in PhpStorm
PhpStorm에서 custom inspection을 만드는 방법을 소개합니다. MySQL 예약어 검사기를 예로 들고 있습니다.
On using the @mixin tag in DоcBlock
https://freek.dev/1482-the-mixin-php-docblock
@mixin DocBlock으로 IDE에서 자동 완성을 지원하는 방법을 소개합니다. De facto 표준처럼 자리잡은 phpDocumentor에는 mixin tag를 지원하지 않으므로 IDE별로 다를 순 있지만 PhpStorm에선 완벽히 지원한다고 합니다.
The value of the void typehint in PHP
https://freek.dev/1481-the-value-of-the-void-typehint-in-php
void typehint의 가치. return type에 void를 명시적으로 지정하면서 의도를 명확히 하는 것을 좋아하는 것 같습니다.
Embracing simplicity in your code
https://pociot.dev/21-embracing-simplicity-in-your-code
코드에서 간결함을 유지하는 방법을 설명하고 있습니다. 이런 예제를 모아 video course를 준비하려고 한다는 군요.
어쩐지 Laracon에서 Colin DeCarlo가 발표한 동영상에서의 관점과 비슷하다는 느낌이 들었습니다.
Solving the N+1 problem in ORMs.
https://thecodingmachine.io/solving-n-plus-1-problem-in-orms
ORM에서 N+1 문제를 해결하는 방법입니다. 이 글로 여러 피드백을 받은 것 같고, 이 아이디어는 이미 많은 ORM 도구에서 도입하고 있었다고 update를 추가했네요.
PHP: Past and Future
https://blog.krakjoe.ninja/2019/10/php-past-and-future.html
PHP가 2008년 이후로 어떻게 변화했고, PHP 4와 PHP 8의 성능도 비교해줍니다.
Examples of using FFI from PHP 7.4
- Benchmarks of compressing with zstd using PHP extension and via FFI.
vdechenaux/PhpWebcam – A POC for capturing webcam frames. - vdechenaux/PhpWebcam - A POC for capturing webcam frames.
🎥 Videos
PHP Yorkshire 2019 videos
https://www.youtube.com/playlist?list=PLizA60F3A-6xi1CEmSMrR_d2vTZ4UspiO
재생 목록은 아래와 같습니다.
- Asmir Mustafic - Building Modular Architectures
- Clinton Ingrams - SOCcing: Responding to a Cyber Incident
- Damien Seguy - Top 10 PHP Classic Traps
- Daniel Shaw - Thinker, Tester, Lawyer, Spy
- Katy Ereira - Testing Legacy Code & Safe Refactoring
- Larry Garfield - Free Software: It’s not about the license
- Lorna Mitchell - A Meritocracy of Pull Requests
- Michael Heap - API Standards 2.0
- Larry Garfield - Building a cloud-friendly application
- Michelle Sanver - An introduction to Graph Databases in PHP, using Neo4j
- Vitor Brandao - Build your own Neural Network, with PHP!
PHP Serbia 2019 videos
https://www.youtube.com/playlist?list=PLizA60F3A-6xi1CEmSMrR_d2vTZ4UspiO
재생 목록은 아래와 같습니다.
- The Opening Ceremony PHP Serbia Conference 2019 | #phpsrb
- PHP Serbia Conference 2019 | Official After-movie | #phpsrb
- PHP Serbia Conference 2019 - Day 1 | #phpsrb
- PHP Serbia 2019: Zeev Suraski - Keynote Talk | #phpsrb
- Srdjan Vranac - Be nice, help the person who hacks your servers to get your data | #phpsrb
- Herberto Graca - Making architecture explicit | #phpsrb
- Rafael Dohms - Application Metrics (with Prometheus examples) | #phpsrb
- Ondřej Mirtes - Testing Strategy with the Help of a Static Analyzer | #phpsrb
- Ian Littman - Load Testing Your App | #phpsrb
- Nuno Maduro - Writing Effective PHP | #phpsrb
- Panel Discussion: Road to seniority | #phpsrb
- Marcel Pociot - Getting started with WebSockets | #phpsrb
- Ivan Jovanovic - Micro Frontends - A microservice approach to the modern web | #phpsrb
- Pauline Vos - Git Legit | #phpsrb
- Matt Brunt - Content Security Policies: Let’s Break Stuff | #phpsrb
- Sebastian Feldmann - Hello my name is “if” | #phpsrb
- Matthieu Napoli - Serverless PHP applications with Bref | #phpsrb
- Juliette Reinders Folmer - The Big “Why equal doesn’t equal” Quiz | #phpsrb
- Alexander Makarov - Yii, PHP and frameworks | #phpsrb
- Sebastian Thoss - SmokeTests - The what, why and how | #phpsrb
- Andreas Heigl - The First Contact | #phpsrb
- Damien Seguy - Top 10 PHP coding traps | #phpsrb
- Bastian Hofmann - Getting started with Kubernetes | #phpsrb
- Rowdy Rabouw - Browser APIs: the unknown Super Heroes | #phpsrb
- Gabor Nadai - 6 Things I Learned as a Lead Developer | #phpsrb
- Antonio Peric Mazar - Symfony 4: A new way to develop applications | #phpsrb
- PHP Serbia Conference 2019 Grand Opening Ceremony | #phpsrb
- Dušan Dželebdžić – interview about PHP Serbia 2019 | #phpsrb
- Andreas Heigl, software developer and speaker at PHP Serbia 2019 – interview | #phpsrb
- Alexander Makarov about PHP Serbia 2019 - interview | #phpsrb
- Marcel Pociot about PHP Serbia conferences – interview | #phpsrb
- Zeev Suraski, co-architect of PHP and co-founder of Zend about PHP Serbia 2019 Conference | #phpsrb
- Robert Bašić – interview about PHP Serbia 2019 | #phpsrb
- Thomas Dutrion - You’re not a {framework} developer! | #phpsrb
- [WORKSHOP] Marko Mitranic: Boosting your performance with Blackfire #phpsrb
- [WORKSHOP] Bastian Hofmann: Deploying your first Micro-Service application to Kubernetes #phpsrb
- [WORKSHOP] Thomas Dutrion: Symfony as a software engineer #phpsrb 2019
Beachcasts: Store sensitive data in environment variables using phpdotenv
https://www.youtube.com/watch?v=oTrJfgUF1SI
🔈 Podcasts
Taylor said
Taylor Otwell이 그의 트위터에서 지난 5 년 동안 아칸소의 작은 도시에 있는 동안 $ 10,000,000 상당의 소프트웨어를 판매했다고 합니다. 아래 링크의 Laravel Snippet 팟캐스트에서 어떻게 성공적인 제품을 만들 수 있는지 이야기 한다고 합니다.
The Undercover ElePHPant
https://undercover-elephpant.com/episodes/introducing-the-undercover-elephpant
Matthew Setter와 Benjamin Eberlei이 호스트로 있는, PHP 응용 프로그램의 확장 및 최적화에 관한 팟캐스트.
PHP Internals News #32
James Titcumb에게 듣는, 상업용 PHP extension 개발.
Interviews from php[world]: Cal Evans, Taylor Otwell, Samantha Quiñones, and Gary Hockin.
https://www.phparch.com/podcast/25-interviews-from-phpworld/