php-annotated-november-2019

Php_annotated_monthly 이미지

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

https://tideways.com/profiler/blog/what-is-garbage-collection-in-php-and-how-do-you-make-the-most-of-it

PHP에서의 garbage collection을 다룬 글입니다.

Derick Rethans와 함께 토론한 팟캐스트도 확인해보세요.

An example of creating a custom inspection in PhpStorm

https://medium.com/@claudsonm/mysql-reserved-words-checker-for-laravel-migrations-on-phpstorm-2d34b5fcde75

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

🎥 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 SetterBenjamin Eberlei이 호스트로 있는, PHP 응용 프로그램의 확장 및 최적화에 관한 팟캐스트.

PHP Internals News #32

https://phpinternals.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/

Voices of the ElePHPant