ha-ah

로그, 게으른 로그

올여름 Redis 서버 교체 과정에서 여러 번의 장애를 겪은 후 뼈에 새기는 반성문입니다.

목차

  • 낡은 캐시 서버를 교체하라
  • 섣부른 서버 교체, 죄송합니다
  • ElastiCache의 지표들을 이해해봅니다
  • 애플리케이션 서버에서 문제를 찾아봅시다
  • 살려야 한다
  • 살려는 드렸는데…
  • 마무리
  • 부록 : 도입하는 과정에서 알게 된 잡다한 지식

낡은 캐시 서버를 교체하라

오랜 시간 큰 문제 없이 사용하던 Redis 서버가 있었습니다.

TLS 연결도 없이 default user를 사용했는데, Laravel 애플리케이션의 database.php 파일 설정은 이렇게 간단했죠.

...
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
...

보안취약점 개선 작업을 준비하던 과정에서 EOL 소식도 들었습니다(Redis 버전의 수명 종료 일정 참고).

redis eol warning 이미지

개선하는 김에 버전도 Redis 6.2 이상으로 올리고
default user를 사용하는 대신 최신 버전에서 지원하는 역할 기반 액세스 제어(RBAC)를 사용한 사용자 인증,
여기에 TLS 연결까지 적용하기로 했어요.

섣부른 서버 교체, 죄송합니다

이제 조금 더 복잡해진 설정.

'redis' => [
'client' => 'predis',
'default' => [
'scheme' => env('REDIS_SCHEME', 'tcp'),
'ssl' => ['verify_peer' => env('REDIS_VERIFY_PEER', true)],
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME', null),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
],
],

테스트 환경과 트래픽이 낮은 다른 서비스에 미리 도입해서 잘 동작하는 것은 확인했습니다.

연결 테스트:

# openssl 설치
apt-get update;apt-get install -y openssl;

# 서버 연결
openssl s_client --connect 신규레디스호스트명:6379

# 인증
AUTH <username> <password>

애플리케이션 테스트 by tinker

Psy Shell v0.9.12 (PHP 7.4.33 — cli) by Justin Hileman
>>> config('database.redis');
=> [
...
]
>>> Cache::put('test', 'testval', 1); Cache::get('test');
=> "testval"

1차 시도

오전 8시경 트래픽이 비교적 많은 서비스에 넣어봤습니다.

저희 서비스는 식당이 주 고객이라서 매장 오픈 시간부터 트래픽이 몰리는데, 특히 11시부터 2시까지를 오전 피크로 보고 있습니다.
AWS에서 운영 중인 API 서버군의 ELB Latency 지표는 일반적으로 130ms ~ 150ms 사이를 유지하고 있습니다.

여기서 ELB Latency란, “로드 밸런서가 등록된 인스턴스에 요청을 보낸 시간부터 인스턴스가 응답 헤더를 보내기 시작할 때까지 경과된 총시간(초)”을 의미합니다. (elb-cloudwatch-metrics 문서 참고)

그런데 오전 11시를 넘어서며 ELB Latency가 급격히 오르기 시작합니다.

elb latency가 오르는 모습 이미지

지표를 확인한 순간 바로 롤백을 진행했지만 5분에서 10분 정도의 장애가 발생했습니다.

바로 AWS Premium Support에 case를 열어 어떤 일이 있었는지 문의를 해봤고,
내부 툴로 확인한 결과라며 답변을 주셨는데, 요약하면 이렇습니다.

서비스 투입되고 일정 시간 동안의 지표를 비교해본 결과

  • 신 Redis로 교체 시
    • CPUUtilization: 15% -> 60% , EngineCPUutiliaztoin: 22% -> 99% , Total Cmds: 기존 대비 거의 두 배로 증가
    • HitRate는 투입 후 2시간에 걸쳐 0%에서 51%까지 상승
  • 다시 구 Redis로 교체 시
    • CPUUtilization: 15% ~ 17% , EngineCPUutiliaztoin: 16% -> 18% , Total Cmds: 20% 증가

추가로 아래와 같이 제안도 주셨습니다.

  • 가장 데이터가 적은 시간대에 Redis 교체를 고려
  • 기존 Redis의 데이터를 백업 후 Restore 하여 6.2 버젼의 Redis를 시작(캐쉬데이터의 TTL 이 너무 짧지 않으면)
  • 기존(cache.m5.large)보다 큰사이즈(cache.m5.xlarge 또는 그 이상)로 시작하였다가, 추후 Online scaling down을 통하여 크기를 줄이는 방법

아마도 RBAC을 적용하면 AUTH 명령을 추가로 실행하기 때문에 전체 커맨드 수가 많이 증가했을 것이고, 캐시가 비어 있는 새로운 서버를 띄우면서 HitRate가 지나치게 낮은 것이 문제가 됐을 거라고 판단했습니다.

2차 시도

기존 cache.m5.large(2vCPU)에서 cache.m5.xlarge(4vCPU)로 인스턴스 타입을 올렸습니다.
교체 전 스냅샷을 생성하고(10분 이내), 스냅샷으로부터 신규 Redis 서버를 생성했습니다(30분 이내)

이번에는 엔진 지표도 함께 볼 수 있게 모니터링 대시보드를 설정했습니다.

EngineCPUUtilization 추가된 1차 시도의 Redis 지표 이미지

  • 1차 장애 당시 신규 투입된 서버의 CPUUtilization, EngineCPUUtilization 지표
  • 당시에는 EngineCPUUtilization를 보고 있지 않아서 100%까지 치고 올라가는 상황을 인지하지 못했었습니다.
  • 그림에서 레디스 서버가 두 대인 것을 확인할 수 있는데, 두 대가 클러스터로 묶여(cluster mode 아님 주의) 한대가 장애가 날 경우를 대비하고 있습니다. 애플리케이션은 primary node만 바라보고 있습니다.

교체 시작!

두번째 시도에서의 Redis 지표 이미지

  • Redis는 어쩐지 안정적인 것 같았습니다.

하지만 애플리케이션 서버 쪽 ELB Latency 지표는 200ms를 넘어가고 있었고, New Relic에서 확인한 연결 지연 시간(아래 그래프)이 심상치 않아 다시 롤백을 결정했습니다.

New Relic에서 바라 본 두번째 시도에서의 Redis query 시간 이미지

두 번의 실패 이후, 많은 반성을 하면서 ‘나는 뭘 모르고 있는지’ 찬찬히 돌아보기로 했습니다.

ElastiCache의 지표들을 이해해봅니다

EngineCPUUtilization

기존 사용하던 Redis 서버와 새로 띄운 서버는 몇 가지 지표에서 차이가 나긴 했지만, 모두 AWS Redis 지표 페이지에서 권고하는 수준 안에 있었습니다.

이 문제를 해결하기 위해 CPUUtilization와 EngineCPUUtilization는 물론이고, connection 관련 지표에 집중해서 모니터링하기로 했습니다.

첫 번째 장애 때의 그래프를 다시 가져와 봅니다.

EngineCPUUtilization 추가된 1차 시도의 Redis 지표 이미지

CPUUtilization은 EngineCPUUtilization보다 낮았습니다.

CPUUtilization은 Redis 엔진(EngineCPUUtilization으로 표현)의 동작에 백그라운드 프로세스의 비용도 포함하기 때문에 이 값이 EngineCPUUtilization보다 낮은 게 이상하다고 생각했습니다.

Amazon ElastiCache for Redis 사용 설명서 > 어떤 지표를 모니터링해야 합니까? 문서를 보면, vCPU를 고려해서 알림 기준을 세워야 한다고 나와 있습니다.

일반적으로, 사용 가능한 CPU의 90%로 임계값을 설정하는 것이 좋습니다. Redis는 단일 스레드이기 때문에 실제 임계값은 노드 총 용량의 일부로 계산해야 합니다. 2개의 코어가 있는 노드 유형을 사용하는 경우를 예로 들어보겠습니다. 이 경우 CPUUtilization의 임계값은 90/2 또는 45%입니다.

당시 인스턴스 타입이 cache.m5.large였기 때문에 vCPU는 2개입니다.
위 그래프에서 CPUUtilization이 15% -> 60% 올라가는 것을 봤다면, 실제로는 30% ~ 100%구나라고 인지했어야 한다는 말입니다.

Amazon ElastiCache for Redis 사용 설명서 > Redis 지표에서의 설명에도 vCPU 2개까지의 소규모 호스트에선 CPUUtilization으로 보는 것이 더 낫다고 하는군요.

Redis 엔진 스레드의 CPU 사용률을 제공합니다. Redis는 단일 스레드이므로 이 지표를 사용하여 Redis 프로세스 자체의 로드를 분석할 수 있습니다. EngineCPUUtilization 지표는 Redis 프로세스에 대한 보다 정확한 정보를 제공합니다. 이 지표를 CPUUtilization 지표와 함께 사용할 수 있습니다. CPUUtilization은 다른 운영 체제 및 관리 프로세스를 포함하여 전체적인 서버 인스턴스의 CPU 사용률을 표시합니다. 4개 이상의 vCPU를 포함하는 대규모 노드 유형에는 EngineCPUUtilization 지표를 사용하여 조정 임계값을 모니터링하고 설정하세요.

ElastiCache 호스트에서는 백그라운드 프로세스가 관리형 데이터베이스 환경을 제공하기 위해 호스트를 모니터링합니다. 이러한 백그라운드 프로세스는 CPU 워크로드의 상당 부분을 차지할 수 있습니다. vCPU가 2개 이상(2를 초과하는)인 대규모 호스트에서는 이 점이 중요하지 않습니다. 하지만 vCPU가 2개 이하인 소규모 호스트에 영향을 줄 수 있습니다. EngineCPUUtilization 지표만 모니터링하는 경우 호스트가 Redis의 높은 CPU 사용률과 백그라운드 모니터링 프로세스의 높은 CPU 사용률로 오버로드되는 상황을 인식하지 못합니다. 따라서 vCPU가 2개 이하인 호스트의 CPUUtilization 지표를 모니터링하는 것이 좋습니다.

이 내용은 Amazon ElastiCache for Redis 사용 설명서 > 문제 해결(Troubleshooting) 문서에서도 언급됩니다.

CPU 사용량: Redis는 다중 스레드 애플리케이션입니다. 그러나 각 명령의 실행은 단일(주) 스레드에서 발생합니다. 이러한 이유로 ElastiCache는 CPUUtilization 및 EngineCPUUtilization 지표를 제공합니다. EngineCPUUtilization은 Redis 프로세스 전용 CPU 사용률을 제공하고 CPUUtilization은 모든 vCPU에 대한 사용량을 제공합니다. 두 개 이상의 vCPU가 있는 노드는 대개 CPUUtilization 및 EngineCPUUtilization의 값이 서로 다르며, 일반적으로 두 번째 값이 더 큽니다.

여기서 일반적으로 두번째 값이 더 크다고 했는데, 두번째 Redis 서버 교체 당시의 지표를 다시 가져와 볼까요?

두번째 시도에서의 Redis 지표 이미지

이때는 EngineCPUUtilization 지표가 계속 낮았습니다. 이 현상에 대해 AWS 측에 문의를 해봤는데,

CPUUtilization = Redis 사용 CPU(EngineCPUUtilization) + others (Redis 외 프로세스) 사용 CPU로 이해하면 될 듯합니다.
즉, 해당 시점에는 Redis 서비스보다 others 서비스(예를 들면, 스냅샷으로 생성 이후 스토리지 최적화를 위한 작업 ?)에 CPU가 쓰이고 있었다고 봐야 할 거 같습니다.
문서에서 일반적으로 EngineCPUUtilization이 높다는 것은 해당 서버가 Redis 용이니까 일반적으로 그렇다는 의미로 보입니다.

화면에서 보이는 CPUUtilization 지표의 피크는 35%이고 이때도 일시 연결 오류가 발생했습니다. 그렇다면 어느 시점에 위험하다고 판단해야 했을까요?

이 당시 서버는 cache.m5.xlarge(4vCPU)이기 때문에, CPUUtilization 지표의 임계값을 90/4 즉, 20% 선으로 설정하고 20%가 넘으면 위험하다고 판단했어야 했을지도 모릅니다. AWS 측의 답변도,

네 , CPUUtilization 을 기준으로 본다면 22.5 % 를 임계값으로 계산해 볼 수 있겠습니다. Redis 가 단일 Thread 로 처리되므로 단일 CPU Core 가 90% 이상 사용되지 않는 것을 임계값으로 보라는 의미로 이해됩니다.
단, 4vCPU 이상의 대규모 노드 유형에는 Redis 엔진 코어 대한 사용률을 보고하는 EngineCPUUtilization 지표를 사용할 수 있습니다. 현재 사용하시는 인스턴스 유형 상 EngineCPUUtilization 으로 CPU 부하상황을 판단하는 것이 맞을 것 같습니다.

4vCPU의 대규모 노드라서 완전한 설명이 되는 건 아니지만, 아래와 같이 분석해볼 수 있겠습니다.

  • 당시 redis 자체의 부하는 높지 않았다(EngineCPUUtilization 23%)
  • redis 이외의 프로세스에서 높은 CPU를 사용하고 있었고(22.5%를 초과) 부하의 원인이 되었다.

Amazon ElastiCache for Redis 사용 설명서 > 어떤 지표를 모니터링해야 합니까?에서 언급된 Redis 모니터링에 관한 글도 Redis 지표를 이해하는 데 많은 도움이 됩니다.

https://aws.amazon.com/ko/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/

  • 여기서는 신규 커넥션이 늘어날수록 CPUUtilization 지표가 높아질 수 있다고 (가볍게) 언급이 되어있습니다.

신규 커넥션의 수 혹은 많은 커넥션 자체가 Redis 서버의 CPU 사용량을 늘리고, 이것이 장애로까지 이어졌을 거라 가정하고 개선 계획을 짜보았습니다.

개선 과정은 다음 글로 이어집니다.

“식은땀이 흐르는 Redis 서버 교체기 2편”으로 이동

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 10월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 10월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미진진한 일들을 따라잡을 것입니다.

News

PHP 8.2.0 RC 5 has been released

PHP 8.2.0 RC 5가 출시 되었습니다. 일정에 따라 또다른 릴리스 후보가 전달되었습니다. 여섯 번째 RC는 11월 10일에 예정되어 있으며 PHP 8.2의 최종 릴리스 이전의 마지막 RC가 될 것입니다.

PHP 8.2에 추가될 기능에 대한 자세한 목록은 PHP.Watch 또는 stitcher.io를 참조 하십시오.

또한 PHP 8.2 in 8 code blocks(8개의 코드 블럭으로 보는 PHP 8.2)에서 확인하고 싶을 수도 있습니다.

Martin Joo(@mmartin_joo)의 트윗

Me: “Hey Joe! What do you think about modern PHP?”
Joe:

What do you think about modern PHP 이미지

PHP 8.0.25 and PHP 8.1.12 have been released

PHP 8.0.25PHP 8.1.12가 출시되었습니다.

❗현재 지원되는 브랜치의 보안 릴리스입니다. 모든 사용자는 업그레이드하는 것이 좋습니다.
업데이트는 Phar 확장 및 쿠키 무결성의 취약점을 수정합니다. PHP.Watch의 이 블로그 게시물에서 자세히 알아볼 수 있습니다.

AWS X-Ray launches support for tracing PHP applications via OpenTelemetry in public preview.

AWS X-Ray는 public preview에서 OpenTelemetry를 통한 PHP 애플리케이션 추적 지원을 시작합니다.

The RedMonk Programming Language Rankings: June 2022

RedMonk 프로그래밍 언어 순위: 2022년 6월

mwop(@mwop)의 트윗

RedMonk는 PHP가 항상 top 5, 보통은 top 4에 올라온다는 사실에 대해 이야기하지 않습니다. 그들은 상위 3위 안에 드는 언어에 대해서만 이야기하거나 다른 “인기 있는” 언어가 목록에서 오르거나 내릴 때만 이야기합니다.

PHP Core

핵심 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다루므로 간략하게만 언급하겠습니다.

✅ RFC: json_validate #PHP 8.3

RFC: json_validate

Juan Carlos Morales json_validate()는 문자열에 유효한 JSON이 포함되어 있는지 확인하는 새로운 함수를 추가할 것을 제안했습니다. 문자열을 완전히 구문 분석할 필요가 없을 때 메모리를 절약하고 JSON인지 확인하기만 하면 됩니다.

var_dump(json_validate('{ "test": { "foo": "bar" } }'));  // bool(true)
var_dump(json_validate('{ "": "": "" } }')); // bool(false)

❌✅ RFC: Improve unserialize() error handling #PHP 8.3

unserialize()의 오류 핸들링 개선

Tim Düsterhus는 직렬화 해제(역직렬화)가 실패할 때 새로운 UnserializationFailedException을 던질 것을 제안했습니다.
이 RFC는 Twitter에서 엄청난 토론https://twitter.com/nicolasgrekas/status/1581023556707618818을 일으켰고 궁극적으로 새로운 예외 부분은 받아들여지지 않았습니다. 대신, 이제 발생한 오류의 심각도가 E_NOTICE에서 E_WARNING로 증가합니다.

📣 RFC: Randomizer Additions #PHP 8.3

\Random\Randomizer에 새로운 빌딩 블록 추가

Tim Düsterhus와 Joshua Rüsweg는 \Random\Randomizer에 새로운 “빌딩 블록” 방법을 추가할 것을 제안합니다. 이러한 방법은 장황하거나 사용자 영역에서 구현하기 매우 어려운, 일반적으로 유용한 작업을 구현합니다.

namespace Random; 
final class Randomizer {
// […]
public function getBytesFromAlphabet(string $alphabet, int $length): string {}
public function nextFloat(): float {}
public function getFloat(float $min, float $max): float {}
}

📣 RFC: Destructuring Coalesce #PHP 8.3

RFC: Destructuring Coalesce

Bob Weinand는 Destructuring 할당에서 기본값에 대한 연산자를 추가할 것을 제안합니다.

$input = 'key=value';
[$key, $val ?? 'default value'] = explode('=', $input, 2);

그건 그렇고, 현재는 기본값을 다음과 같이 배열에 추가할 수 있습니다.

[$key, $val] = explode('=', $input, 2) + [null, null]

팁 주셔서 감사합니다 , Sergii Shymko!

PHP_CLI_SERVER_WORKERS

Joe Watkins(@krakjoe)의 트윗

이건 비밀로 했어야 했는데, 문서화 되어서…
#PHP CLI 서버는 7.4부터 PHP_CLI_SERVER_WORKERS를 설정하면 여러 요청을 동시에 처리할 수 있습니다 …
다양하게 문제가 되긴 했었지만 개발용의 최신 PHP 버전에서는 괜찮을 수 있습니다.

Tools

dunglas/frankenphp

dunglas/frankenphp – Go로 작성되고 Caddy 웹 서버에 포함된 최신 PHP 앱 서버입니다.

Kevin Dunglas는 이 서버와 RoadRunner의 주요 차이점을 요약했습니다.

그의 reddit 답변은,

  • Roadrunner와 FrankenPHP는 접근 방식이 다릅니다.
  • Roadrunner는 php-cli를 실행하고 GRPC를 통해 웹 서버에 연결합니다. FrankenPHP는 임시 SAPI를 사용하며 Apache의 mod_php와 더 비슷하고 Go 코드는 PHP 인터프리터를 라이브러리로 사용하며 모두 동일한 프로세스에 있습니다.
  • RoadRunner에는 작업자 모드만 있으며 호환되는 앱에서만 작동할 수 있습니다. FrankenPHP에는 모든 기존 응용 프로그램과 호환되는 “표준” 모드와 일부 코드 변경(예: RR)이 필요한 작업자 모드가 있습니다.
  • RoadRunner는 PSR-7 HTTP 메시지를 사용합니다. FrankenPHP는 일반 슈퍼글로벌과 스트림(일반 모드와 작업자 모드 모두)을 사용하며 처리된 각 요청 후에 재설정됩니다.
  • RoadRunner는 전투 테스트를 거쳤고 프로덕션 준비가 되었습니다. FrankenPHP는 실험적이며 아직 프로덕션에 사용할 준비가 되지 않았습니다.
  • FrankenPHP는 또한 Go 라이브러리로 사용되어 PHP를 Go 프로그램이나 서버에 통합할 수 있습니다(이론적으로는 FrankenPHP를 Go로 작성된 Traefik 또는 로컬 Symfony 웹 서버에 통합할 수 있어야 합니다).

krakjoe/parallel

krakjoe/parallel – PHP 8+를 위한 간결한 병렬 동시성 API. 확장은 병렬 처리에 대한 Golang의 철학을 따릅니다. “메모리를 공유하여 통신하지 마십시오. 대신 통신을 통해 메모리를 공유하십시오.” – 채널, 이벤트 및 Future와 같은 필요한 모든 브릭을 제공합니다.

cachewerk/relay

cachewerk/relay – PhpRedis 및 Predis와 같은 Redis 클라이언트이지만 PHP 확장으로 작성되었기 때문에 훨씬 빠릅니다. 저자는 캐싱을 위한 Laravel, WordPress 및 Magento 연동 기능도 제공합니다.

GitHub 페이지에 들어가보면 벤치마크 결과도 빠르게 확인할 수 있게 제공합니다. 주의 사항은,

참고: 우리는 New Relic의 열렬한 팬이지만 APM 에이전트를 활성화하면 Relay 속도가 크게 느려지고 벤치마크가 왜곡됩니다.

PhpRedis 역시 PHP 확장(extension)인데,
Relay의 Documentation을 보면 APCu와 같은 shared in-memory cache라고 소개합니다. 모든 FPM worker 간 공유되는 PHP 메모리에 보관하기 때문에 더 빠르게 동작할 수 있습니다.

Saeghe

Saeghe – 최신 PHP 패키지 관리자입니다.

PHP에는 이제 패키지 관리자가 하나 더 있습니다! GitHub 링크를 종속성으로 사용합니다. 또한 PSR-autoloading에 의존하지 않고 대신 빌드 단계에 의존합니다(패키지를 추가한 후 별도의 빌드 단계를 거친다는 뜻).

경쟁은 언제나 옳다!

composer-unused/composer-unused

composer-unused/composer-unused – 코드를 스캔하여 사용되지 않은 composer 종속성을 드러내는 패키지입니다.

square/pjson

square/pjson – 이 라이브러리는 JSON을 사용자 정의 클래스의 실제 객체로 역직렬화하는 데 도움이 됩니다. 클래스 속성에 PHP 8의 attribute를 사용하여 수행합니다.

doctrine/collections 2.0.0

doctrine/collections 2.0.0 – 더 엄격한 유형과 기본 매개변수 및 반환 유형을 추가하는 주요 업데이트를 추가된 인기 있는 컬렉션 라이브러리입니다.

heiglandreas/holidayChecker

heiglandreas/holidayChecker – 이 패키지를 사용하면 주어진 날짜가 공휴일인지, 로케일을 인식하는지 확인할 수 있습니다.

Laragon

Laragon – 또 다른 로컬 개발 환경 도구 – XAMPP 및 유사 솔루션에 대한 이식 가능하고 격리된 빠르고 강력한 대안입니다. PHP.Watch의 이 게시물에서 자세히 알아보세요.

gacela-project/gacela

gacela-project/gacela – 이 패키지는 통합된 방식으로 프로젝트를 여러 모듈로 분할하여 모듈식 PHP 애플리케이션을 빌드하는 데 도움이 됩니다. Spryker 에서 크게 영감을 받았습니다.

Symfony

Symfony: translate Assert custom messages from entities

Thomas Dutrion의 Symfony: 엔터티의 사용자 지정 Assert 메시지 번역.

❗️ Twig security release

Fabien Potencier의 Twig 보안 릴리스: 파일 시스템 로더를 사용할 때 구성된 디렉토리 외부에서 템플릿을 로드할 가능성.

CQRS Principle with Symfony Messenger

Mert Simsek의 Symfony Messenger를 사용한 CQRS 원리.

emr-dev/sf-bug-bundle

emr-dev/sf-bug-bundle – Symfony 프로파일러 페이지를 공유하기 위한 패키지입니다. 작동 방식은 다음과 같습니다.

Emojis are new Symfony’s best friends!

Alexandre Daubois의 이모지는 새로운 Symfony의 절친입니다!.

New in Symfony 6.2

Javier Eguiluz의 Symfony 6.2의 새로운 기능: 내장(built-in) 캐시, 보안, 템플릿 및 Doctrine Attribute.

Laravel

What’s new in Laravel 10?

Benjamin Crozat의 Laravel 10의 새로운 기능은? – Laravel 10은 2023년 2월 7일에 출시됩니다. 개발은 여전히 진행 중입니다.

spatie/laravel-dynamic-servers

spatie/laravel-dynamic-servers – 서버를 동적으로 생성하고 제거하기 위한 패키지입니다. 사용 방법은 다음과 같습니다.

ryangjchandler/laravel-feature-flags

ryangjchandler/laravel-feature-flags – Laravel을 위한 독자적인 기능 플래그 패키지입니다. Laravel 프로젝트에 기능 플래그를 추가하는 방법을 배우세요.

creagia/laravel-sign-pad

creagia/laravel-sign-pad – 문서에 서명하고 Eloquent 모델과 관련된 인증된 PDF를 선택적으로 생성하기 위한 패키지입니다. 사용 방법은 다음과 같습니다.

hammerstonedev/sidecar

hammerstonedev/sidecar – Laravel 애플리케이션에서 AWS Lambda 기능을 배포하고 실행하는 도구입니다.

Laravel Vapor는 훌륭한 도구이지만, 가볍게 한 두개의 기능만 배포하고 싶을 때 이 패키지를 이용할 수 있습니다. 심지어 Python, Ruby, Java 등 타 언어를 배포할 수도 있습니다.

사이드카가 하지 않는 일

  • Sidecar는 API 게이트웨이, 데이터베이스, 캐시 등을 처리 하지 않습니다 . Sidecar가 관심을 갖는 유일한 것은 Lambda 함수를 패키징, 생성, 배포 및 실행하는 것입니다.
  • 사이드카는 HTTP를 통해 기능을 실행하는 방법을 제공하지 않습니다. 제공된 메소드를 통해 라라벨 앱에서 실행해야 합니다.
  • 다른 서비스가 필요한 경우 Vapor가 설정한 인스턴스를 사용하거나 직접 설정하는 것이 좋습니다.

Using jobs instead of commands in the schedule of a Laravel app

Freek Van der Herten의 Laravel 스케줄러에서 command 대신 job 사용.

Laravel’s safety mechanisms

Aaron Francis의 Laravel의 안전 메커니즘.

고통스러운 실수를 방지하는 데 도움이 될 수 있는 Laravel의 많은 안전 기능

  • N+1 prevention
  • Partially hydrated model protection
  • Attribute typos and renamed columns
  • Mass assignment protection
  • Model strictness
  • Polymorphic mapping enforcement
  • Long-running event monitoring

📺 Laravel Bootcamp: from start to finish

Brent Roose의 Laravel Bootcamp: 처음부터 마지막까지

📺 What’s new in Laravel 9.32.0

Christoph Rumpel의 Laravel 9.32.0의 새로운 기능.

📺 Laravel’s New Strict Mode (Everything You Need to Know)

Jeffrey Way의 Laravel의 새로운 Strict 모드(당신이 알아야 할 모든 것).

기타

Why I Don’t Enjoy Writing PHP Anymore

Michael Bodnarchuk의 내가 더 이상 PHP 작성을 즐기지 않는 이유 - 클릭을 유도하는 제목에도 불구하고 이 게시물은 PHP 버전의 이전 버전과의 호환성 중단에 대한 건설적인 우려를 제기합니다.

Composer의 저자 중 한 명인 Jordi는 일부 업그레이드 문제를 해결하는 데 도움이 될 수 있는 팁을 게시했습니다:

asgrim.rs(@asgrim)의 트윗

이 논의 후에 일부 사람들은 다음과 같이 보입니다.

  1. 시맨틱 버전 관리가 무엇을 의미하는지 이해하지 못함
  2. 공개 API에 대한 BC 중단이 무엇을 의미하는지 이해하지 못합니다. 특히 semver에 관해.
  3. PHP가 semver를 엄격히 따르지 않는다는 것을 깨닫지 못합니다.
    이것들을 이해하면 수긍이 될 겁니다.

위에 대한 답변으로, Jordi Boggiano(@seldaek)의 트윗

또한 안전을 위해 --ignore-platform-req=php+를 사용하십시오
더하기 기호를 사용하면 pkg에서 8.1이 필요한 경우 php 8.2를 사용할 수 있지만, php 8.0을 사용할 수 없습니다.

All the Easter Eggs in PHP

Ayesh Karunaratne의 PHP의 모든 이스터 에그.

phpinfo() 출력에는 4월 1일에만 볼 수 있는 특별한 PHP 로고가 있습니다.
Easter Eggs in PHP 이미지

Pragmatic development 3: Telegram bot

Vladimir Martsul의 실용적인 개발 3: Telegram 봇.

Loosely coupled Microservices in PHP

Dariusz Gafka의 PHP에서 느슨하게 결합된 마이크로 서비스.

Unpacked, named and positional arguments are in a call…

Damien Seguy의 함수 호출 시 압축된(unpacked) 인수, 명명된(named) 인수 및 고정된(positional) 인수.

세 가지 인수 전달 방식을 함께 사용하는 경우를 실험합니다.

Extrinsic sorting: A benchmark

Larry Garfield의 외부 정렬: 벤치마크 – 우선 순위, 그룹, 토폴로지 및 기타 사소하지 않은 정렬을 설명합니다.

Contract Tests

Kai Sassnowski의 계약(Contract) 테스트 – 인터페이스의 모든 구현에서 일관된 동작을 보장하기 위한 테스트 작성 지침.

PHP preload VS running as a daemon (RoadRunner)

PHP preload VS 데몬으로 실행(RoadRunner) – Pavel Murzakov의 벤치마크.

Supporting Legacy PHP project: painless switching to cloud storage

Vlad Reshetilo의 레거시 PHP 프로젝트 지원: 클라우드 스토리지로의 간편한 전환 – PHP의 기본 스트림 API를 사용하기 위한 깔끔한 트릭입니다.

How to build your next PHP project with a touch of AI

Benjamin Crozat의 AI로 다음 PHP 프로젝트를 빌드하는 방법.

Modern PHP features explained – PHP 8.0 and 8.1

최신 PHP 기능 설명 - PHP 8.0 및 8.1 – Steve McDougall

Using PHP enums as method calls

Thorsten Suckow-Homberg의 메소드 호출로 PHP 열거형을 사용 – 메소드 호출을 기존 유형 값에 동적으로 매핑 – 열거형의 깔끔하고 예상치
못한 사용법입니다.

Videos

Conferences

다음 PHP 모임이 언제인지 궁금하시다면 Tomas Votruba가 그의 멋진 friendsofphp.org 모임 수집 도구로 여러분을 안내해 드리겠습니다. php.net - 이벤트: 2022년 11월 캘린더도 있습니다 .

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 9월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 9월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡을 것입니다.

News

PHP 8.2 RC 3 has been released

PHP 8.2 RC 3이 출시되었습니다.
일정에 따라 또다른 RC가 출시되었습니다. 다음 RC 4는 10월 13일에 출시될 예정입니다.
PHP 8.2에 추가될 기능에 대한 자세한 목록은 PHP.Watch 또는 stitcher.io를 참조하십시오.

또한 플래시 뉴스레터인 The Road to PHP 8.2를 확인하십시오 .

PHP 7.4.32, PHP 8.0.24, and PHP 8.1.11 have been released

PHP 7.4.32, PHP 8.0.24PHP 8.1.11이 출시되었습니다.

❗️현재 지원되는 브랜치의 보안 릴리스입니다. 모든 사용자는 업그레이드하는 것이 좋습니다.

PhpStorm 2022.3 EAP Is Open!

PhpStorm 2022.3 EAP가 공개되었습니다!

다음은 PhpStorm용 Early Access Program의 일부로 이미 시도해볼 수 있습니다.

  • 새 UI에 대한 베타 액세스
  • 전체 PHP 8.2 지원
  • 빠른 수정 미리보기
  • 기타 등등

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다 . Roundup 시리즈의 여섯 번째 에피소드에서 PHP Core 팀의 모든 최신 개발 사항을 찾을 수 있으므로 간략하게만 언급하겠습니다.

📊 RFC: json_validate #PHP 8.3

RFC: json_validate

이 RFC에서 Juan Carlos Morales는 문자열에 유효한 JSON이 포함되어 있는지 확인하는 새 함수 json_validate()를 추가할 것을 제안합니다.

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

📣 RFC: Improve unserialize() error handling #PHP 8.3

RFC: unserialize() error handling 개선

Tim Düsterhus는 직렬화 해제가 실패할 때 throw되는 새로운 UnserializationFailedException 추가를 제안합니다.

try {    $result = unserialize($serialized);
var_dump($result);
} catch (\UnserializationFailureException $e) {
// unserialization failed
}

📣 RFC: StreamWrapper Support for glob() #PHP 8.3

RFC: glob()에 대한 StreamWrapper 지원

Timmy Almroth는 glob() 함수를 지원하는 StreamWrappers 구현을 제안합니다.

glob('vfs://*.ext')

☝️ RFC: Deprecations for PHP 8.3

RFC: Deprecations for PHP 8.3

PHP 8.3의 사용 중단(deprecation) 및 제거(removal)에 대해 고려해야 할 기능을 나열하는 포괄적인 RFC입니다.

  • Passing negative $widths to mb_strimwidth()
  • The NumberFormatter::TYPE_CURRENCY constant
  • MT_RAND_PHP
  • Global Mersenne Twister

Tools

play.phpsandbox.io

play.phpsandbox.io – 아무것도 설치하지 않고 브라우저에서 바로 Composer 패키지를 사용해 보세요. 훌륭하네요!

matthiasnoback/php-ast-inspector

matthiasnoback/php-ast-inspector – 추상 구문 트리를 위한 단계별 디버깅(step-debugger)을 지원하는 커맨드라인 도구입니다. 사용하는 방법.

kladskull/xEroS

kladskull/xEroS – 100% PHP로 작성된 비트코인과 유사한 블록체인. 교육용으로 좋습니다.

sfx101/deck

sfx101/deck – 클릭 한 번으로 Docker 기반 로컬 개발 환경을 가동할 수 있는 데스크탑 도구입니다.

cspray/annotated-container

cspray/annotated-container – PHP 8 Attribute를 사용해 자동 연결되고(autowired) 기능이 풍부한 PSR-11 호환 컨테이너를 만들기 위한 종속성 주입 프레임워크!

Spring Boot에서 영감을 받은 프로젝트라고 합니다.

<?php declare(strict_types=1);

namespace Acme\AnnotatedContainerDemo;

use Cspray\AnnotatedContainer\Attribute\Service;

#[Service]
interface BlobStorage {
public function store(string $key, string $contents) : void;
public function retrieve(string $key) : ?string;

}

#[Service]
class FilesystemBlobStorage implements BlobStorage {
public function store(string $key, string $contents) : void {
file_put_contents($key, $contents);
}
public function retrieve(string $key) : ?string {
return @file_get_contents($key) ?? null;
}
}

#[Service]
class BlobStorageConsumer {
public function __construct(public readonly BlobStorage $storage) {}
// Some API methods that would interact with the BlobStorage instance
}

phparkitect/arkitect

phparkitect/arkitect – 이 도구를 사용하면 PHP 코드베이스에 대한 아키텍처 제약 조건을 정의하여 CI에서 실행할 수 있습니다.

openai-php/client

openai-php/client – OpenAI API와 상호 작용할 수 있는 클라이언트입니다.

OpenAI의 GPT-3 API에 액세스하는 다른 방법이 필요한 경우 orhanerday/open-ai도 있습니다.

WordPress/wordpress-wasm

WordPress/wordpress-wasm – WebAssembly 마법 덕분에 브라우저에서 WordPress를 실행합니다..

nadrad/h-m-m

nadrad/h-m-m – Hackers Mind Map – 마인드 맵 작업을 위한 간단하고 빠른 키보드 중심 터미널 기반 도구입니다.

흥미로운 점은 이것이 말 그대로 종속성이 없는 단일 PHP 파일이라는 것입니다!

h-m-m screenshot

Symfony

Revisiting Lazy-Loading Proxies in PHP by Nicolas Grekas.

PHP의 Lazy-Loading Proxies 재방문 by Nicolas Grekas.

Symfony 의 유지 관리 정책과 ocramius/proxy-manager의 유지 관리 정책 사이의 비호환성 때문에 운영하는 포크(friendsofphp/proxy-manager-lts)는 최대한 수정을 자제하고 있었지만, 최근 두가지 trait를 추가하게 된 배경을 설명합니다.

Symfony ParamConverter: the best friend you don’t know yet by Thomas Bertrand.

Symfony ParamConverter: 아직 모르고 있지만 가장 친한 친구 by Thomas Bertrand.

Designing Symfony Validator the TDD way by Mike Zukowsky.

TDD 방식으로 Symfony Validator를 디자인하기 by Mike Zukowsky.

Solving the modern applications dilemma with Symfony UX by Titouan Galopin.

Symfony UX로 최신 애플리케이션 딜레마를 해결합니다 - by Titouan Galopin.

Asserting the output of Symfony console commands by Andreas Möller.

Symfony 콘솔 명령 출력 확인 by Andreas Möller.

CQRS with Symfony Messenger by Adrian Garay.

Symfony Messenger를 사용한 CQRS by Adrian Garay.

StenopePHP/Stenope

StenopePHP/Stenope – Symfony용 정적 웹사이트 구축 도구. 본격적인 Symfony 앱을 만든 다음 원하는 위치에 정적 페이지로 배포할 수 있습니다.

phpsword/sword-bundle

phpsword/sword-bundle – Symfony를 사용한 최신 WordPress 개발. roots/bedrock과 같은 추가 기능이 있는 WordPress 대신 Sword는 WordPress를 포함하는 Symfony 프레임워크입니다. Sword란 무엇입니까?에서 자세히 알아보십시오.

Laravel

👨‍🏫 Laracon Online

Laracon Online - Laravel 커뮤니티의 모든 대화는 YouTube에서 볼 수 있습니다. 무엇보다도 Celeb Porzio는 Livewire의 미래를 발표했고 Taylor Otwell은 Laravel 팀의 새로운 학습 사이트인 Laravel Bootcamp를 발표했습니다.

📺 What’s new in Laravel 9.31.0

What’s new in Laravel 9.31.0 – Christoph Rumpel의 간결한 비디오 overview.

Working with OS process in PHP by Steve (King) McDougall.

PHP에서 OS 프로세스 작업 by Steve (King) McDougall.

Drawbacks behind Laravel Facades by Grzegorz Korba.

Laravel Facade 이면의 단점 by Grzegorz Korba.

A Deep Dive Into Laravel Queues by Farhan Hasin Chowdhury.

Laravel 대기열(Queue)에 대한 심층 분석 by Grzegorz Korba.

Laravel의 Job, Queue, Worker에 대한 완전한 가이드.

Sammyjo20/laravel-haystack

Sammyjo20/laravel-haystack – 매우 간단하지만 강력한 데이터베이스 기반 작업 체인입니다.

dietercoopman/mailspfchecker

Dietercoopman/mailspfchecker – 주어진 이메일 주소를 대신하여 주어진 메일 서버를 통해 이메일을 보낼 수 있는지 확인하는 패키지 - 사용법.

ksassnowski/venture 4.0.0

ksassnowski/venture 4.0.0 – Laravel 앱에서 복잡한 비동기 워크플로를 만들고 관리하기 위한 패키지입니다.

YorCreative/Laravel-Scrubber

YorCreative/Laravel-Scrubber – 운영 보안 정책을 위반하는 민감한 정보가 개발자에 의해 실수로 또는 다른 방식으로 누출되는 것을 방지하는 패키지입니다. - 사용법.

hotmeteor/receiver

hotmeteor/receiver – Laravel용 드롭인 웹훅 처리 라이브러리입니다.

dedoc/scramble

dedoc/scramble – Laravel용 자동 OpenAPI 문서 생성기. PHPDoc 주석이 필요하지 않습니다.

findapr.io

findapr.io – 기여할 오픈 소스 Laravel 및 PHP 프로젝트를 찾는 데 도움이 되는 사이트입니다.

Other Frameworks

spiral/framework v3.0.0

spiral/framework v3.0.0 - RoadRunner 제작자의 프레임워크 주요 업데이트.

PHP 8.1이 필요하며 새로운 필터 및 유효성 검사, 작업 직렬화, 오류 핸들러, 대기열 및 콘솔 인터셉터, 이벤트 디스패처(PSR-14), 주입 가능한 열거형, 더 유연한 라우터, 최적화된 부트로더 및 더 나은 성능을 제공합니다.

Phalcon PHP Framework reached its major 5.0 release.

Phalcon PHP 프레임워크가 major 5.0 릴리스에 도달했습니다.
Phalcon은 PHP 확장으로 제공되기 때문에 독특한 프레임워크입니다. 그러나 로드맵에 따르면 팀은 기존 모델로 전환하기로 결정했으며 다음 주요 릴리스는 PHP 패키지로 계획하고 있습니다.
5.0의 새로운 기능에 대한 자세한 목록은 업그레이드 페이지를 확인하십시오.

api-platform/api-platform 3.0

api-platform/api-platform 3.0 – Symfony를 기반으로 구축된 이 성숙한 프레임워크를 통해 REST 및 GraphQL API 등을 생성할 수 있습니다.

Appwrite 1.0

Appwrite 1.0 – 최신 웹 또는 모바일 애플리케이션을 구축하는 데 필요한 API를 제공하는 오픈 소스 서비스로서의 백엔드 솔루션의 주요 안정적인 릴리스입니다.

작년에 Appwrite는 nginx+php-fpm에서 Swoole로 마이그레이션 하여 91%의 성능 향상을 경험했습니다.

James Brooks(@jbrooksuk) 트윗

어떤 프레임워크가 가장 좋은지 논하기에는 인생이 너무 짧습니다.
자신에게 좋은 것을 사용하고 계속 진행하십시오. 👍🏻

기타

Asymmetric visions by Brent Roose.

Brent Roose의 비대칭 비전.

비대칭 가시성(Asymmetric Visibility) RFC는 좋은 RFC이고 유연하고 Readonly properties을 완전히 대체합니다.
Brent가 우려하는 건 RFC 자체의 문제가 아니라 이 RFC가 readonly property를 완전히 대체하면서, readonly property가 사라질지 모르는 두려움이라고 합니다. 겨우 1년 전에 추가된 기능의 존속 여부가 불안해지는 것에 대한 우려이죠. 게다가 이미 작년에 Nikita의 유사한 아이디어에 관해 많은 논의를 했었고, readonly property가 use case의 90%는 커버할 수 있고 이 정도면 충분다고 결론이 났다고 합니다. 비대칭 가시성은 2년 전 readonly property에 관해 많은 논의를 했을 때 결정했어야 할 문제라고 생각한다고 합니다.

이 글의 마지막에는 readonly가 해결하지 못하는 문제를 연구가 이루어지고 있다고 그 예시를 소개하기도 합니다.

Increase code coverage successively by Andreas Heigl.

Andreas Heigl의 코드 coverage 범위를 연속적으로 늘리십시오.

phpcov를 이용해 새로 기여한 코드에 대한 테스트를 포함하도록 강제하는 방법을 소개합니다.

Testing Randomness of PHP Random Number Functions by Ayesh Karunaratne.

Ayesh Karunaratne의 PHP 난수 함수의 무작위성 테스트.

운영 체제나 프로그래밍 언어 런타임은 다양한 알고리즘을 사용하여 난수를 생성합니다. 동전 던지기처럼 실생활에서 볼 수 있는 진짜 난수 생성기에 비해 이런 의사(Pseudo) RNG(난수생성기, Random Number Generator)는 초기 “시드” 값에 의존하고 초기 시드 값과 알고리즘을 아는 것만으로도 난수의 전체 스트림을 예측하기에 충분합니다.

이 글에서 PHP 8.2 이후 제공되는 난수 생성기의 무작위성을 측정하기 위해 GD 확장을 사용해 임의의 X 및 Y 좌표에 단일 픽셀을 배치하여 이미지를 그립니다.
미리 결정된 시도 횟수에서 대부분 픽셀 분포가 균일한 이미지는 “진정한” RNG에 가까운 난수 생성기를 나타냅니다. 순수하게 시드 값을 기반으로 하는 값을 생성하는 RNG(예: Mersenne Twister)는 시드가 동일하게 유지되는 경우 동일한 출력을 생성해야 합니다.

다양한 RNG를 소개하고 실험하지만 마지막에는 random_int/random_bytes를 추천하네요.

모든 난수 생성 목적에 대해 random_int 및 random_bytes 함수를 사용하는 것은, 예외로 실패하기도 하고(안전하지 않은 알고리즘을 자동으로 기본값으로 설정하는 대신) PHP 7.0 이후의 모든 PHP 버전에서 지원되기 때문에 권장됩니다.

Granular interfaces by Sebastian De Deyne.

Sebastian De Deyne의 세분화된 인터페이스.

SOLID의 I에 관한 글.

Adding the last types to PHP code by Damien Seguy.

Damien Seguy의 PHP 코드에 마지막 유형 추가하기.

99.9% 타이핑을 향한 여정은 예상보다 길었고 몇 가지 가벼운 함정이 나타났습니다.

  • 보이지 않는 유형
  • 이전보다 더 많은 캐스팅
  • 기본값 처리
  • 임시값 관리
  • resource와의 씨름
  • 캐시 메커니즘으로 저글링

The three nothings of PHP by Damien Seguy explaining the difference between null, void, and uninitialized.

Damien Seguy의 PHP의 세 가지 빈 값(nothing) : null, void, uninitialized의 차이점을 설명.

Is it a DTO or a Value Object? by Matthias Noback.

그건 DTO입니까? Value Object입니까? by Matthias Noback.

Matthias Noback의 기준

  • DTO
    • 원시 데이터(문자열, 부울, 부동 소수점, null, 이러한 것들의 배열)를 보유하는 객체
    • 비즈니스 관점에서 실제로 의미가 있다고 보장하지 않음
    • 값의 정확성에 대한 보증을 제공하지 않음 : 문자열은 비어 있을 수 있고, 정수는 음수일 수 있습니다
    • DTO는 데이터가 애플리케이션에 들어가는 위치와 애플리케이션을 나가는 위치의 두 곳에서만 사용해야 합니다
  • Value Object
    • 하나 이상의 값 또는 값 객체를 래핑 하는 객체
    • 도메인 관점에서 의미가 있음을 보장
    • 값의 정확성에 대한 증거를 제공 : 문자열은 더 이상 비어 있지 않으며 숫자가 올바른 범위에 있는지 확인됩니다
    • 값 객체는 값이 우리의 기대와 일치하는지 확인하고 다시 확인하고 싶지 않은 모든 위치에 사용됩니다

참고 : ValueObject by Martin Fowler

Can we consider DateTimeImmutable a primitive type?

DateTimeImmutable을 원시(primitive) type으로 고려할 수 있습니까?

Matthias Noback은 “그렇지 않다”고 결론지었습니다. Andreas Möller는 더 나아가 자신의 Enhancing types 블로그 게시물에서 그건 단순한(simple) type이라고 제안합니다.

바로 위 Matthias Noback의 글에서 DTO가 오직 원시(primitive) type의 값만 보유한다고 했는데, 그렇다면 DateTimeImmutable도 원시 type으로 분류할 수 있는지 고찰하는 글입니다.

이어 소개된 Andreas Möller의 글에서는 “정교한(sophisticated) 원시 type” 혹은 “단순한(simple) type”으로 부를 수 있을 것이라고 이야기 합니다. Ted M. Young은 이를 비제약 type이라고 표현하며 원시 type에 대한 집착을 버려라는 발표(Stop Obsessing About Primitives])를 하기도 했습니다.
글 마지막에 소개된 것처럼 원시 type에 집착하지 않고, 더 적절한 type을 찾아갈 필요가 있습니다.

Named arguments by Sebastian De Deyne.

Sebastian De Deyne의 명명된 인수(Named arguments).

How PHP engine builds AST by Anton Sukhachev.

PHP 엔진이 AST 를 구축하는 방법 by Anton Sukhachev.

Pholyglot (PHP to PHP+C polyglot transpiler)

Pholyglot (PHP에서 PHP+C로의 다중 언어 번역기) – PHP의 하위 집합을 입력으로 사용하고 PHP와 C 모두에서 실행할 수 있는 다중 언어 코드를 출력하는 작은 취미 프로젝트 변환기입니다.

Plotting the memory of a PHP process with Gnuplot by Grégoire Paris.

Gnuplot로 PHP 프로세스의 메모리를 플로팅하기 by Grégoire Paris.

Gnuplot는 “a portable command-line driven graphing utility”라고 합니다.

Say hello to TLDR

Marcel Pociot(@marcelpociot)의 트윗

특정 코드 조각이 무엇을 하는지 궁금해 한 적이 있습니까?

TLDR plugin을 확인해보세요.

TLDR 이미지

Video

📺 PHP For Beginners

초심자를 위한 PHP – 누군가가 “2022년에 PHP를 어떻게 배우나요?”라고 묻는다면 Jeffrey Way의 이 과정이 답입니다.

📺 PHP in 1 minute by Brent Roose.

1분 동안 살펴보는 모던 PHP by Brent Roose.

PHP is not dead.

📺 PHP is breaking my code! by Brent Roose.

PHP가 내 코드를 깨고 있습니다! by Brent Roose.

동적 속성은 PHP 8.2에서 더 이상 사용되지 않으며 커뮤니티는 이에 대해 분열되어 있습니다.

📺 Pest From Scratch with Luke Downing.

처음부터 따라하는 Pest with Luke Downing.

Conferences

대면 이벤트가 한창입니다. 다음의 대규모 PHP 행사를 확인하세요.

다음 PHP 밋업이 언제인지 궁금 하시다면? – Tomas Votruba는 그의 사랑스러운 friendsofphp.org 모임 수집기로 여러분을 안내합니다.

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 8월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 8월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡을 것입니다.

News

PHP 8.2 Beta 3 has been released

PHP 8.2 베타 3가 출시되었습니다.

최종 베타가 예정대로 출시되었습니다. 다음 릴리스는 PHP 8.2.0 RC 1이며 9월 1일에 릴리스될 예정입니다.

PHP 8.2에서 더 이상 사용되지 않는 동적 속성(property)을 처리하는 방법을 확인하십시오 .

PHP 8.2에 추가될 기능에 대한 자세한 목록은 PHP.Watch 또는 stitcher.io를 참조하십시오 .

또한 플래시 뉴스레터인 The Road to PHP 8.2를 확인하십시오 .

PHP 8.0.22 and PHP 8.1.9 have been released

PHP 8.0.22PHP 8.1.9가 릴리스되었습니다.

🪲현재 지원되는 브랜치에 대한 버그 수정 릴리스입니다.

PHP Foundation Update, July 2022

PHP 재단 업데이트, 2022년 7월

후원자를 위한 월간 업데이트를 확인하십시오.

Composer 2.4 is out

Composer 2.4가 출시 되었습니다.

종속성의 보안 상태를 추적(audit), bash 자동 완성 및 여러 작은 변경 사항이 추가됐습니다.

두 가지 새로운 명령에 대해 자세히 알아보세요: auditbump.

deployphp/deployer 7.0.0 is out

deployphp/deployer 7.0.0이 출시되었습니다.

Deployer는 널리 사용되는 프레임워크를 지원하는 PHP로 작성된 배포 도구입니다.

v.7의 가장 큰 변화 중 하나는 새로운 공급 레시피입니다. 프로비저닝 레시피는 PHP 애플리케이션을 실행하기 위한 모든 VPS를 자동으로 설치하고 구성할 수 있습니다. 웹 서버, SSL, PHP, Redis, 노드 등을 설치합니다.

Codeception/Codeception 5.0.0 is out

Codeception/Codeception 5.0.0이 출시되었습니다.

Attribute, PHP 8 지원, 샤딩 및 기타 기능이 추가되었습니다!

swoole/swoole-src 5.0.0 is out

swoole/swoole-src 5.0.0이 출시되었습니다.

동시성 확장의 새 버전은 향상된 타입 시스템, 모든 함수의 매개변수 및 반환 값에 대한 타입 추가, 최적화된 오류 처리 및 기타 개선 사항 및 추가 사항과 함께 제공됩니다.

PhpStorm 2022.2 released

PhpStorm 2022.2 출시

이 주요 업데이트는 Mockery 및 Rector 지원, 제네릭 및 열거형 지원 강화, 디버거 및 HTTP 클라이언트 개선 등을 제공합니다.

🎬 PhpStorm 2022.2의 새로운 기능에 대한 비디오 개요를 시청 하세요.

그리고 막 PhpStorm 2022.3 로드맵이 게시했습니다.

  • PHP 8.2
  • Code Vision for PHP
  • Quick-fix preview
  • ParaTest support

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다 . 이 시리즈의 다섯 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

RFC: Asymmetric Visibility #PHP 8.3

https://wiki.php.net/rfc/asymmetric-visibility

이전에 Nikita Popov는 C#과 같은 속성(property) 접근자 구현을 제안했습니다. 그 RFC는 토론 단계를 통과하지 못했습니다. 대신 읽기 전용 속성이 승인되었습니다.

이번에 Ilija Tovilo와 Larry Garfield는 속성이 읽기 및 쓰기 작업에 대해 별도의(“비대칭”) 가시성을 가질 수 있도록 Swift와 유사한 구문을 추가할 것을 제안합니다.

class Foo{
public private(set) string $bar,
}

Larry의 몇 가지 메모:

  • 읽기 전용 속성의 복제 가능성 문제를 해결합니다.
  • 읽기 전용 속성의 상속 문제을 수정합니다. 지금은 readonly는 private 범위에서만 설정할 수 있고 protected 범위에서는 설정할 수 없습니다.
  • 다른 속성으로부터 재생성된 속성에 유용할 것입니다. 예를 들어, $o->setFirstName() 혹은 $o->setLastName()이 호출될 때마다 내부적으로 업데이트되는 public private(set) $fullName. 이는 향후 로드맵에 있는 접근자 hook에 적용될 수 있습니다.

Tools

serversideup/docker-php

serversideup/docker-php – PHP용 프로덕션에 바로 사용 가능한 도커 이미지. Laravel, WordPress 등에 최적화되었습니다.

Crell/Serde

Crell/Serde – PHP 8용 강력한 Serde(직렬화/역직렬화) 라이브러리입니다. 자세한 내용은 Larry Garfield의 소개 게시물을 참조 하세요.

statix-php/server

statix-php/server – PHP의 내장 서버를 둘러싼 객체 지향 래퍼입니다.

aimeos/map

aimeos/map – PHP 배열 및 컬렉션이 쉬워졌습니다. 또 다른 Laravel과 유사한 컬렉션 패키지이지만 종속성이 없습니다.

hotmeteor/spectator

hotmeteor/spectator – PHP용 OpenAPI 테스트.

DaveLiddament/sarb

DaveLiddament/sarb – 이 도구는 PHP 정적 분석기에 대한 기준점(baseline) 기능을 제공합니다(기준점 이후에 발생한 문제만 리포트).
v1.5.0에서는 –clean-up옵션을 제공합니다. 여기에는 코드 품질을 점진적으로 개선하기 위해 수정해야 할 5가지 임의 문제가 나열되어 있습니다.

leafsphp/leaf

leafsphp/leaf – 웹 앱과 API를 빠르게 생성하기 위한 간단하지만 강력한 마이크로 프레임워크입니다.

pheature-flags/pheature-flags

pheature-flags/pheature-flags – 제어된 조건에서 특정 기능을 활성화 및 비활성화할 수 있는 릴리스 관리 시스템입니다.

gakowalski/alternative-interpreters

gakowalski/alternative-interpreters – 대체 PHP 인터프리터, 컴파일러 및 트랜스파일러 목록입니다.

Symfony

symfony/clock

symfony/clock은 시스템 시계(clock)에서 응용 프로그램을 분리하는 새로운 컴포넌트입니다.

그것의 릴리스는 프레임워크 제국주의(무료로 어떤 것을 취한 다음 자기 것이라고 우기는 현상)에 대해 Symfony를 비난하는 짧은 트윗 폭풍을 일으켰습니다.

Frank de Jonge(@frankdejonge)의 트윗

솔직히, @symfony 가 커뮤니티 패키지를 수용하는 대신 시계를 만드는 것은 나를 슬프게 만듭니다. 그들은 NIH 증후군으로 계속 고통 받고 있습니다. 말 그대로 3(?) 시계 패키지와 동일한 인터페이스입니다. Symfony는 아마도 그들의 인기가 떨어지게 할 것입니다.

참고 : NIH 증후군(Not invented here syndrome)은 말 그대로 ‘여기서 개발한 것이 아니다.’(Not invented here)라는 의미로, 제3자가 개발한 기술이나 연구 성과는 인정하지 않는 배타적 조직 문화 또는 그러한 태도를 말한다. - 위키백과

taylor otwell(@taylorotwell)의 트윗

Symfony가 왜 그렇게 하는지 전혀 읽지 않았지만 난 여기에 돈을 걸 것입니다. 1) 그건 사소합니다. 2) They don’t want to have to bug an outside rando with a day job and 1,000 other concerns to update PHP versions, fix bugs, etc. anytime something comes up.(역자 주: 해석 포기)

Nicolas Grekas(@nicolasgrekas)의 트윗

  • Nicolas는 Symfony OSS core contributor입니다.

Package Principles는 읽을 가치가 있을 것입니다. 예를 들어 Stable-Dependencies Principle이 새로운 #Symfony Clock 구성 요소에 대한 논의에 한 눈에 적용해볼 수 있습니다.

Package Principles에서 이야기 하는 Stable-Dependencies Principle

  • 디자인은 사용되는 환경의 특성에 따라 변화하고 있습니다. 따라서 패키지 디자인도 변화를 지원해야 합니다. SDP는 휘발성을 원하는 패키지가 변경하기 어려운 패키지에 의존해서는 안 된다고 명시하고 있습니다.

8 News in Config Transformer that Converts Symfony YML to PHP by Tomas Votruba.

Symfony YML을 PHP 로 변환하는 Config Transformer의 8가지 소식 by Tomas Votruba

Repository pattern the SOLID way in Symfony by Saeid Raei.

Symfony에서 SOLID하게 리포지토리 패턴 구현하는 법 by Saeid Raei.

How to apply Hexagonal/Clean/Onion architecture with only two changes to your symfony project by Saeid Raei.

symfony 프로젝트에 단 두 가지 변경 사항으로 Hexagonal/Clean/Onion 아키텍처를 적용하는 방법 by Saeid Raei.

Symfony Testing: using Repository pattern without connecting to database by Saeid Raei.

Symfony 테스트: 데이터베이스에 연결하지 않고 Repository 패턴을 사용 by Saeid Raei.

Voila! Symfony and PHP 8.1 by Mert Simsek.

짜잔! Symfony와 PHP 8.1 by Mert Simsek.

Decorating Commands by Michael Zangerle.

Decorating Commands by Michael Zangerle.

두 가지 목적에 따라 다르게 동작하길 바라는 Command를 데코레이터 패턴으로 변경.

Clean up your migrations! by Victor Bocharsky.

마이그레이션을 정리하십시오! by Victor Bocharsky.

Laravel

🎬 What’s New In Laravel 9.23.0, Laravel 9.24.0, Laravel 9.25.0

🎬 Laravel 9.23.0, Laravel 9.24.0, Laravel 9.25.0의 새로운 기능 - Christoph Rumpel이 Laravel 업데이트에 대한 간략한 개요를 제공하는 이 새로운 YouTube 시리즈를 확인하세요.

protonemedia/laravel-splade

protonemedia/laravel-spade – Blade의 단순성과 Inertia.js의 마법.

SPA를 쉽게 구축할 수 있게 도와줍니다.

Sairahcaz/laravel-xhprof

Sairahcaz/laravel-xhprof – Laravel 애플리케이션을 프로파일링하기 위한 간편한 XHProf 설정.

BinarCode/laravel-restify

BinarCode/laravel-restify – 강력한 JSON:API 호환 Rest API를 Laravel과 함께 만드는 가장 빠른 방법입니다.

Increase performance by using Eloquent’s setRelation method by Freek Van der Herten.

Eloquent의 setRelation 메소드를 사용하여 성능을 높이십시오 by Freek Van der Herten.

How I develop applications with Laravel by Steve (King) McDougall.

Laravel로 애플리케이션을 개발하는 방법 by Steve (King) McDougall.

Scaling Laravel to 100M+ jobs and 30,000 requests/sec by Mateus Guimarães.

Laravel을 1억 개 이상의 작업과 초당 30,000개의 요청으로 확장합니다 by Mateus Guimarães.

How to Safely and Efficiently Upgrade an Out-of-Date Laravel App by Jamison Valenta

오래된 Laravel 앱을 안전하고 효율적으로 업그레이드하는 방법 by Jamison Valenta

Challenges when lift-and-shifting Laravel apps into AWS Lambda by Marco Deleu.

Laravel 앱을 AWS Lambda로 리프트 앤 시프팅할 때의 문제 by Marco Deleu.

🎬 5-hour Laravel 9 tutorial for beginners.

🎬 초보자를 위한 5시간짜리 Laravel 9 튜토리얼.

기타

Serverless PHP Applications on Digital Ocean Functions by Ayesh Karunaratne.

Digital Ocean Functions에서의 서버리스 PHP 애플리케이션 by Ayesh Karunaratne.

Narrowing types for static analysis by Jordi Boggiano

Jordi Boggiano의 정적 분석 을 위한 타입 좁히기 – Composer를 비롯한 몇 가지 오래된 코드베이스를 PHPStan의 레벨 8로 이동하는 과정에서 Jordi가 배운 몇 가지 교훈.

The PHP Handbook – Learn PHP for Beginners by Flavio Copes.

PHP 핸드북 – Flavio Copes의 초심자를 위한 PHP 배우기.

The difference between Traits, Interfaces, and Abstract Classes in PHP by Andrew Schmelyun.

Andrew Schmelyun의 PHP에서 Trait, 인터페이스 및 추상 클래스의 차이점.

When to use a trait? by Matthias Noback.

Trait는 언제 사용합니까? by Matthias Noback.

Stop using “static” in PHP and Stop using “extends” in PHP by Mike Zukowsky.

Mike Zukowsky의 PHP에서 “static”을 사용하지 맙시다PHP에서 “extends”를 사용하지 맙시다.

The 100 PHP functions in 2022 by Damien Seguy.

Damien Seguy의 2022년 가장 많이 사용되는 PHP 함수 100개.

PHP native Attributes quick reference by Damien Seguy – How many core attributes can you name?

Damien Seguy의 PHP 기본(native) Attribute 빠르게 확인하기 – 여러분은 몇 가지나 이름을 댈 수 있습니까?

Simple Solutions 1 – Active Record versus Data Mapper by Matthias Noback.

간단한 솔루션 1 – Active Record vs Data Mapper by Matthias Noback.

3 years of lift-and-shift into AWS Lambda by Marco Aurélio Deleu

AWS Lambda로 리프트 앤 시프트한 3년 – AWS Lambda를 PHP 호스팅 공급자로 사용할 때 주의해야 할 주의 사항.

(위 Laravel 쪽에서 소개된 글과 동일합니다)

Do generators really reduce the memory usage?

generator가 실제로 메모리 사용량을 줄입니까?

What I would change about PHP by Brent Roose.

Brent Roose의 내가 PHP에서 바꾸고 싶은 것.

Audio/Video

🎬 Why you need to update PHP by Brent Roose.

Brent Roose의 PHP를 업데이트해야 하는 이유.

🎬 PHP 101 for Absolute Beginners – A full 2-hour course.

완전 초보자를 위한 PHP 101 – 전체 2시간 코스.

Conferences

대면 이벤트가 드디어 돌아왔습니다!

Community

A nomenclature of hate by Jordi Boggiano.

Jordi Boggiano의 증오 명명법.

오픈 소스 프로젝트를 유지하는 것은 어렵습니다. 문제를 해결해야 할 뿐만 아니라 좌절한 사용자를 다루어야 하기 때문입니다. Alexander Makarov가 수집한 몇 가지 예를 확인하십시오: samdark/opensource-hate.

swyx(@swyx)의 트윗

https://twitter.com/swyx/status/1552730861052628992

swyx의 트윗 이미지

asgrim/side-effect

asgrim/side-effect - 모든 걸 __toString() 메서드 안에서 처리하는 프레임워크.

James Titcumb(@asgrim)의 트윗

농담인 줄 알았겠지만, 진짜 만들었어

누군가 __toString() 이외의 다른 메서드에 구현되었다며 버그 리포팅해서, 이를 수정하기도 했습니다.

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 7월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 7월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡을 것입니다.

News

PHP 8.2.0 Alpha 2 and PHP 8.2.0 Alpha 3 have been released

세 번째이자 마지막 알파가 예정대로 출시되었습니다. 다음 릴리스는 7월 21일에 예정된 PHP 8.2.0 Beta 1입니다.

역자 주: 번역 시간 기준으로 21일이 지나 8.2.0 Beta 1은 출시되었습니다. 다음 릴리스는 8월 4일에 예정된 PHP 8.2.0 Beta 2입니다.

PHP 8.2에 추가될 기능에 대한 자세한 목록은 php.watch 또는 stitcher.io를 참조하십시오 .

PHP 8.0.21 and PHP 8.1.8 have been released

PHP Foundation Update, June 2022

PHP Foundation 업데이트, 2022년 6월

후원자를 위한 월간 업데이트를 확인하십시오.

  • 개발자가 달성한 것, 새로운 후원자 및 재단에 기여할 수 있는 재정적 방법 등

php.net redesign is being discussed

php.net 재설계가 논의 중입니다

개발 중인 php 웹사이트 캡쳐 화면

디자인 실험으로 현재 #php 웹사이트를 개편했습니다. 더 수정할 수 있는 부분이 많이 있지만 지금까지는 만족합니다. 어떻게 생각하세요?

Mike van Riel(@mvriel)의 트윗

한편 Andreas Möller 덕분에 php.net 소스 코드는 이제 friendsofphp/php-cs-fixer를 사용하여 코딩 표준 문제를 수정 합니다.

PHP의 메인 사이트 업데이트를 돕고 싶다면 기여 가이드(contributing guide)를 확인하세요 .

인기 있는 PHP 비동기 프레임워크 ReactPHP 10

10주년을 기념하기 위해 팀은 async 및 await 기능이 포함된 완전히 새로운 비동기 구성 요소인 reactphp/async를 출시했으며 이는 PHP 8.1+와 같은 fiber를 기반으로 구축되었습니다.

Cees-Jan Kiewiet의 My road to fibers with ReactPHP를 읽어보세요.

Is PHP dead?

PHP는 죽었습니까?

한 번 그리고 영원히 대답을 남겼습니다.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다 . 이 시리즈의 다음 에피소드가 곧 출시될 예정이므로 업데이트에 대해 간단히 언급하겠습니다.

✅ RFC: Disjunctive Normal Form Types #PHP 8.2

RFC: Disjunctive Normal Form Types #PHP 8.2

Disjunctive Normal Form 유형에 대한 지원이 PHP 8.2에 승인되었습니다. 결합 및 교차 유형을 혼합할 수 있습니다.

class Foo {  
public function bar(): (A & B) | D;
}

Derick Rethan가 George Peter Banyard와 함께 하는 🔈 PHP Internals News 팟캐스트 에피소드 103에서 자세히 알아보십시오.

✅ RFC: Fetch properties of enums in const expressions #PHP 8.2

RFC: const 표현식에서 enum 속성 가져오기 #PHP 8.2

PHP 8.2에서는 -> / ?-> 를 사용하여 상수 표현식에서 enum 속성을 가져올 수 있습니다.

enum A: string {
case B = 'B';
const C = [self::B->value => self::B];
}

✅ RFC: Random Extension Improvement #PHP 8.2

RFC: 랜덤 확장 개선 #PHP 8.2

몇 가지 문제가 “Random Extension 5.x” RFC의 투표가 시작된 이후에만 제기 되었습니다(적절한 토론이 부족했기 때문에). 이러한 각 문제에 대해 투표 옵션을 만들고 추가 결정을 내리기로 했고 모두 통과했습니다.

✅ RFC: Make the iterator_*() family accept all iterables #PHP 8.2.

RFC: iterator_*() 패밀리가 모든 이터러블 #PHP 8.2를 허용하도록 합니다.

PHP 8.2에서 iterator_to_array()와 iterator_count()의 $iterator 파라미터는 \Traversable에서 iterable(예: \Traversable|array)로 확장됩니다.

function foo(iterable $foo) {
$foo = iterator_to_array($foo); //now accepts arrays

return array_map(strlen(...), $foo);
}

✅ RFC: Constants in Traits #PHP 8.2

RFC: Trait에서의 상수 #PHP 8.2

PHP 8.2에서는 현재 property에서 가능한 것과 동일한 방식으로 Trait에 상수를 정의할 수 있습니다.

trait Foo {
public const PHP_VERSION = '8.2';
}

class Base {
use Foo;
}

class Bar extends Base {
public function phpVersion(): void {
echo parent::PHP_VERSION; // 8.2
}
}

❌ RFC: New Curl URL API

RFC: 새로운 Curl URL API

❌ RFC: json_encode indentation

RFC: json_encode 들여쓰기

❌ RFC: Stricter implicit boolean coercions

RFC: 더 엄격한 암시적 bool 강제 변환

❌ RFC: Create a global login system for php.net

RFC: php.net용 글로벌 로그인 시스템 생성

❌ RFC: Short Closures 2.0

RFC: 짧은 Closures 2.0

Marcel Pociot(@marcelpociot)의 트윗

다음에 승인될 수 있도록 RFC를 개선해 봅시다.🤞

🤔 RFC: Auto-implement Stringable for string backed enums

RFC: 문자열 지원 열거형에 대한 Stringable 자동 구현

이 RFC는 문자열을 지원하는 열거형이 Stringable을 자동으로 구현하기를 제안하지만 여전히 메서드의 사용자 영역 구현은 허용하지 않습니다.

🤔 RFC: PDO driver specific sub-classes

RFC: PDO 드라이버별 하위 클래스

💡 RFC: Unify PHP’s typing modes (aka remove strict_type declare)

RFC: PHP의 타이핑 모드 통합(strict_type 선언 제거라고도 함)

타입 캐스팅 사용 및 개발자 부담에 미치는 영향에 대한 고려와 함께,
strict_type를 PHP(9+)에서 기본값으로 변경하는 draft 아이디어입니다.

PHP는 다른 언어와 비교하여 작동할 수 있는 두 가지 입력 모드가 있습니다. 하나는 너무 느슨하고 다른 하나는 너무 엄격합니다. 이 RFC는 이 두 모드의 존재 이유, 단점, 두 모드를 다시 통합하기 전에 변경해야 할 사항에 대해 설명합니다.

Tools

laravel/pint

laravel/pint – 미니멀리스트를 위한 PHP 코드 스타일 수정기(fixer). 기본적으로 FriendsOfPHP/PHP-CS-Fixer 래퍼지만 더 쉬운 구성과 멋진 출력을 제공합니다.

DaveLiddament/php-language-extensions

DaveLiddament/php-language-extensions - PHP 언어 확장을 정의하기 위한 속성(정적 분석에 의해 시행됨): #[Friend], #[Package]등.

currently in BETA.

RobiNN1/phpCacheAdmin

RobiNN1/phpCacheAdmin – Redis, Memcache(d) 및 OPCache용 웹 대시보드.

thecodingmachine/safe

thecodingmachine/safe – 에러가 발생하면 false를 반환하는 대신 예외를 발생시키도록 재작성된 PHP 함수 모음.

use function Safe\file_get_contents;
use function Safe\json_decode;

// This code is both safe and simple!
$content = file_get_contents('foobar.json');
$foobar = json_decode($content);

cerbero90/enum

cerbero90/enum – enum 기능을 강화하기 위한 종속성 없는 PHP 라이브러리.

PrinsFrank/standards

PrinsFrank/standards – ISO3166, ISO4217, ISO639 등 PHP Enum의 표준 모음입니다.

soatok/cupcake

soatok/cupcake – 간단하고 안전한 HTML form(생성 및 처리)을 위한 PHP 라이브러리입니다.

T-Regx/T-Regx

T-Regx/T-Regx – 현대 표준에 부합하는 PHP 정규식입니다. readme에서 preg_* 불일치에 대한 섹션을 확인하십시오.

어떤 인자는 preg_* 함수에 심각한(fatal) 에러를 발생시킵니다. T-Regx는 이를 예측하고, catch할 수 있도록 예외를 던집니다.

deComplex.me

deComplex.me – 두 코드 블록의 복잡성을 나란히 비교하는 웹 도구입니다.

PiotrPress/wordpress-hooks

PiotrPress/wordpress-hooks – attribute에 대한 좋은 사용 사례입니다! 라이브러리를 사용하면 WordPress Hooks(필터 및 작업)를 개체의 메서드에 자동으로 추가할 수 있습니다.

markrogoyski/itertools-php

markrogoyski/itertools-php – 루프를 강화하는 PHP 반복 도구.

Composer 2.4 will be released later this year

Composer 2.4는 올해 말에 출시될 예정이며 두 가지 새로운 명령을 제공합니다.

Symfony

Launched ux.symfony.com and released 4 New UX Components.

ux.symfony.com을 출시하고 4개의 새로운 UX 컴포넌트를 출시 했습니다 . 이 웹사이트는 각 UX 구성 요소를 만지고 샘플링하는 놀이터입니다.

Twig Smoke Rendering

Twig Smoke Rendering – Fortune Favors the Bold by Tomas Votruba.

Laravel

Vite is now the default frontend asset bundler in new Laravel projects

Vite는 이제 Breeze 및 Jetstream을 포함해 새로운 Laravel 프로젝트의 기본 프론트엔드 asset 번들러 입니다.

Taylor Otwell(@taylorotwell)의 트윗

새로운 Laravel 프로젝트가 Vite를 사용하여 프론트엔드 자산을 번들로 제공한다는 소식을 전하게 되어 기쁩니다. Breeze와 Jetstream도 업데이트되었습니다. 🔥
Inertia Vue 또는 React와 함께 새로운 Breeze/Vite 스택을 사용할 때 번개처럼 빠른 핫 모듈 교체를 경험하십시오. ⚡

Christoph Rumpel 의 Moving A Laravel Webpack Project To Vite 튜토리얼을 확인하십시오.

hammerstonedev/sidecar

hammerstonedev/sidecar – 이 패키지를 사용하면 Laravel 애플리케이션에서 AWS Lambda 기능을 배포하고 실행할 수 있습니다. 사용 사례의 예는 Browsershot을 통해 스크린샷을 만드는 것 입니다.

calebporzio/parental

calebporzio/parental – STI(Single Table Inheritance, 단일 테이블 상속) 기능을 Eloquent에 제공합니다.

STI : 모델을 확장하지만(일반적으로 특정 동작을 추가하기 위해) 동일한 테이블을 참조하는 것.

spatie/laravel-onboard

spatie/laravel-onboard – 앱에 대한 단계별 사용자 온보딩을 생성하기 위한 패키지입니다.

zgabievi/laravel-promocodes

zgabievi/laravel-promocodes – 강력한 쿠폰 및 프로모션 코드 생성기.

abrouter/laravel-abtest

abrouter/laravel-abtest – Laravel로 A/B 테스트를 실행하는 간단한 패키지입니다.

Running PHPStan on max with Laravel by Steve McDougall.

https://laravel-news.com/running-phpstan-on-max-with-laravel

PHPStan을 최대한으로 실행하기.

Add comments to SQL queries made by Laravel by Freek Van der Herten.

https://freek.dev/2279-add-comments-to-sql-queries-made-by-laravel

쿼리의 출처를 쉽게 찾아낼 수 있도록 Laravel이 만든 쿼리에 주석을 추가합니다.

Containerizing Laravel Applications by Matt Casperson.

https://www.honeybadger.io/blog/containerizing-laravel-applications/

기존 Laravel 애플리케이션을 컨테이너화하는 과정.

기타

The very useful variadic argument by Damien Seguy.

https://www.exakat.io/en/the-very-useful-variadic-argument/

정적 변수는 함수 호출이 끝날 때 죽지 않고 다음 호출까지 살아 있습니다.

class A {
public static function counter() {
static $i = 0;
return ++$i;
}
}
class B extends A {}

var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(1)
var_dump(B::counter()); // int(2)

PHP 8.0까지는 호출되는 클래스에 따라 고유한 정적 변수가 존재했습니다만, 8.1부터 바뀌었습니다.
이 글에서는 정적 변수의 문제와 이를 제거하는 방법을 설명합니다.

5 ways to give a name to your booleans by Damien Seguy.

bool에 이름을 지정하는 5가지 방법 - Damien Seguy

  • 상수로 만들고
  • enum으로 전환하고
    enum Comparison {
    case STRICT;
    case LOOSE;
    }

    function foo(bool $comparison) {}
    function goo(Comparison $comparison) {}

    foo(true);
    goo(Comparison::STRICT);
  • named parameter를 사용하고
    $v = in_array($needle, $haystack, strict: true); 
  • dummy 할당(assignation)을 사용하고
    $v = in_array($needle, $haystack, $strict = true); 
  • comment를 활용
    $v = in_array($needle, $haystack, /\* strict \*/ true);

Top 100 PHP classes that you should know by Damien Seguy.

당신이 알아야 할 100대 PHP 클래스 - Damien Seguy.

PHP version stats: July, 2022 by Brent Roose.

PHP 버전 통계 : 2022년 7월 by Brent Roose.

5 Pitfalls of Upgrade to Native PHP Enums and How to Avoid Them by Tomas Votruba.

네이티브 PHP 열거형으로 업그레이드할 때의 5가지 함정과 이를 피하는 방법 by Tomas Votruba

On the use of enums by Larry Garfield – When should you use PHP enums, and when shouldn’t you?

Larry Garfield의 enum 사용에 대해 – PHP enum을 언제 사용해야 하고 언제 사용하지 않아야 합니까?

Effective immutability with PHPStan by Matthias Noback – DateTimeImmutable is actually mutable.

Matthias Noback의 PHPStan을 사용한 효과적인 불변성 DateTimeImmutable은 실제로 변경 가능합니다.

$dt = new DateTimeImmutable('now');
echo $dt->getTimestamp() . "\n";

$dt->__construct('tomorrow');
echo $dt->getTimestamp() . "\n";

위와 같이 실제로 변경 가능하기 때문에, 진짜로 변경 가능하지 않도록 하려면 더 많은 노력이 듭니다.
그런데 대체 누가 __construct() 호출하나요?
그냥 마음 편하게 빌드 과정에서 PHPStan으로 잘 감시합시다…라고 하는 글입니다.

Benchmarking serialization by Larry Garfield.

Larry Garfield의 직렬화 벤치마킹.

Decoupling your security user from your user model by Matthias Noback.

Matthias Noback의 사용자 모델에서 보안 사용자 분리

Complete guide for PHP & Neo4j and using graph databases by Michal Štefaňák.

Michal Štefaňák의 PHP 및 Neo4j에 대한 완벽 가이드.

How to automatically add return type declarations with Rector and without breaking your code.

코드를 손상시키지 않고 Rector를 사용하여 반환 유형 선언을 자동으로 추가하는 방법.

PHP-FPM tuning: Using ‘pm static’ for max performance by Hayden James.

Hayden James의 PHP-FPM 튜닝: 최대 성능을 위해 ‘pm static’ 사용.

How can I trust my test suite? by Antonello D’Ippolito.

안토넬로 디폴리토의 내 테스트 스위트를 어떻게 신뢰할 수 있습니까?.

오디오/비디오

Community

  • Philip Sharp가 편집한 ElePHPants에 대한 현장 가이드. 57종의 코끼리가 있다는 사실, 알고 계셨나요?

  • PUFA – wordle과 비슷하지만 PHP 기능과 키워드를 추측하기 위한 것입니다.
    PUFA 화면

  • Frédéric Bouchery(@FredBouchery)의 트윗

    I just came back from the future, this is what I read on a tombstone
    #PHP #PhpNotDead

I DIDNT THINK I WOULD DIE BEFORE PHP 비석


오늘은 여기까지입니다. 읽어주셔서 감사합니다!

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 6월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 6월호에 오신 것을 환영합니다. 여기에서는 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라갈 것입니다.

PHP Annotated 6월호를 편집하는 데 도움을 준 Sergey Panteleev에게 감사드립니다.

News

php.net received a new homepage design!

php.net이 새로운 홈페이지 디자인을 받았습니다!

새로운 모습을 보여주신 Lucas Azevedo와 팀에 감사드립니다.

❗PHP 7.4.30, PHP 8.0.20, and PHP 8.1.7 have been released

PHP 7.4.30 , PHP 8.0.20 , PHP 8.1.7 이 릴리스되었습니다

이것은 지원되는 브랜치에 대한 보안 업데이트입니다. 모든 사용자는 최신 버전으로 업그레이드하는 것이 좋습니다.

PHP 8.2.0 Alpha 1 has been released

PHP 8.2.0 Alpha 1이 릴리스되었습니다

PHP 8.2 릴리스 프로세스를 시작하는 첫 번째 알파가 출시되었습니다. 업데이트는 정해진 일정에 따라 2주마다 릴리스되며 최종 릴리스는 11월 24일 경으로 예상됩니다.
기능 동결(feature freeze)은 7월 19일에 예상되며, 이는 일부 변경 사항이 여전히 릴리스에 포함될 수 있음을 의미합니다. 현재 가장 눈에 띄는 변화는 다음과 같습니다.

전체 변경 사항 목록은 php.watch/versions/8.2를 참조하십시오.

Mac을 사용하는 경우 shivammathur/homebrew-php 덕분에 Nightly 채널을 통해 homebrew로 PHP 8.2를 사용해 볼 수 있습니다 .

그렇지 않으면 Docker 이미지가 번거로움 없이 시도해 볼 수 있는 가장 좋은 옵션일 것입니다.

PER Coding Style has been tagged 1.0.0

PER 코딩 스타일에 1.0.0 태그가 지정되었습니다.

PHP-FIG(@phpfig)의 트윗

PER 코딩 스타일 1.0.0은 PSR-12와 동일합니다. 이 권장 사항은 이제 PHP 언어로 제공되는 모든 새로운 기능을 따라잡기 위해 훨씬 더 빠르게 발전할 것입니다.

작업 그룹 모두를 축하합니다!

PhpStorm 2022.2 Early Access Program Is Open

PhpStorm 2022.2 Early Access Program 공개

Rector의 Built-in 지원, PHP의 제네릭에 대한 많은 개선 사항 등이 있습니다.

Developer Ecosystem Survey 2022

개발자 생태계 설문조사 2022

연례 생태계 설문조사에 참여하여 MacBook Pro, Xbox Series X, PlayStation 5 또는 기타 상품을 받을 수 있는 기회를 잡으십시오.

PHP Core

Core 뉴스의 대부분은 PHP Foundation 의 PHP Core Roundup 시리즈에서 자세히 다룹니다. 이 시리즈의 세 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

✅ RFC: Add true type #PHP 8.2

RFC: 트루 타입 추가 #PHP 8.2

유사 유형이었던 nullfalse에 추가하여 PHP는 이제 true 독립형 유형을 갖게 되며 이는 false에 대응합니다.
자세한 내용 은 이 변경 사항의 작성자인 George P. Banyard와 함께 하는 Derik Rethans의 PHP Internals News 팟캐스트를 들어보십시오.

✅ RFC: Undefined Property Error Promotion #PHP 9.0

RFC: 정의되지 않은 속성 접근 시 오류 발생 #PHP 9.0

기존 E_WARNING이 Error로 승격됩니다.
Magic 메서드로 handler를 통해 지원되는 getter 메서드는 유지됩니다.

✅ RFC: Expand deprecation notice scope for partially supported callables #PHP 8.2

RFC: 부분적으로 지원되는 callable에 대한 지원 중단 알림(deprecation notice) 범위 확장 #PHP 8.2

📊 RFC: Stricter implicit boolean coercion #PHP 8.2

RFC: 더 엄격한 암시적 부울 강제 변환 #PHP 8.2

📊 RFC: Create a global login system for php.net

RFC: php.net용 글로벌 로그인 시스템 생성

RFC는 *.php.net 사이트용 SSO 생성을 제안합니다. 다만 시행 계획이 불투명해 1차 시도를 넘지 못할 가능성이 큽니다.

📊 RFC: Random Extension 5.x #PHP 8.2

RFC: Random Extension 5.x #PHP 8.2

이 RFC와 이전의 시도 이후의 지속적인 노력에 감사드립니다.

🤔 RFC: Fetch properties in const expressions #PHP 8.2

RFC: const 표현식에서 속성 가져오기 #PHP 8.2

enum A: string {    
case B = 'B';
// This is currently not permitted
const C = [self::B->value => self::B];
}

이것이 매우 유용할 수 있는 예가 있습니다. 예를 들어 Symfony and #[Target]을 확인 하십시오.

🤔 [RFC] Short Closures 2.0

[RFC] Short Closures 2.0

원래 Nuno Maduro와 Larry Garfield가 제안했으며 현재 Arnaud Le Blanc가 채택한 이 RFC는 여러 명령문을 허용하여 화살표 함수를 확장하는 제안을 올렸습니다.

fn () {    
$tmp = $a + $b;
return $tmp;
}

Interview with the PHP Foundation Core Developers supplemented with answers from Arnaud Le Blanc.

Arnaud Le Blanc의 답변으로 보충 된 PHP Foundation 핵심 개발자와의 인터뷰.

Tools

Indigo (beta)

Indigo (베타) — 이 도구는 Mac에서 로컬 개발 환경을 구성하고 실행하는 방식을 혁신하는 것을 목표로 합니다.

Easy-ECC 1.0.0

Paragon Initiative Enterprises 팀 은 PHP에서 elliptic curve 암호화 작업을 더 쉽게 해주는 도구인 Easy-ECC 1.0.0과 JWT에 대한 보다 안전한 대안인 PASETO를 출시했습니다.

minicli/minicli

minicli/minicli – CLI 중심 PHP 애플리케이션을 구축하기 위한 최소한의 종속성 없는 프레임워크입니다.

crwlr/query-string

crwlr/query-string – URL용 스위스 군용 칼입니다. HTTP 요청에 대한 쿼리 문자열을 매우 편리하게 생성, 액세스 및 조작할 수 있습니다. 자세한 내용은 기사 를 참조하십시오.

voku/simple_html_dom

voku/simple_html_dom – 현대적이고 단순한 PHP용 HTML DOM 파서.

PHP-CS-Fixer Configurator

PHP-CS-Fixer Configurator – 모든 PHP CS Fixer 옵션과 설명 이 있는 멋진 웹사이트입니다 .

IvanGrigorov/VMValidator

IvanGrigorov/VMValidator – PHP 모델을 검증(validate)하기 위한 attribute 세트입니다.

thecodingmachine/graphqlite

thecodingmachine/graphqlite – 이 도구를 사용하면 PHP 속성/주석을 사용하여 GraphQL API를 선언할 수 있습니다.

exakat/php-static-analysis-tools

exakat/php-static-analysis-tools – 유용한 PHP 정적 분석 도구의 검토 목록입니다. Psalm/PHPStan 뿐만이 아닙니다. PhpStorm의 모든 스마트한 검사기를 CI 파이프라인으로 가져오는 JetBrains의 도구인 Qodana PHP도 있습니다 .

nmcteam/3dash

nmcteam/3dash – PHP용 가벼우 정적 사이트 생성기. SculpinJigsaw도 멋지지만 이 작은 도구는 정말 깔끔하고 API가 매우 간단합니다. 빠르게 예시를 보려면 공식 웹사이트를 확인하세요: 3dash.dev.

PhpStorm

DDEV Integration – IntelliJ IDEs Plugin

DDEV 통합 – IntelliJ IDE 플러그인 – PhpStorm용 DDEV 통합 플러그인 의 베타 버전입니다.

Boost your productivity in Laravel with advanced PhpStorm setup by Dmitry Khorev

https://medium.com/@dkhorev/boost-your-productivity-in-laravel-with-advanced-phpstorm-setup-34a354efbbce

고급 PhpStorm 설정으로 Laravel에서 생산성을 높여보세요.

PhpStorm이 생산성을 위한 완벽한 IDE인 이유

  • Huge list of static code inspections
  • Code auto-format and optimizing imports
  • Best IDE’s navigation tool (“Search Everywhere”)
  • Configurable common file and method templates
  • Laravel model/query integration use cases
  • Git integration

Clean and minimalistic PhpStorm by Brent Roose

Brent Roose의 깨끗하고 최소한의 PhpStorm.

  • Hide all toolbars
  • Light colour schemes
  • Increased font size
  • Code folding
  • Tabs at the bottom
  • Undocked sidebar
  • The navigation bar
  • Distraction free mode
  • Scopes and file colours

Symfony

Symfony 6.1

Symfony 6.1이 출시되었으며 많은 새로운 기능이 포함되어 있습니다 .

Ruud Kamphuis(@Ruud_)의 트윗

Symfony 6.1은 3시간 전에 출시되었습니다. 방금 업그레이드 PR을 병합하고 프로덕션에 제공했습니다 🚀. 모든 것이 원활하게 실행됩니다.
애플리케이션은 ±10년이 넘었고 10k+ 클래스가 있으며 현재 20k rpm을 처리하고 있습니다.
모두 행복한 금요일 보내세요 😎
https://jobs.ticketswap.com

Get certified on Symfony 6 and Twig 3

Symfony 6 및 Twig 3 인증 받기

이제 Symfony 6 및 Twig 3 온라인 자격증(certifications) 시험을 칠 수 있습니다. 두 시험 모두 처음부터 재작업되었습니다.

A Week of Symfony #806 (6-12 June 2022).

A Week of Symfony #806 (6-12 June 2022)

Initializing your Symfony project with solid foundations by Loïc Vernet.

견고한 기반으로 Symfony 프로젝트를 초기화 하기

How to test Symfony routes to make huge refactoring safe by Tomas Votruba.

거대한 리팩토링을 안전하게 만들기 위해 Symfony Route를 테스트하는 방법

Laravel

spatie/laravel-comments-livewire

spatie/laravel-comments-livewire – Spatie의 새로운 유료 Livewire 패키지로 Laravel 애플리케이션의 모델과 주석을 연결합니다.

laravel/vite-plugi

laravel/vite-plugiVite는 빠른 개발 환경을 제공하고 프로덕션용 코드를 번들로 제공하는 최신 프론트엔드 빌드 도구입니다. Laravel은 이제 개발 및 프로덕션용 asset을 로드하기 위한 공식 플러그인 및 Blade 지시문을 제공하여 Vite와 원활하게 통합됩니다.

hasinhayder/hydra

hasinhayder/hydra – 뛰어난 사용자 및 역할 관리 API와 함께 제공되는 Laravel 9x + Laravel Sanctum이 포함된 zero-config API boilerplate입니다.

Laravel Artisan Cheatsheet

Laravel Artisan Cheatsheet – Laravel의 내장 Artisan 명령 및 해당 옵션에 대한 온라인 레퍼런스입니다.

codestudiohq/laravel-totem

codestudiohq/laravel-totem – 이 도구를 사용하면 잘 구성된 대시보드에서 Laravel 일정을 관리할 수 있습니다.

worksome/request-factories

worksome/request-factories – 그 모든 boilerplate 없이도 Laravel에서 요청을 테스트합니다.

35 Laravel Eloquent Recipes by Martin Joo

35 Laravel Eloquent Recipes

Laravel Route Grouping: 6 Techniques to Organize Routes by Povilas Korop

Laravel Route 그룹화: Route 구성을 위한 6가지 기술

How To Implement Laravel Dynamic Scheduling by Ian Kumu

Laravel Dynamic Scheduling 구현 방법

Restructuring a Laravel Controller using Services, Events, Jobs, Actions, and more by Povilas Korop.

Services, Events, Jobs, Actions 등을 사용하여 Laravel 컨트롤러를 재구성합니다.

기타

My PHP enum style guide by Brent Roose.

Brent Roose의 PHP 열거형(enum) 스타일 가이드.

List-o-mania by Mark Baker. An article on PHP’s list construct with some clever tricks and a few of its limitations.

Mark Baker의 List-o-mania. list 몇 가지 영리한 트릭과 몇 가지 제한 사항이 포함된 PHP의 list 구성에 대한 기사입니다 .

The very useful variadic argument by Damien Seguy.

Damien Seguy의 매우 유용한 가변 인수.

Reviewing Property Declaration In PHP by Damien Seguy.

Damien Seguy의 PHP에서 속성 선언 검토.

Community

2022 PHP Conferences List

https://getparthenon.com/blog/2022-php-conferences-list/

Check out these funny t-shirts by Rafael Dohms:

Rafael Doohms재미있는 티셔츠를 확인 하세요 .

재미있는 티셔츠 이미지

Where can you get an elephpant?

코끼리는 어디서 구하나요?

워드프레스에도 사랑스러운 마스코트가 있다는 것을 알고 계셨나요?

WordPress(@WordPress)의 트윗

#Wapuu는 WordCamp Europe의 모든 곳에서 진행됩니다! 당신은 그에 대해 얼마나 많은 다른 사진을 얻을 수 있습니까? 우리가 모두 볼 수 있도록 http://wordpress.org/photos에 게시 하십시오!

📸 아래 사진은 #WordPress 사진 디렉토리 bit.ly/3PMYBe7에서 Nicholas Garofalo의 “Wapuu ready to travel to #WCEU

Yellow Wapuu 이미지

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 5월의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


안녕하세요!

PHP Annotated 5월호에 오신 것을 환영합니다. 여기에서는 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡았습니다.

PHP Annotated 5월호를 편집하는 데 도움을 준 Sergey Panteleev에게 감사드립니다.

News

PHP 8.1.6 and PHP 8.0.19 released

https://www.php.net/ChangeLog-8.php#8.1.6
https://www.php.net/ChangeLog-8.php#8.0.19

활성(active) branch에 비보안 버그 수정 업데이트입니다.

Release managers for PHP 8.2 have been selected!

https://wiki.php.net/todo/php82

PHP 8.2의 릴리스 관리자가 선정되었습니다!

바로 Pierrick CharronSergey Panteleev입니다. PHP 8.1 RM인 Ben Remsey가 새로운 신입 RM을 도울 것입니다.

PHP.Watch 및 Brent의 What’s new in PHP 8.2 게시물에서 PHP 8.2가 어떻게 형성되고 있는지 확인할 수 있습니다. 첫 번째 예비 PHP 8.2 벤치마크는 PHP 8.1에 비해 2.5% 성능 향상을 보여줍니다.

https://www.bleepingcomputer.com/news/security/popular-python-and-php-libraries-hijacked-to-steal-aws-keys/

PHPass 패키지가 어떻게 해킹되었는지 알아보세요. (위 기사와는 조금 다른 내용입니다.)

  • Rust/Python/PHP/Node의 유명 패키지 레지스트리에서 소유자의 이메일이나 연결된 github 계정이 유효하지 않는 패키지를 탈취할 수 있음을 보여주고,
    이메일 계정을 탈취하기 위해 도메인을 구입하거나 폐기된 GitHub 리포지토리를 다시 살렸다고 합니다(사실 폐기된 리포지토리명으로 생성은 안 되는데 아무렇게 만든 뒤 변경하는 방식으로는 가능했습니다). 이렇게 탈취한 뒤 악성코드를 심어 새로운 버전을 올리거나 최신 버전을 수정(이것도 문제)한 뒤 사용자들이 가져가게 합니다.

https://www.php-fig.org/psr/psr-7/meta/#7-errata

PHP-FIG는 PSR-7에 대한 보안 관련 정오표를 게시했습니다. MessageInterface 구현 시 몇몇 문자를 거부하는 등 헤더를 검증해야 합니다.

WordPress 6.0

https://wordpress.org/news/2022/05/arturo/

많은 유용한 기능과 UI 개선이 포함됐습니다.

Moodle 4

https://moodle.com/news/moodle-4-is-here/

인기 있는 오픈 소스 e-러닝 플랫폼의 주요 업데이트입니다.

Developer Ecosystem Survey 2022

https://surveys.jetbrains.com/s3/t-developer-ecosystem-survey-2022

2022년 개발자 에코시스템에 관한 설문조사에 참여하여 MacBook Pro, Xbox Series X, PlayStation 5 또는 기타 상품을 받을 수 있는 기회를 잡으십시오.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다. 시리즈의 두 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

🤔 [RFC] Stricter implicit boolean coercions

https://wiki.php.net/rfc/stricter_implicit_boolean_coercions

논의 중.

암시적인 bool 값 변환을 좀 더 엄격하게 제한하고자 합니다.

🤔 [RFC] Expand deprecation notice scope for partially supported callables

https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices

논의 중.

이미 8.2에 accept된 [PHP RFC: Deprecate partially supported callables]의 범위를 확장하고자 하는 추가 RFC입니다. 이 RFC에 대한 자세한 내용은 Julliette와 함께하는 PHP Internals News 팟캐스트를 들어보십시오.

✅ [RFC] Undefined Property Error Promotion

https://wiki.php.net/rfc/undefined_property_error_promotion

PHP 9.0에 Accept 됐습니다.

정의되지 않은 속성에 엑세스하면 이전엔 E_NOTICE, PHP 8.0부터는 E_WARNING, PHP 9.0부터는 error를 throw합니다.

✅ [RFC] MySQLi Execute Query

https://wiki.php.net/rfc/mysqli_execute_query

PHP 8.2에 Accept 됐습니다.

매개변수화된 쿼리와 함께 mysqli를 더 쉽게 사용할 수 있습니다.

✅ [RFC] Readonly classes

https://wiki.php.net/rfc/readonly_classes

PHP 8.2에 Accept 됐습니다.

Giuseppe Mazzapica(@gmazzap)의 트윗

With https://wiki.php.net/rfc/readonly_classes accepted, having read-only & type-safe simple data structures is going to be very easy in PHP 8.2
readonly class sample code

The PHP Foundation: Interview with Core Developers

https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/

PHP 재단의 핵심 개발자와의 인터뷰 – Sebastian Bergman이 George, Derick, Ilija, Jakub 및 Máté를 인터뷰합니다. 곧 Arnaud의 답변도 알려 드리겠습니다.

opcache 최적화 프로그램

https://www.npopov.com/2022/05/22/The-opcache-optimizer.html

Nikita Popov는 PHP 핵심 엔진에 대한 심층 분석 시리즈를 계속합니다.

Tools

azjezz/psl 2.0

https://github.com/azjezz/psl

PHP 표준 라이브러리 – 현대적이고 일관되고 중앙 집중식이며 type을 충분히 사용하는 PHP용 non-blocking API 세트입니다. 이 주요 업데이트에는 비동기, TCP, UDP, 파일, IO 등과 같은 많은 개선 사항과 새로운 구성 요소가 포함되어 있습니다.

clue/framework-x

https://github.com/clue/framework-x

반응형 웹 애플리케이션을 구축하기 위한 간단하고 빠른 마이크로 프레임워크입니다. ReactPHP 비동기 스택 위에서 실행됩니다.

Christian Lück(@another_clue)의 트윗

@ReactPHP is going to be even more awesome! 🚀
Currently boosting performance from 32000 to 39000 requests/s.
This makes 18 billion requests per month on top 😎 On my laptop! On a single CPU core! 🔥
PHP scales! 💯

MedUnes/php-spx-installer

https://github.com/MedUnes/php-spx-installer

PHP SPX(A simple profiler for PHP)용 설치 프로그램입니다.

bmitch/churn-php

https://github.com/bmitch/churn-php

리팩토링이 필요한 파일을 검색합니다. 경로에 있는 각 PHP 파일을 검사하고 순환적 복잡성과 변경 기록을 기반으로 점수를 부여합니다.

PhpStorm에서는 여러 메트릭을 기반으로 리팩토링 후보를 찾는 built-in Refactoring Opportunities 검사를 활성화할 수 있습니다. 여기에서 자세히 알아보십시오.

Refactoring Opportunities 검사 옵션

역자 주 :
PhpStorm 2021.2부터 들어왔지만, IntelliJ에 PHP plugin을 사용하고 계신 분이면 이 옵션이 안 보일 수 있습니다. 이때는 PHP Architecture plugin을 추가로 설치하시면 됩니다.
아래 플러그인으로도 비슷한 효과를 보실 수 있습니다.

Monolog 3.0

https://github.com/Seldaek/monolog/releases/tag/3.0.0

대부분 cleanup 릴리스입니다. 더 강력한 type을 제공하고 이제 최소 PHP 8.1이 필요합니다.

Tinkerwell 3

https://tinkerwell.app/

The paid PHP code runner received a major update. Learn more.
유료 PHP 코드 러너가 메이저 업데이트 됐습니다. 자세히 알아보기.

Blackfire.io

https://blackfire.io/

PHP 코드에서 병목 현상을 찾기 위한 이 다목적 도구는 이제 오픈 소스 프로젝트에서 무료입니다 .

TomasVotruba/awesome-php-ast

https://github.com/TomasVotruba/awesome-php-ast

A curated list of tools, articles, and books about abstract syntax trees in the PHP world.
PHP 세계의 추상 구문 트리에 대한 도구, 기사 및 책의 선별된 목록입니다.

friendsoftwig/twigcs

https://github.com/friendsoftwig/twigcs

Twig 템플릿의 스타일 체커.

PHPStan 1.7.0

https://phpstan.org/

완전히 static한 리플렉션을 추가하고 @phpstan-consistent-constructor를 구현하고 new static() 문제를 해결하는 또 다른 방법으로 새로운 규칙을 추가한 버전입니다.

역자 주:
현재 블로그에는 1.7에 관한 내용이 없는데, GitHub release 페이지에서 내용을 확인하실 수 있습니다.

Latte 3.0.0

https://blog.nette.org/en/latte-3-an-impressive-leap#

완전히 재작성된 인기있는 템플릿 엔진의 업데이트.

dingo-d/wp-pest-integration-test-setup

https://github.com/dingo-d/wp-pest-integration-test-setup

Pest로된 WordPress 통합 테스트 스위트를 추가하는 패키지입니다. 사용 방법에 대한 자세한 내용은 이 블로그 게시물을 읽어 보세요.

CuyZ/Valinor

https://github.com/CuyZ/Valinor

모든 입력을 강력한 형식의 값 개체 구조로 매핑하는 데 도움이 되는 PHP 라이브러리입니다.

Symfony

what’s coming in Symfony 6.1

https://symfony.com/blog/category/living-on-the-edge/6.1

Symfony 6.1에서 제공 되는 기능을 확인하세요.
attribute를 통한 서비스 자동 연결(autowiring)개선된 라우팅 기능이 커뮤니티에서 가장 인기가 많은 것 같습니다. 지금까지 여러분께 가장 좋았던 것은 무엇인가요?

Experimental: Unpacking message properties as handler arguments in Symfony Messenger

https://angelovdejan.me/2022/05/10/experimental-unpacking-message-properties-as-method-arguments.html

Dejan Angelov의 Symfony Messenger에서 메시지 속성(property)을 핸들러 인수(argument)로 자동으로 전달하는 실험.

역자 주:
PHP attributes를 활용한 포스트 Using custom PHP attributes for registering and configuring Symfony Messenger handlers에서 이어지는 글입니다.

Why do we need Symfony Polyfill (… and why we shouldn’t)

https://thecodest.co/blog/why-do-we-need-symfony-polyfill-and-why-we-shouldnt

Sebastian Luczak의 Symfony Polyfill이 필요한 이유(… 그리고 필요하지 않은 이유).

nbgrp/singlea

https://github.com/nbgrp/singlea

SingleAuth 인증 프레임워크를 기반으로 하는 진정한 SSO 서비스를 제공하는 Symfony 번들 세트입니다.

Laravel

Does Laravel Scale? by Jack Ellis.

https://usefathom.com/blog/does-laravel-scale

“라라벨은 확장할 수 있습니까?” by Jack Ellis.

글쓴이가 운영하는 Fathom Analytics팀은 월 1,570억 개 이상의 요청을 처리할 수 있는 인프라에서 Laravel을 실행합니다.

역자 주:
Laravel이 대규모로 애플리케이션을 처리할 수 없을 거라는 부정적인 시각에 반박합니다.

  • 대부분이 Wikipedia나 Facebook 만큼의 트래픽을 처리할 생각은 아닐 것
  • 라라벨의 벤치마크 점수는 낮지만, 벤치마크는 큰 의미가 없다.
  • 주요 병목 현상의 원인이 되는 데이터베이스, 캐시 등의 외부 서비스 연동에서 발생하는 문제를 해결해야 하고, CDN, Queue system이나 Laravel Octane 같은 도구를 사용할 수도 있다. 커뮤니티 지원도 중요하다.
  • 대규모 서비스를 위한 코드 작성이나 대규모로 배포를 위한 방법도 고민해야 한다.
  • 결론 : Laravel이 99.99994% 이상의 웹 애플리케이션을 위한 환상적인 선택이라는 것

The Ultimate Guide to Getting Started With Laravel

https://blog.freshbits.in/the-ultimate-guide-to-getting-started-with-laravel

Gaurav Makhecha의 Laravel 시작을 위한 궁극의 가이드.
초보자가 처음부터 Laravel을 배울 수 있도록 도와주는 포괄적이고 긴 튜토리얼입니다.

Eloquent Performance: 4 Examples of N+1 Query Problems

https://laravel-news.com/laravel-n1-query-problems

Laravel Daily의 Povilas Korop이 이야기하는 N+1 Query의 4가지 사례

  • Case 1. 일반적인 N+1 Query
  • Case 2. Two Important Symbols.
  • Case 3. “Hidden” Relationship in Accessor.
  • Case 4. Be Careful with Packages.

Laravel 8.43부터 built-in N+1 Query detector가 도입됐습니다!

How to add a spotlight-like search field to your Laravel app by Freek Van der Herten.

https://freek.dev/2251-how-to-add-a-spotlight-like-search-field-to-your-laravel-app

Freek Van der Herten의 Laravel 앱에 스포트라이트 같은 검색 필드를 추가하는 방법.
중첩된 메뉴가 끔찍하기 때문이죠.

Laravel DDD by Steve McDougall.

https://www.juststeveking.uk/getting-started-with-ddd-in-laravel/

Laravel에서 DDD 시작하기.

roelofjan-elsinga/aloia-cms

https://github.com/roelofjan-elsinga/aloia-cms

라라벨에서 drop-in CMS를 구현하기 위한 패키지. 컨텐츠를 저장하기 위해 파일을 사용합니다.

The Laravel Idea plugin for PhpStorm collaborated with Christoph Rumpel to bring

https://laravel-idea.com/

PhpStorm용 Laravel Idea 플러그인. Christoph Rumpel과 협력 하여 📺 비디오 자습서 시리즈를 제공 합니다.

기타

Attribute usage in the top-1000 PHP packages

https://stitcher.io/blog/attribute-usage-in-top-php-packages

Brent Roose의 상위 1000개 PHP 패키지에서 Attribute 사용 여부 조사.
스포일러: 그들 중 20%만이 Attribute를 사용하며 가장 많이 사용되는 Attribute는 #[ReturnTypeWillChange]입니다.

📺 Dealing with deprecations by Brent Roose.

https://stitcher.io/blog/dealing-with-deprecations

Brent는 PHP 8.2에 많이 추가된 deprecation에 효과적으로 대처하는 방법에 대해 설명합니다.

그건 그렇고, PhpStorm에서 #[Deprecated(reason: '', replacement: '')] attribute로 업그레이드하는 방법을 사용자에게 지시할 수 있습니다 - 자세히 알아보기.

Dockerize a PHP Application with CI/CD by Rafie Younes.

https://semaphoreci.com/community/tutorials/dockerizing-a-php-application

How to profile your PHP applications with Xdebug by Vincent Brouté.

https://www.vincentbroute.fr/blog/how-to-profile-your-php-applications-with-xdebug/

Xdebug로 PHP 애플리케이션을 프로파일링하는 방법 .

Much ado about null by Larry Garfield.

https://peakd.com/hive-168588/@crell/much-ado-about-null

왜 당신이 정말로 그 null type을 사용하고 싶은지, 그리고 당신이 그 대신에 무엇을 해야 하는지.

Move that foreach() inside the method by Damien Seguy.

https://www.exakat.io/en/move-that-foreach-inside-the-method/

여러 PHP 함수는 단일 또는 다중 값으로 작동합니다. 예를 들어 array_merge()는 여러 배열을 하나로 병합합니다.
각 요소를 개별적으로 처리하기 위해 동일한 메서드를 여러 번 호출하는 대신 인수 목록을 한 번에 처리하여 약간의 성능 향상을 얻을 수 있습니다.

역자 주:
지난 php-annotated에 소개된 Speeding up array_merge()도 참고하세요.

Steve Bauman(@SteveTheBauman)의 트윗

https://twitter.com/SteveTheBauman/status/1525525749461135361

Today I learned you can unpack conditionally in PHP, pretty neat! 👌
Steve Bauman(@SteveTheBauman)의 트윗

Hadi Hariri(@hhariri)의 트윗

https://twitter.com/hhariri/status/1524018677116506114

“언젠가 여러 구현을 가질 수 있기 때문에 인터페이스를 선언하고 있습니다.”라고 말하는 사람이 있죠.
물론입니다. 그 날이 오면 Extract Interface 리팩토링을 수행하세요. 대부분의 IDE는 한 번의 클릭으로 이를 수행합니다. 그때까지 인터페이스를 삭제하십시오.

Community

friendsofphp.org

https://friendsofphp.org/

가까운 PHP 모임을 찾아보세요! 그들이 마침내 돌아왔습니다! 또한 가상 이벤트를 제공하는 새로운 PHP Mega Meetup GroupMerge PHP도 있습니다.

📺 The PHP Roundtable podcast - Back at the Table in episode 84

https://www.youtube.com/watch?v=JkIqSy1tylM

With Sara Golemon, Joe Ferguson, Ben Ramsey, and Eric Van Johnson.

awesome new paper elephants by Vincent Pontier

https://www.vincentpontier.com/elephpant/categorie-produit/phpaper-toy/?orderby=price

Vincent Pontier의 멋진 새 종이 코끼리 를 확인하세요.

종이 코끼리 이미지

thelia.net/#Elephant

https://thelia.net/#Elephant

고전적인 플러시 천 디자인을 선호한다면 여기 당신의 무리에 추가할 만한 멋진 품목이 있습니다!

플러시 천 코끼리 인형 이미지

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 봄 버전의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


News

PHP 7.4.29, PHP 8.1.5, and PHP 8.0.18

https://www.php.net/ChangeLog-7.php#7.4.29
https://www.php.net/ChangeLog-8.php#8.1.5
https://www.php.net/ChangeLog-8.php#8.0.18

내장된 종속성의 업데이트로 인한, Windows 사용자를 위한 보안 릴리스입니다. Windows가 아닌 사용자의 경우 일반적인 버그 수정 업데이트일 뿐입니다. PHP 7.3의경우 보안 문제가 있더라도 업데이트가 더 이상 릴리스되지 않습니다. PHP 7.3 또는 PHP 5.x 버전을 계속 사용하고 있다면 가능한 한 빨리 업데이트하는 것이 좋습니다.

Symfony 팀은 다가오는 Symfony 6.1 릴리스에서 최소 필수 PHP 버전을 8.1로 올렸습니다. Drupal 10 과 Laravel 10에서도 동일한 변화가 이루어졌습니다.

또한 최근 출시된 Ubuntu 22.04 LTS 에는 PHP 8.1이 사전 설치된 상태로 제공됩니다.

Updates from the PHP Foundation

https://opencollective.com/phpfoundation

  • 6명의 후원 개발자가 활발하게 핵심(core) 영역을 유지관리하고 있습니다.
    • PHP Foundation Core Developers를 구하는 것이 2022년의 목표였고 이 6명이 초기 멤버로 활동하게 됩니다.
    • 이 중에는 Xdebug의 Derick Rethans도 있는데, 일주일에 하루 일을 한다는 트윗을 남긴 것으로 보아 위 개발자들이 모두 full-time으로 일을 하는 것은 아닌가 봅니다.
  • php.foundation 웹사이트가 가동 중입니다.
    • 후원사가 많이 늘었네요. OP.GG도 꾸준히 후원하고 있습니다.
  • Core 개발에 대한 통찰력이 담긴 별도의 뉴스레터가 정기적으로 발행될 것입니다. 다음은 초판입니다: PHP Roundup #1.
  • Sebastian Bergmann의 핵심 개발자 인터뷰.

Developer Ecosystem Survey 2022

https://surveys.jetbrains.com/s3/t-developer-ecosystem-survey-2022

JetBrains의 연례 설문조사가 막 시작되었으며 물론 PHP에 대한 섹션도 있습니다. 작년의 결과에서와 같은 것을 볼 수 있을 것입니다. 설문조사에 참여해서 경품을 받을 수 있는 기회를 잡으세요!

News from PHP-FIG

  • Coding Style PER (PHP Evolving Recommendation)은 PHP-FIG에서 공식적으로 승인했으며 PSR-12를 대체합니다. 이것은 “라이브” 표준을 보여주는 최초의 PER 문서입니다. PER 덕분에 PHP에 새로운 구문이 추가될 때마다 다른 PSR 표준을 발표할 필요가 없습니다. 대신 SemVer에 따라 PER이 업데이트됩니다.
  • 새로운 PSR 초안이 승인되었습니다: PSR-22 – Application Tracing.

PhpStorm 2022.1 released

https://blog.jetbrains.com/phpstorm/2022/04/phpstorm-2022-1-release/

Blade, WordPress, ArrayShape annotation 등에 대한 개선 사항이 함께 제공됩니다. 짧은 What’s New 비디오를 확인하거나 전체 스토리를 보려면 블로그 게시물을 읽으십시오.

Composer 2.3 Release

https://blog.packagist.com/composer-2-3/

이 릴리스는 사용자 및 현대화된 내부 코드베이스를 위한 약간의 개선 사항을 제공합니다.

최근에 발견된 취약점도 있었습니다. CVE-2022-24828: Composer Command Injection. composer.json에 있는 URL에 명시적으로 나열된 Git 또는 Mercurial 리포지토리를 제어하는 공격자는 특수하게 조작된 분기 이름을 사용하여 composer 업데이트를 실행하는 시스템에서 명령을 실행할 수 있습니다.

composer self-update를 실행하여 Composer가 최신 상태인지 확인하십시오.

Craft CMS 4

https://craftcms.com/blog/craft-4?ref=phpannotated

인기 있는 오픈 소스 CMS의 주요 업데이트가 릴리스되었습니다.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Roundup 시리즈에서 자세히 다루므로 간략하게만 언급하겠습니다.

Last call for PHP 8.2 release managers!

https://externals.io/message/117595#117664

PHP 8.2 릴리스 관리자를 구하는 마지막 요청입니다!
3년 반을 약정할 수 있어야 하며 PHP, Git, 가급적이면 C에 대한 지식이 있어야 합니다. 이미 베테랑 후보자 1명과 신인 후보자 6명이 있습니다.

✅ [RFC] Redacting parameters in back traces #PHP8.2

https://wiki.php.net/rfc/redact_parameters_in_back_traces

예외 시 back trace 기록에서 민감한 정보를 노출하는 것을 막기 위해 함수의 매개변수에 적용할 수 있는 새로운 표준을 제시했습니다.

✅ [RFC] Allow null and false as stand-alone types #PHP8.2

https://wiki.php.net/rfc/null-false-standalone-types

현재 null은 단일 유형으로 선언할 수 없습니다. false는 더 나아가 전통적으로 null 대신 오류 상태를 전달하기 위해 사용됐고, 이게 union type RFC에 “literal type”으로 소개된 주요 이유였습니다.

이 RFC에선 null과 false를 단일 타입으로 사용할 수 있도록 제안합니다.

✅ [RFC] Deprecate ${} string interpolation #PHP8.2

https://wiki.php.net/rfc/deprecate_dollar_brace_string_interpolation

PHP는 큰따옴표( “) 및 heredoc을 사용하여 다양한 방식으로 문자열에 변수를 포함할 수 있습니다.

  • 변수 직접 포함(“$foo”)
  • 변수 외부의 중괄호(“{$foo}”)
  • 달러 기호 뒤의 중괄호(“${foo}”)
  • 가변적인 변수(“${expr}”, (string) ${expr}와 동일한 표현)

옵션 1과 2에는 장단점이 있습니다. 옵션 3과 4는 중복되는 구문으로 인해 쉽게 혼동되고, 3은 1과 2보다 성능이 완전히 떨어지며, 4는 문자열 보간에서 거의 유용하지 않은 완전히 다른 의미를 갖습니다.

이 RFC 는 PHP 8.2에서 옵션 3과 4를 더 이상 사용하지 않고 PHP 9.0에서 제거할 것을 제안합니다.

✅ [RFC] Deprecate and Remove utf8_encode and utf8_decode

https://wiki.php.net/rfc/remove_utf8_decode_and_utf8_encode

  • PHP 8.2에서 utf8_encode 및 utf8_decode의 모든 사용은 표준 E_DEPRECATED 진단을 발생시킵니다.
  • PHP 9.0에서는 utf8_encode 및 utf8_decode 함수가 PHP에서 제거됩니다.
  • 문서나 사용 중단(deprecation) 메시지는 사용자가 사용 방법이 올바른지 확인하고 기본 대체제로 mb_convert_encoding를 권장하며 UConverter::transcode와 iconv도 선택지로 나열하도록 권장합니다.

✅ [RFC] Undefined Variable Error Promotion

https://wiki.php.net/rfc/undefined_variable_error_promotion

이 RFC는 정의되지 않은 변수에 액세스하는 것이 PHP의 다음 메이저 버전(Target: PHP 9.0)에서 잘못된 동작으로 렌더링되고, 정의되지 않은 변수에 액세스하면 오류 예외가 발생할 것을 제안합니다.

🗳 [RFC] Readonly classes

https://wiki.php.net/rfc/readonly_classes

PHP 8.1은 PHP RFC: Readonly properties 2.0을 통해 읽기 전용 속성에 대한 지원을 추가 했습니다. 그러나 특히 많은 속성을 포함하는 경우 (준)불변 클래스를 선언하는 것은 여전히 쉽지 않습니다. 따라서 이 RFC는 readonly 클래스에 대한 지원을 추가할 것을 제안합니다.

투표는 2022-05-11까지인데, 10일 현재 27:6으로 찬성이 우세합니다.

❌ [RFC] Sealed Classes

https://wiki.php.net/rfc/sealed_classes

봉인된 클래스는 속성 값 목록에 명명된 클래스에 의해서만 직접 확장될 수 있도록 제안되었으나 투표는 2/3의 찬성표를 얻지 못하고 거부(Decline)되었습니다.

🆕 [RFC] Add true type

https://wiki.php.net/rfc/true-type

위에서 언급한 null and false as standalone types이 통과됨에 따라 true도 독립된 타입으로 승격하자는 제안입니다.

🆕 [RFC] Disjunctive Normal Form Types

https://wiki.php.net/rfc/dnf_types

DNF(Disjunctive Normal Form)는 부울 표현식을 구성하는 표준 방법입니다.

이 RFC 는 합집합과 교집합 유형을 허용하기 위해 DNF 유형을 지원할 것을 제안합니다.

[RFC] final class Collections\Deque

https://wiki.php.net/rfc/deque

최적화된 데이터 구조를 PHP에 추가하려는 계획의 일환으로 첫 번째 제안이 준비되었습니다.
Deque – 이것은 양방향 대기열입니다. 즉, 시작과 끝에서 항목을 추가 및 제거할 수 있습니다. SplQueue또는 SplDoublyLinkedList 대신 사용하여 성능을 향상시키고 메모리 소비를 줄일 수 있습니다.

RFC Introduce a class-string type

https://gist.github.com/cspray/0f4e67e8731a8ea9382147707e75287f

공식 RFC는 아니지만 class-string을 실제 유형으로 만드는 것은 흥미로운 아이디어입니다. 이미 정적 분석기의 주석에서 널리 사용되기 때문입니다.

Tools

CanIPHP.com

https://caniphp.com/

caniuse.com처럼 PHP 기능별로 사용할 수 있는 버전을 찾을 수 있습니다.

clue/stream-filter

https://github.com/clue/stream-filter

PHP에서 스트림 필터링에 대한 간단하고 현대적인 접근 방식입니다.

PHP에서 스트림 필터를 사용하여 이런 미친 짓도 할 수 있고, 반대로 이렇게 실용적인 것도 할 수 있습니다.

(두 예시는 final 키워드를 제거하거나 모든 접근 제한을 푸는 행위를 하고 있어서 저는 둘 다 미친 짓처럼 보이기도…)

sfx101/deck

https://github.com/sfx101/deck

PHP 초보자에게 유용할 수 있는 로컬 웹 개발 환경의 빠른 시작 및 구성을 위한 GUI 도구입니다.

marijnvanwezel/try

https://github.com/marijnvanwezel/try

단일 명령으로 Composer 패키지를 사용해 볼 수 있는 간단한 CLI 도구입니다. 그냥 설치하고 실행 해보세요: try %vendor%/%package%.

frodeborli/moebius

https://github.com/frodeborli/moebius

PHP 버전 8.1 이상을 위한 Golang과 유사한 코루틴. 저자는 자신의 이벤트 루프 구현체와 자체 테스트 프레임워크를 사용했습니다.

Fiber를 사용하고, Swoole과도 비슷해보이지만 별도 extension이 필요 없습니다.

Crell/AttributeUtils

https://github.com/Crell/AttributeUtils

속성(attribute))의 구문 분석 및 관리를 용이하게 하는 유틸리티입니다.

doctrine/annotations 혹은 doctrine annotation interface가 적용된 PHP 8의 속성을 모두 읽을 수 있는 koriym/Koriym.Attributes도 흥미롭습니다.

spatie/visit

https://github.com/spatie/visit

모든 URL의 응답을 아름답게 표시하는 CLI HTTP 클라이언트입니다. colorize(code highlighting)하기 위해 bat과 jq를 사용합니다.

Think of it as curl for humans.

laravel/valet

https://github.com/laravel/valet

Mac용 경량 로컬 개발 환경입니다. Docker 또는 VirtualBox 대신 기본 Nginx와 PHP만 있습니다. 라라벨 뿐만 아니라 모든 프로젝트에서 사용할 수 있으며 v3부터는 폴더(프로젝트)마다 PHP 버전을 다르게 사용할 수 있습니다.

roach-php/core

https://github.com/roach-php/core

PHP를 위한 완벽한 웹 스크래핑 툴킷.

PHPStan 1.6.0

https://phpstan.org/blog/phpstan-1-6-0-with-conditional-return-types

조건부 리턴 타입 및 정수(integer) 마스크를 지원하여 출시되었습니다.

flow-php/etl

https://github.com/flow-php/etl

ReactPHP 또는 Amphp를 통한 비동기 처리를 지원하는 PHP용 ETL(Extract Transform Load) 데이터 처리 라이브러리입니다.

igorhrcek/wp-cli-secure-command

https://github.com/igorhrcek/wp-cli-secure-command/

WordPress 설치를 보호하는 하나의 CLI command.

williarin/wordpress-interop

https://github.com/williarin/wordpress-interop

다른 PHP 응용 프로그램에서 WordPress 데이터베이스에 더 쉽게 액세스할 수 있도록 하는 Doctrine/DBAL 기반 패키지입니다.

sj-i/php-profiler

https://github.com/sj-i/php-profiler
https://github.com/reliforp/reli-prof

php-profiler에서 reliforp/reli-prof로 이름을 바꾸고 있습니다.

순수 PHP(FFI)로 구현된 PHP용 샘플링 프로파일러입니다. flame 다이어그램을 생성하고, top-like 모드(demon mode도 있음)에서 trace 출력을 실행하는 등의 작업을 수행할 수 있습니다.

mrsuh/php-var-sizeof

https://github.com/mrsuh/php-var-sizeof

A function to get the memory size for any variable that promises to be more accurate compared to memory_get_usage(). Requires PHP 7.4 or higher with FFI.

memory_get_usage()에 비해 더 정확한, 모든 변수의 메모리 크기를 가져오는 함수 입니다. FFI를 사용하는 PHP 7.4 이상이 필요합니다.

davidcole1340/ext-php-rs

https://github.com/davidcole1340/ext-php-rs

Rust에서 PHP 확장을 빌드하기 위한 Zend API에 대한 바인딩입니다.

easysoft/phpmicro

https://github.com/easysoft/phpmicro

당신의 CLI 툴과 함께 (PHP에 구애받지 않는) 바이너리로 배포될 수 있도록 정적으로 컴파일된 마이크로 PHP 인터프리터입니다. Marcel Pociot가 프로세스를 자동화하기를 기대합니다!

While other people argue about PHP not being a good choice, I started working on making PHP/Laravel Zero apps truly portable

Symfony

See what’s coming in Symfony 6.1.

https://symfony.com/blog/category/living-on-the-edge/6.1

📺 Harmonious Development with Symfony 6

https://symfonycasts.com/screencast/symfony

이제 Symfony를 시작하기 위한 2시간 이상의 튜토리얼이 SymfonyCasts에서 완전히 무료로 제공됩니다.

Using Symfony Form in WordPress.

https://jolicode.com/blog/using-symfony-form-in-wordpress

WordPress에서 Symfony Form 사용하기

“Symfony: The Fast Track”

https://symfony.com/book

초보자와 숙련된 개발자 모두를 위한 공식 Symfony 책입니다. Symfony 6 기준.

Symfony Station Communiqué – April 29, 2022.

https://www.symfonystation.com/Symfony-Station-Communique-29-April-2022

Laravel

📺 Laravel Origins: The Documentary

https://www.youtube.com/watch?v=mH7cgoX3K0g

이 비디오는 Laravel이 왜 생겨났는지, 지난 10년 동안 어떻게 성장했는지, 그리고 Taylor와 더 넓은 Laravel 커뮤니티의 미래에 대한 이야기를 알려줍니다.

Laravel Idea 5.3

https://laravel-idea.com/blog/2022/5-3-release

인기 있는 유료 PhpStorm 플러그인 업데이트.

LaravelProTips.com – A collection of useful articles and tweets.

https://laravelprotips.com/

유용한 기사 및 트윗 모음.

alexeymezenin/laravel-best-practices

https://github.com/alexeymezenin/laravel-best-practices

더 많은 Laravel 모범 사례.

한국어 버전은 2018년에 임영록(cherrypick)님이 번역해주셨습니다. 원래의 저장소는 작년까지도 계속 업데이트 되고 있었네요.

📺 Build a Laravel app and deploy it to production in 5 hours

https://www.youtube.com/watch?v=mmtVkDh9RGw

Brent가 시작부터 프로덕션 배포까지의 과정을 5시간 동안 빠르게 진행합니다.

📺 Xdebug 3: Laravel Sail with PhpStorm.

https://www.youtube.com/watch?v=Xgn0EtB4chc

Derick Rethans가 Laravel Sail Docker 환경에서 Xdebug를 활성화하고 설정하는 방법을 보여줍니다.

Yii

Yii news 2022, issue 1.

https://opencollective.com/yiisoft/updates/yii-news-2022-issue-1

Interview Questions For Yii 2

대부분은 일반적으로 PHP에 관한 것이며 모든 구직자에게 유용할 수 있습니다.

기타

Pascal Landau의 PHP 개발자용 Docker에 대한 포괄적인 게시물

https://www.pascallandau.com/docker-php-tutorial/

2022년 PHP 8.1 애플리케이션을 위한 Docker 시작하기, PHP 8.1에서의 PhpStorm, Docker 및 Xdebug 3 등 그의 웹 사이트에서 더 확인해보세요.

Posts on naming constructors by Andreas Möller and by Stefan Priebsch.

Naming constructors(생성자에 이름을 지어주기)에 관한 두가지 글입니다.

Matthias Verraes의 Named Constructors in PHP에서 출발하는 글입니다. 기본 생성자 하나만 제공되는 PHP에서 constructor 대신 도메인을 충분히 표현하는 static method로 overloading이 안 되는 문제를 보완하는 방식입니다.

class SomeValueObject
{
private function __construct(
...
) {
...
}

public static function fromInt(int $value): self
{
...
}

public static function fromString(string $value): self
{
...
}
}

How the Middleware Pattern works and can easily be applied in PHP.

https://doeken.org/blog/middleware-pattern-in-php

미들웨어 패턴이 작동하는 방식과 PHP에서 쉽게 적용할 수 있는 방법.

How To Mock Functions That Have External HTTP Requests.

https://hermanradtke.com/how-to-mock-functions-that-have-external-http-requests/

외부 HTTP 요청이 있는 함수를 mocking하는 방법.

Writing Readable PHP

https://writing-readable-php.com/

Freek Van der Herten과 Christoph Rumpel의 유료 강좌로, 여러분과 여러분의 동료 및 미래의 자신을 위해 코드를 즐겁게 읽을 수 있는 간단한 팁을 제공합니다.

PHP Tricks: Multi-value match()

https://peakd.com/hive-168588/@crell/php-tricks-multi-value-match

하나의 match 표현식(PHP 8.0 이상)에서 여러 값을 비교할 수 있다는 것을 알고 계셨습니까? 이와 같이:

function mayFriend(User $u1, User $u2, Group $group): FriendPermission
{
return match ([$u1->inGroup($group), $u2->inGroup($group)]) {
[true, true] => FriendPermission::Allow,
[true, false] => FriendPermission::WithApproval,
[false, true] => FriendPermission::WithApproval,
[false, false] => FriendPermission::Deny,
};
}

Interfaces are not class templates

https://www.exakat.io/en/interfaces-are-not-class-templates/

메서드가 없는 유효한 인터페이스를 활용하는 방법을 설명합니다.

Speeding up array_merge().

https://www.exakat.io/en/speeding-up-array_merge/

배열을 합치기 위해 loop 안에서 여러번 array_merge를 호출하지 말고, array_merge가 여러 인자를 받을 수 있으므로 한번에 실행하라고 조언합니다.
여러 인자를 받을 수 있는 implode(), array_sum()도 마찬가지의 효과가 있습니다.
최신 버전의 PHP를 쓰기만해도 성능 개선 효과를 볼 수 있습니다.

All the Dynamic Syntaxes in PHP – Good source for interview questions?

https://www.exakat.io/en/all-the-dynamic-syntaxes-in-php/

PHP의 동적 구문.

Solving Open Source Supply Chain Security for the PHP Ecosystem

https://paragonie.com/blog/2022/01/solving-open-source-supply-chain-security-for-php-ecosystem

PHP 생태계를 위한 오픈 소스 공급망 보안 해결. Paragon IE 사람들의 계획(initiatives)에 대한 흥미로운 게시물입니다. 그들은 이제 앱과 종속성을 안전하게 업데이트하기 위해 Gossamer라는 도구를 개발하고 있습니다. 이전에는 PHP 코어에 libsodium을 도입 하고 JWT에 대한 더 안전한 대안인 Paseto를 만들고 다른 도구도 개발했습니다.

Service locator: an anti-pattern.

https://stitcher.io/blog/service-locator-anti-pattern

라라벨의 파사드나 헬퍼 함수가 Service locator 패턴을 기반으로 만들어져있고, 여기에서 발생하는 문제를 설명합니다. 이런 문제는 의존성 주입이 해결한다고 결론을 냅니다.

(Brent가 2018년 stitcher에 쓴 글인데, 왜 지금 추천을 했는지는 모르겠네요.)

📺 Xdebug 3: Debugging Unit Tests with PhpStorm.

https://www.youtube.com/watch?v=WMGYfgzoap0

Derick Rethans의 강의 영상입니다.

📺 Learn PHP The Right Way – Full PHP course in 88 videos for free.

https://www.youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-

88개 동영상이 포함된 전체 PHP 과정을 무료로 제공합니다.

Generics

PHP는 최근에 제네릭 관련 활동을 많이 보였으므로 이 포스트에서 제네릭 관련 섹션을 제공합니다.

  • 📺 먼저 Brent의 Generics에 대한 비디오 시리즈 Generics in PHP를 확인하세요.
  • 더 자세히 알아보려면 Generics 구현 접근 방식에 대한 게시물에 관심이 있을 수 있습니다 .
  • PHP로 구현하는 흥미로운 프로젝트를 시도해보세요 : mrsuh/php-generics. 흥미롭게도 Reddit 에서는 성능을 위해 PHP에서 런타임 유형 검사를 삭제하는 것에 대한 토론이 있었습니다. 위의 도구는 타입 제거 방식(Type erasure)을 구현하므로 이론적으로는 다음과 같이 성능 관련 사례로 사용할 수 있습니다 : composer dump-generics --type=type-erasure.
  • 제네릭의 주요 응용 프로그램 중 하나는 컬렉션입니다. Comparing PHP Collections이라는 글을 확인하십시오.
  • 그리고 마지막으로 @SerafimArts의 재미있는 작품을 소개합니다.

generics gif by SerafimArts

Community

(PHP 뽕 주의)

📺 PHP isn’t dead, featuring the Laravel Origins cast.

https://www.youtube.com/watch?v=PXx9_FFZi8A

PHP is definitely the best array-oriented programming language

https://twitter.com/savant/status/1519785011381161984

“PHP doeSNt sCaLE”

https://twitter.com/levelsio/status/1520354529421983745

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 1월호의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


News

The PHP Foundation Update, January 2022

https://opencollective.com/phpfoundation/updates/the-php-foundation-update

PHP 재단은은 PHP 언어의 장수와 번영을 보장하는 것을 사명으로 하는 비영리 조직으로 11월 말에 작업을 시작했습니다.

우리는 이미 첫 번째 결과를 얻었습니다. 핵심 개발자들의 후원 신청이 접수되어 처리 중입니다.

재단 팀은 월간 업데이트를 게시할 예정이므로 Twitter @thephpf를 구독하면 최신 뉴스를 받아볼 수 있습니다.

PHP 재단에 대한 자세한 내용은 Joe Watkins, Sara Golemon 및 Sebastian Bergmann이 진행하는 Voices of the ElePHPant Ep 366 팟캐스트를 확인하십시오.

PHP 8.0.15, PHP 8.1.2, PHP 7.4.27

https://www.php.net/ChangeLog-8.php#8.0.15
https://www.php.net/ChangeLog-8.php#8.1.2
https://www.php.net/ChangeLog-7.php#7.4.27

최신 PHP branch의 버그 수정이 릴리스되었습니다. PHP 7.4의 경우 마지막 정기 릴리스이며, 이제부터는 PHP 7.4 branch는 보안 업데이트만 발행됩니다.

PHP version stats: January, 2022

https://stitcher.io/blog/php-version-stats-january-2022

다음은 packagist.org에 따른 PHP 버전에 대한 몇 가지 새로운 통계입니다. 버전 8.1이 나온 지 두 달밖에 안됐지만 이미 9.1%의 점유율을 기록했습니다. 그러나 여전히 PHP 7.4(44%)가 많이 있습니다.

Usage Statistics 이미지

[RFC] User Defined Operator Overloads

https://wiki.php.net/rfc/user_defined_operator_overloads#vote

PHP에 연산자 오버로딩을 추가하자는 제안이 투표를 통과하지 못했습니다. 그러나 저자 Jordan LeDoux와 함께하는 PHP Internals News 팟캐스트에서 자세한 내용을 들어볼 수 있습니다.
Jordan은 또한 PHP용 RFC를 만드는 방법에 대한 매우 철저한 지침을 발표했습니다.

그동안 lisachenko/z-engine 및 FFI 덕분에 연산자 오버로딩을 이미 PHP에서 사용할 수 있습니다. 행렬에 대한 연산자 구현의 예는 lisachenko/native-php-matrix를 참조하십시오.

Releases

thephpleague/flysystem 3.0.0

https://github.com/thephpleague/flysystem

파일 시스템 작업을 위한 인기 라이브러리의 메이저 업데이트입니다. 자세한 내용은 블로그 게시물을 확인하세요.

Cycle 2.0

https://spiralscout.com/blog/meet-cycle-2-0

Cycle의 두 번째 메이저 릴리스 - 전통 방식 및 데몬화된 PHP 애플리케이션 모두에서 사용할 수 있는 PHP용 DataMapper 및 ORM입니다.

ankitpokhrel/tus-php 1.0

https://github.com/ankitpokhrel/tus-php

재개 가능한 파일 업로드를 위한 개방형 프로토콜인 tus.io의 서버 및 클라이언트 구현. 이 프로토콜은 Vimeo 및 Cloudflare 등에서 사용됩니다.

Infection PHP 0.26.0

https://infection.github.io/2022/01/10/whats-new-in-0.26.0/

PHP mutation 테스트 프레임워크에 대한 업데이트입니다. 새 버전은 HTML 보고서, 추가되거나 수정된 줄만 변형하는 등을 기능을 추가합니다.

Doctrine ORM 2.11

https://www.doctrine-project.org/2022/01/11/orm-2.11.html

이 업데이트는 열거형, 가상 컬럼, 읽기 전용 속성, 중첩 속성 등에 대한 지원을 제공합니다.

Roave/BetterReflection 5.0

https://github.com/Roave/BetterReflection/releases/tag/5.0.0

향상된 리플렉션 API: 클래스를 로드하지 않고도 클로저 등에서 정보를 얻을 수 있습니다.
새 버전은 PHP 8.1 지원을 추가하고 더 나은 성능을 제공합니다.

Tools

viewi/viewi

https://github.com/viewi/viewi

PHP와 HTML만을 사용하여 반응형 애플리케이션을 만들기 위한 강력한 도구입니다. 본질적으로 이것은 서버 측 템플릿 엔진 + 프론트엔드 프레임워크입니다. 그러나 핵심은 모든 구성 요소와 논리를 PHP로 설명한 다음 도구가 이를 기본 JS로 변환한다는 것입니다.

프로젝트 웹사이트 viewi.net작동 메커니즘을 자세히 설명하고 코드 예제를 제공합니다. 단계별 자습서를 따라할 수도 있고 Symfony와 통합하는 방법을 확인할 수도 있습니다.

Roach PHP

https://roach-php.dev/

인기 있는 Python 라이브러리인 Scrapy에서 영감을 받은 웹 스크래핑 도구입니다.

symfony/html-sanitizer

https://github.com/symfony/html-sanitizer

신뢰할 수 없는 HTML을 정리하고 XSS로부터 보호하는 새로운 컴포넌트입니다. HTML Purifier의 좋은 대안이 될 수 있습니다.

EventSaucePHP/ObjectHydrator

https://github.com/EventSaucePHP/ObjectHydrator

원시 데이터(예: JSON)를 객체로 변환해주는 라이브러리입니다.

ajthinking/archetype

https://github.com/ajthinking/archetype

PHP 파일/클래스를 수정하기 위한 간단한 인터페이스입니다.

framjet/php-enum-bitmask

https://github.com/framjet/php-enum-bitmask

PHP 8.1의 열거형을 BitMask로 사용하기.

beyondcode/httpdump

https://github.com/beyondcode/httpdump

HTTP 요청을 디버깅하기 위한 Laravel 애플리케이션(web hook 디버깅 등). 임의의 URL을 만들고 그곳으로 가는 모든 요청을 훌륭하게 덤프합니다. httpdump.app에서 작동하는 것을 볼 수 있습니다.

spatie/ignition

https://github.com/spatie/ignition

Laravel의 많은 사람들에게 친숙하지만 이제 프레임워크에 독립적인 디버깅 오류 페이지를 표시하기 위한 이 라이브러리가 업데이트되었으며 모든 애플리케이션에서 사용할 수 있습니다.

디버깅을 위한 오류 페이지를 만들 수 있는 이 라이브러리는 Laravel의 많은 것과 비슷하지만, 이제 프레임워크에 독립적이어서 어느 어플리케이션에서나 사용할 수 있습니다. Overview 블로그 게시물을 확인하세요.

chevere/xr

https://github.com/chevere/xr

Spatie/ray에서 영감을 받은 ReactPHP의 디버그 서버이지만 데스크톱 애플리케이션 대신 CLI 명령으로 실행합니다. 비디오 데모.

JustSteveKing/php-sdk, Sammyjo20/Saloon

https://github.com/JustSteveKing/php-sdk
https://github.com/Sammyjo20/Saloon

동일한 아이디어를 가진 두 개의 유사한 라이브러리: 서비스용 SDK 생성을 단순화하거나 공통 스타일로 다른 API에 접근할 수 있게 구성합니다.

AliSaleem27/wordle-cl

https://github.com/AliSaleem27/wordle-cli

인기 있는 5글자 단어 추측 게임 Wordle의 CLI 버전입니다.

staabm/phpstan-dba

https://github.com/staabm/phpstan-dba

PDO, MySQLi 및 Doctrine/DBAL에서 SQL 쿼리의 유효성을 확인하는 PHPStan용 extension입니다. 데모.

flow-php/etl

https://github.com/flow-php/etl

PHP 애플리케이션에서 사용할 Extract Transform Load 패턴의 구현입니다. 자세한 내용은 작성자의 스레드를 확인하세요.

Symfony

The symfony-cli tool has been open-sourced

https://github.com/symfony-cli/symfony-cli

Symfony 관련 작업 외에도 이 도구에는 MAMP/WAMP의 최신 대안으로 사용할 수 있는 로컬 서버가 포함되어 있습니다. 여러 버전의 PHP를 지원하고(각 프로젝트에서 자체적으로 지정할 수 있음) Docker, 로컬 도메인 및 자동화된 HTTPS와 통합됩니다. 이 도구는 Go로 구현되며 Linux, macOS 및 Windows에서 사용할 수 있습니다.

A better way to quickly start Symfony projects

https://symfony.com/blog/a-better-way-to-quickly-start-symfony-projects

Introducing the Symfony 6 Certification – 90 minutes for 75 questions from 15 topics.

https://symfony.com/blog/introducing-the-symfony-6-certification

15개 주제에서 75개 질문에 대해 90분 동안 시험을 치고 Symfony 6 인증서를 받아보세요.

Organizing your Symfony project tests

https://www.strangebuzz.com/en/blog/organizing-your-symfony-project-tests

테스트를 용도(+속도)에 맞게 아래와 같이 디렉토리를 구분하고 별도로 실행할 수 있게 구성했습니다.

  • Unit tests
  • Integration tests
  • Api tests
  • Functional tests
  • End-to-end tests
  • External tests

The key concepts of Symfony’s Security package in 5 minutes

https://alex-daubois.medium.com/symfonys-security-key-concepts-in-5-minutes-e18033c26b35

Symfony 6 Security component를 설명합니다.

  • User, password and roles
  • User Providers
  • Firewalls
  • Voters and ACL
  • Authenticators, passports and badges

Symfony Messenger 💛 systemd

https://jolicode.com/blog/symfony-messenger-systemd

Use PHP Enums as Doctrine type in Symfony

https://smaine-milianni.medium.com/use-php-enums-as-doctrine-type-in-symfony-85909aa0a19a

Build Symfony and Doctrine ORM Applications with ease using Ecotone

https://blog.ecotone.tech/build-symfony-application-with-ease-using-ecotone/

norberttech/static-content-generator-bundle

https://github.com/norberttech/static-content-generator-bundle

Symfony 애플리케이션에서 정적 HTML 페이지를 생성합니다.

Using custom PHP attributes for registering and configuring Symfony Messenger handlers

https://angelovdejan.me/2022/01/09/custom-php-attributes-for-symfony-messenger-handlers.html

JSON Columns and Doctrine DBAL 3 Upgrade

https://dunglas.fr/2022/01/json-columns-and-doctrine-dbal-3-upgrade/

Laravel

Laracon Online is on Feb 9, and it’s free

https://laracon.net/

컨퍼런스는 보통 유료지만 이번 Laracon Online Winter는 유튜브에서 무료로 중계됩니다.

Building a multi-room chat application with Laravel and Centrifugo

https://centrifugal.dev/blog/2021/12/14/laravel-multi-room-chat-tutorial

Laravel과 Centrifugo로 멀티룸 채팅 애플리케이션 구축하기

Centrifugo : real-time messaging server).

Managing Laravel services

https://downing.tech/posts/managing-laravel-services

Clean Integrations 시리즈 중 세 번째입니다.

  1. Automating Tweets when publishing a new post
  2. Testing APIs and Services in Laravel
  3. Managing Laravel services

Laravel Pseudo-Daemons

https://aaronfrancis.com/2020/laravel-pseudo-daemons

Laravel command의 한계를 극복하고자, Supervisor 구성 없이 코드에 의해 제어되는 유사-데몬을 만든 경험을 공유합니다. 2020년 글이네요.

Primitive Types in Controllers and Closure Routes

https://laravel-news.com/primitive-types-in-controllers-and-closure-routes

How to scale Laravel project on AWS without breaking the bank.

https://laravel-news.com/primitive-types-in-controllers-and-closure-routes

LaravelDaily/Laravel-Roadmap-Learning-Path

https://github.com/LaravelDaily/Laravel-Roadmap-Learning-Path

간단한 것부터 복잡한 것까지 라라벨을 배우기 위한 체계적인 자료 모음입니다.

Building an API using TDD in Laravel

https://laravel.io/articles/building-and-api-using-tdd-in-laravel

Efficient Pagination Using Deferred Joins

https://aaronfrancis.com/2022/efficient-pagination-using-deferred-joins

-- Page 3
select * from users order by created_at desc limit 15 offset 30;

Pagination 구현 시 위와 같이 쿼리하곤 하는데, 이 경우 database에선 모든 row를 읽은 후 offset 이후의 값을 응답합니다. 이를 더 효율적으로 가져오려면 커서 기반으로 조회해야 하는데,

-- Page 3 (Assuming the max ID from page two was 72.)
select * from users where id > 72 order by id limit 15;

Laravel 문서에는 오프셋과 커서 사이의 절충점에 대한 몇 가지 좋은 컨텍스트가 있습니다.
https://laravel.com/docs/8.x/pagination#cursor-vs-offset-pagination

이 글에서는 지연된 조인으로 offset/limit이 적용될 때까지 요청된 열에 대한 액세스를 연기하는 기술입니다.

select * from contacts          -- The full data that you want to show your users.
inner join ( -- The "deferred join."
select id from contacts -- The pagination using a fast index.
order by id
limit 15 offset 150000
) as tmp using(id)
order by id -- Order the single resulting page as well.

이 글에서는 이 아이디어를 Laravel로 구현하는 예제와 더 나은 성능을 위한 MySQL 튜닝 아이디어 그리고 많은 이들의 성능 개선 간증이 이어집니다.

45 New Laravel Tips 2022

https://www.youtube.com/watch?v=YzBGmdnGtbY

Yii

Yii 1.1.25

https://www.yiiframework.com/news/419/yii-1-1-25-is-released

Yii 프레임워크의 첫 번째 버전은 활발히 개발되지 않지만 호환성을 위한 수정은 계속 나오고 있습니다. 이 업데이트는 PHP 8.0에 대한 몇 가지를 수정합니다.

The first stable releases for some Yii 3 components have also been released

기타 읽을 만한 글

Trying out PHP after 7 years

https://www.kode-krunch.com/2021/12/trying-out-php-after-7-years.html

7년 전 Java에만 집중하기 위해 PHP를 떠났던(당시 PHP 사용하던 버전은 5.3) 개발자가 천지개벽한 PHP 생태계를 만나 이제 쓸만 하다고 생각한다는 내용.

자신의 경험을 토대로 Symfony Demo를 다시 만들어 본 경험을 2부작으로 게시하기도 했습니다.
PHP: Symfony Demo meets Modular, Microservice-ready Architecture - Part 1, Part 2

7년 전에 PHP 커뮤니티에 PHP 언어가 오늘날의 모든 기능을 가질 것이라고 말하면 그들은 당신이 미쳤다고 생각할 것입니다.

PHP in 2022

https://stitcher.io/blog/php-in-2022

Brent Roose가 쓰는 PHP 생태계 overview.

매년 “PHP in 20XX” 포스트를 쓰는 것은 이번이 네 번째이며, 올해만큼 흥분한 적이 없었다는 것을 인정해야 합니다.

PHP 8.1

열거형
생성자에서 new 사용
readonly properties

PHP에 추가된 최신 기능을 확인하시려면 PHP 2021 3분 요약 비디오를 보고 오셔도 좋습니다.

Static Analysis

PHP의 정적 분석이 크게 성장하고 있습니다.

PHP에서 정적 분석이 중요한 이유와 이에 대해 열광하는 이유에 대해 간단히 읽고 싶다면 우리는 런타임 유형 검사가 필요하지 않습니다라는 블로그 게시물을 확인할 수 있습니다.

The PHP foundation

2개월 전, PHP 세계는 2021년의 가장 큰 뉴스일 수도 있는 꽤 큰 뉴스를 받았습니다. 가장 활동적인 핵심 유지 관리자 중 한 명인 Nikita가 LLVM 작업을 위해 자리에서 물러나지만 동시에 PHP core 개발을 지원할 수 있게 몇몇 대기업이 지원하는 새로운 이니셔티브도 생겼습니다.

요컨대, PHP core 개발 자금을 지원하는 유일한 목표를 가진 비영리 PHP Foundation이 있습니다. 이 이니셔티브는 이미 프로젝트에 10만 달러를 약속한 JetBrains가 주도합니다. 다른 많은 사람들과 함께 이제 $329,920.75를 모았습니다. 좋은 시작!

  • 이 글을 번역하는 시점에는 $386,384.93 USD, 연간 추정 예산은 $468,509.68 USD입니다.

JetBrains의 블로그 게시물에서 재단의 사명과 목표에 대해 자세히 알아볼 수 있습니다 .

The ecosystem

Packagist는 이제 300만 개 이상의 등록된 버전과 300,000개 이상의 패키지가 있습니다. 보시다시피 생태계는 계속 성장하고 성장하며 2022년에도 다르지 않을 것입니다.

Packagist에 등록된 패키지 현황 그래프

최근에 Packagist는 500억 회 이상의 설치(install)를 처리하는 이정표를 통과했습니다.
축하해요 Packagist!

Async PHP

Async 커뮤니티의 흥미로운 개발 중 하나는 Amp와 ReactPHP의 개발자가 함께 모여 Revolt PHP라는 fiber 호환 이벤트 루프 구현을 만들었다는 것 입니다.

Serverless PHP

Matthieu Napoli는 PHP 개발자에게 이 비교적 새로운 PHP 사용 방법에 대해 교육하는 것을 그의 사명으로 삼고 있으며 꽤 잘하고 있는 것 같습니다. 서버리스 PHP를 쉽게 만들기 위한 그의 오픈 소스 프로젝트인 Bref를 확인 하거나 2022년 서버리스 PHP에 대한 그의 visual course을 확인할 수 있습니다.

Heaps explained in PHP

https://doeken.org/blog/heaps-explained-in-php

PHP에서 heap을 사용하는 방식을 보여줍니다.
🤷 힙은 언제 유용합니까?

  • 가장 높은(또는 가장 낮은) 값에 직접 액세스
  • 많은 삽입 및 제거 작업
  • 배열 정렬
  • 우선 순위 대기열

이를 훌륭하게 구현한 Real world example은 revolt/event-loop package에서 찾을 수 있습니다.

이 글을 읽기 위해 Tree에 대한 약간의 지식은 유용하기 때문에 Trees and Tree Traversal in PHP를 먼저 읽는 것이 좋습니다 .

Implementation of Chain of Responsibility Design Pattern in PHP

https://orangesoft.co/blog/chain-of-responsibility-design-pattern-in-php

PHP에서 Chain of Responsibility 디자인 패턴 구현

             Chain of Responsibility:
+-------------------------------------------+
+-------+ | +---------+ +---------+ +---------+ | +--------+
| Input | -> | | Handler | -> | Handler | -> | Handler | | -> | Output |
+-------+ | +---------+ +---------+ +---------+ | +--------+
+-------------------------------------------+

async & await at the edge with ReactPHP

https://blog.wyrihaximus.net/2021/12/async-and-await-at-the-edge-with-reactphp/

Fiber를 지원하는 PHP 8.1이 출시되었습니다! ReactPHP maintainer 중 한 명이 사용 방법에 대해 씁니다.

PHP Benchmark: include() vs file_get_contents()

https://konstantin.blog/2021/php-benchmark-include-vs-file_get_contents/

Opcache 설정을 조정하면 include()가 file_get_contents()보다 빠를 수 있습니다.

Where does my validation live?

https://blog.frankdejonge.nl/where-does-validation-live/

유효성 검증을 어느 레이어(Controller Layer, Service Layer, Domain Layer)에 넣어야 할지, 각각 어느 점이 좋은지 설명합니다.

  • Controller validation: shapes and types
  • Service validation: from types to concepts concepts
  • Domain Layer: guarding invariants

How to build maintainable PHP applications

https://blog.ecotone.tech/how-to-build-maintainable-php-applications/

유지 관리 가능한 PHP 애플리케이션을 구축하고 프레임워크에서 비즈니스 로직을 분리하는 방법.

Making sense of the 8 log levels in PHP

https://darkghosthunter.medium.com/php-making-sense-of-the-8-log-levels-ddd27c4719a

여덟 레벨을 모두 설명하는데 저자 자신은 4개만 쓴다고 합니다.

  • Debug(디버그): 앱의 내부 작동을 보여주는 모든 것.
  • Error(오류): 발생해서는 안 되는 일이 발생했습니다.
  • Alert(경고): 단기적으로 앱 상태를 위험에 빠뜨리는 모든 것.
  • Emergency(긴급 상황): 응용 프로그램의 모든 부분이 작동을 멈췄습니다.

Overriding vendor classes

https://downing.tech/posts/overriding-vendor-classes

포크를 생성하지 않으려면 composer.json에서 autoloading을 적절하게 구성할 수 있습니다. 또는 옵션으로 cweagans/composer-patches와 함께 패치를 사용할 수도 있습니다.

Accessing private properties in PHP

https://www.lambda-out-loud.com/posts/accessing-private-properties-php/

Closure::bind를 통한 리플렉션 및 액세스 대신 객체를 배열로 캐스팅할 수 있습니다(하지만 그래야 할까요?).

@AllaertPatrick의 트윗

https://twitter.com/AllaertPatrick/status/1478323931924860928

때때로 코드에서 무슨 일이 일어나고 있는지 이해하기 위해 생성된 opcode를 살펴보는 것이 유용할 수 있습니다. phpdbg -p* file.php 명령이 도움이 될 것입니다.

AllaertPatrick에서 공유된 이미지

Community

PHP in 7 minutes

https://www.youtube.com/watch?v=IfcFQxYPTxo

Brent Roose의 영상.

What kind of language is PHP in 2022? Find out in 7 minutes!

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2021년 10월호의 번역/해석본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


PHP 8.1 RC3이 출시 되었습니다. 열거형(enumeration)을 사용하는 첫 패키지도 이미 사용할 수 있습니다.

Magento의 커뮤니티 포크가 발표되었습니다.

PSR 외에도 PER이라는 새로운 유형의 권장 사항이 있습니다.

Symfony 6은 가능한 모든 곳에 타입을 선언합니다. 업데이트 방법은 무엇입니까?

PHP 8.2에서는 최적화된 새로운 데이터 구조와 독립형(standalone) null 타입이 제안되었습니다.

실제로는 취약점이 아니긴 하지만, disable_functions과 관련된 PHP 취약점이 게시되었습니다.

⚡️ News

PHP 8.1 RC 3

세 번째 릴리스 후보가 예정대로 발표되었습니다. PHP 8.1의 새로운 기능에 대한 개요는 What’s new in PHP 8.1 그리고 PHP 8.1: before and after 게시글을 참조하세요. 전체 변경 목록은 PHP.Watch에서 확인할 수 있습니다.

이제 PHP 8.1용 마이그레이션 가이드도 나왔습니다.

Mac에서 homebrew를 통해 php:8.1-rc-cli와 같은 이미지를 docker로 시도해보거나 그냥 3v4l.org를 둘러볼 수도 있습니다.

열거형(enumeration)을 사용하는 첫 패키지도 이미 사용할 수 있습니다.
alexanderpas/php-http-enum는 HTTP 응답 메시지의 상태 코드 및 텍스트가 포함된 열거형입니다.

PHP 8.0.11, 7.4.24 and 7.3.31

https://www.php.net/ChangeLog-8.php#8.0.11
https://www.php.net/ChangeLog-7.php#7.4.24
https://www.php.net/ChangeLog-7.php#7.3.31

보안 취약점 CVE-2021-21706 수정을 지원하는 업데이트.

이 수정 사항은 ZipArchive::extractTo가 Windows에서 특정 파일 경로 이름으로 대상 디렉토리 외부에 zip 아카이브를 추출하게 하는 버그를 해결합니다.

The Future of Magento

https://www.mage-os.community/blog/the-future-of-magento

Magento 커뮤니티 구성원의 이 편지는 커뮤니티 조직에서 운영하는 Magento 포크가 있을 것이라고 발표했습니다. 목표는 Magento의 장기적인 오픈 소스 수명을 보장하는 것입니다.

이전에 Adobe가 Magento를 마이크로서비스로 분해할 계획이라고 발표했습니다. 이것이 정확히 어떻게 일어날지는 불분명합니다. 이것이 포크가 생성되는 이유입니다. 후자가 열려 있는 한 Adobe의 Magento와 호환됩니다.

PhpStorm 2021.3 Early Access Program Is Open

https://blog.jetbrains.com/phpstorm/2021/09/phpstorm-2021-3-early-access-program-is-open/

PhpStorm 2021.3 Early Access 프로그램이 한창 진행 중입니다. 매주 JetBrains에서는 공식 릴리스 전에 새로운 기능을 사용해 볼 수 있는 새로운 빌드를 게시합니다.

다가오는 주요 릴리스에는 PHP 8.1에 대한 완전한 지원, 제네릭에 대한 많은 개선 사항, 배포를 위한 새로운 옵션, 업데이트된 디버거 인터페이스 등이 포함될 것입니다.

PER Workflow – PHP-FIG

https://www.php-fig.org/bylaws/per-workflow/

PHP-FIG는 PHP Evolving Recommendations의 아이디어를 승인했습니다. PSR 표준 외에도 영구적으로 변경 및 보완할 수 있는 권장 사항인 PER이 있습니다.
예를 들어 코드 스타일의 경우 새로운 언어 기능을 반영하는 새로운 규칙을 추가할 수 있습니다.

“Vulnerability” (not) in PHP to bypass disable_functions

한 연구원이 최근 php.ini의 disable_functions 지시문에 의해 설정된 제약 조건을 우회하는 방법을 발표했습니다.

disable_functions를 사용하여 PHP 스크립트에서 특정 기능의 사용을 금지할 수 있습니다. 예를 들어 system, exec, proc_open 및 shell_exec가 외부 프로그램에 대한 호출을 차단하는 것을 금지할 수 있습니다.
(그건 그렇고, eval()은 함수가 아니라 언어 구조이기 때문에 금지할 수 없습니다.)

disable_functions는 보안 기능이 아니며 보안을 위해 그것에 의존하는 것은 나쁜 생각이기 때문에 우회 문제는 취약점이라고 할 수 없습니다.

이게 PHP의 보안 문제가 맞다고 하는 글에 Nikita Popov(aka nikic)가 reddit에 댓글을 남겼습니다.
많은 스크립트 언어들처럼 PHP 구현이 임의의 공격자가 제어하는 코드를 안정적으로 샌드박싱하는 것이 주요 목표는 아니며, 보안 문제인지 여부는 위협 모델(threat model)에 따라 판단할 수 있는데 서버에 올라간 PHP 프로젝트에 관한 한 원격 공격자를 위협 모델로 상정한다고 합니다. 아래 내용에서 정확한 표현으로 확인하세요.

Whether something is a security issue depends on your threat model. As far as the PHP upstream project is concerned, our threat model is a remote attacker. We consider the case where the attacker has ability to execute arbitrary PHP code on the server a lost cause.

Of course, for a shared hosting provider that does not use any OS-level separation between clients, this is a security issue. As far as the PHP project is concerned, this is a fundamentally insecure deployment method. You may use it at your own risk.

This is a matter of practicality, because the PHP implementation is very far removed from reliably sandboxing arbitrary attacker-controlled code. There are some languages that have this as a hard design constraint (the most important being JavaScript), but for other scripting languages this is not a primary goal (definitely not for PHP, and I would strongly suspect not for Python or Ruby either, though I’m not sure on that count).

If we wanted to move in that direction, the first step would be to promote all remaining engine notices/warnings to exceptions, because there is a large class of interrupt vulnerabilities caused by them (to the point that addressing other issues would be somewhat “pointless” from a security perspective). One of my bigger regrets for PHP 8.0 is that we did not make undefined variables an exception.

PHP에서 보안 문제로 간주되는 것과 그렇지 않은 것에 대해 자세히 알아보십시오: wiki.php.net/security.
이 문서에선 다음과 같은 문제가 보안 문제 버그로 분류됩니다.

  • 사용자가 승인되지 않은 작업을 실행할 수 있도록 허용하거나
  • 보안 경계를 넘거나
  • 액세스할 수 없는 데이터에 액세스하거나
  • 시스템의 접근성 또는 성능에 심각한 영향을 미치는 경우

그리고 문제를 더 자세히 이해하는 데 관심이 있다면 disable_functions가 작동하는 방식과 그렇게 악용하는 방식(메모리 손상을 통한 우회)에 대한 멋진 분석이 있습니다. 그리고 다른 하나는 이러한 문제를 자동으로 검색하는 방법을 설명합니다.

또한, 인기 있는 Laravel 프로젝트인 fiveai/Cachet에서 발견된 실제 RCE(Remote Code Execution) 취약점 분석을 확인하십시오: Laravel Configuration Injection을 통한 코드 실행.

composer/composer 2.1.9

https://github.com/composer/composer/releases/tag/2.1.9

이 업데이트는 Windows의 취약점을 수정합니다(CVE-2021-41116). Windows 사용자는 반드시 업데이트해야 합니다.

PHPOpenDocs.com

https://phpopendocs.com/about

PHP 관련 콘텐츠를 위한 커뮤니티 사이트를 만드는 실험입니다.

PHP 버전별로 그룹화된 기여자 목록이 있는 유용한 후원 페이지와 PHP 코드 구조 및 PHP 코어에 기여를 시작하는 방법에 대한 리소스에 대한 많은 링크가 있는 Internals 섹션이 이미 있습니다.

🐘 PHP Internals

New data structures in PHP

PHP는 list, 연관 배열, 큐, 스택 등으로 사용할 수 있는 범용 배열 데이터 구조를 가지고 있습니다.

이 다재다능함은 사실은 해시 테이블을 사용하여 달성됩니다. 그러나 이 다재다능함은 추가 메모리 사용량과 미묘한 성능 오버헤드를 대가로 합니다.

SPL(Standard PHP Library)은 보다 전문화된 데이터 구조를 가지고 있지만 그 자체로 무거운 감이 있습니다.

Tyson Andre는 PHP에 최적화된 새로운 데이터 구조를 추가할 것을 제안합니다.

이를 달성하기 위한 한 가지 옵션은 널리 사용되는 php-ds/ext-ds 확장에서 구조를 추가하는 것이지만 작성자는 이 아이디어를 지지하지는 않습니다. GitHub의 이 스레드는 토론의 세부 사항에 대한 정보를 제공합니다.

현재로서는 두 개의 RFC가 있습니다. 이러한 구조 및 기타 구조의 구현은 TysonAndre/pecl-teds 확장에서 사용할 수 있습니다.

[RFC] final class Vector

https://wiki.php.net/rfc/vector

벡터 구조 – 연속된 인덱스 0, 1, 2 등의 요소 집합입니다. 현재 배열보다 절반의 메모리가 필요하고 유사한 SPL 구조보다 빠르게 작동합니다.

API의 관점에서 보면, 이것은 ArrayAccess, IteratorAggregate 및 Countable 인터페이스를 가진 클래스입니다. RFC에는 아래와 같은 식의 final class를 추가하자는 내용이 나옵니다.

final class Vector implements IteratorAggregate, Countable, JsonSerializable, ArrayAccess
{
...

ArrayAccess처럼 사용할 수도 있죠.

$values = new Vector();
for ($i = 0; $i < $n; $i++) {
$values[] = $i;
}

[RFC] final class Deque

https://wiki.php.net/rfc/deque

Deque는 양방향 큐(doubly-linked queue)입니다. 즉, 시작과 끝에서 요소를 추가 및 제거할 수 있습니다. SplQueueue 또는 SplDoublyLinkedList 대신 사용하면 성능 및 메모리 소비가 즉시 개선되는 것을 볼 수 있습니다.

Deque는 메모리 관리에 대한 알려진 문제로 인해 대형 어레이를 사용하는 장기 실행 애플리케이션에 사용하기에도 적절합니다.

[RFC] Allow null as standalone type

https://wiki.php.net/rfc/null-standalone-type

George Peter Banyard는 타입 선언에서 null을 사용하는 기능을 추가할 것을 제안합니다.

첫째, 이것은 PHP의 타입 시스템의 완전성에 대한 누락된 부분입니다. mixed 타입과 never 타입이 추가됐고, union과 intersection이 있지만 unit 타입은 누락되었습니다.

둘째, 이 타입은 타입 힌트에 대한 일부 엣지 케이스를 다루고 정적 분석을 개선합니다.
예를 들어 현재로서는 유사타입(pseudotype)인 false를 union에서 사용할 수 있지만 함수가 false|null을 반환하도록 지정할 수는 없으며 bool|null만 반환할 수 있습니다.

How opcache works

https://www.npopov.com/2021/10/13/How-opcache-works.html

Nikita Popov는 항상 블로그 게시물을 작성하지는 않지만, 블로그 게시물을 작성할 때는 개념을 명확하고 자세하게 설명합니다.

🛠 Tools

Xdebug 3.1.0

https://xdebug.org/announcements/2021-10-04

인기 있는 PHP 디버거가 업데이트되었습니다. PHP 8.1, 많은 수정 사항 및 약간의 사소한 기능에 대한 지원이 함께 제공됩니다. 이 확장 프로그램 개발자인 Derick Rethans의 Xdebug 3에 대한 이 비디오 시리즈를 놓치지 마십시오.

spiral/roadrunner 2.4

https://github.com/spiral/roadrunner

Golang으로 작성된 PHP 애플리케이션 서버의 대규모 업데이트입니다. 이 릴리스에는 대기열(queue), 키-값 저장소 및 Temporal(분산형 오케스트레이션 도구)과의 통합에 대한 지원이 포함됩니다. 더 자세히 보려면 여기로.

brick/date-time

https://github.com/brick/date-time

날짜 및 시간 작업을 위한 immutable 클래스 집합입니다.

php-runtime/runtime

https://github.com/php-runtime/runtime

Runtime 컴포넌트는 애플리케이션 부트스트랩 로직을 전역 상태와 분리하므로 PHP-FPM, ReactPHP, Swoole 등과 같은 환경에서 아무 변경 없이도 애플리케이션을 실행할 수 있습니다.

원래 Symfony의 구성 요소였으나, 이제는 GitHub에서 별도의 조직(organization)이 될 정도로 훌륭하다고 여겨집니다.

rindow/rindow-neuralnetworks

https://github.com/rindow/rindow-neuralnetworks

Python Keras를 기반으로 하는 신경망 교육 프레임워크입니다. 해당 문서에 따르면 GPU 지원은 실험 모드 및 Windows에서만 사용할 수 있습니다.

piko-framework/router

https://github.com/piko-framework/router

또 다른 PHP 라우터인 이 라우터는 기수 트리(radix tree)를 기반으로 하며 벤치마크에 따르면 Symfony 라우터보다 빠릅니다.

nunomaduro/termwind

https://github.com/nunomaduro/termwind

Tailwind CSS 스타일 구문으로 콘솔 프로그램의 출력 형식을 지정하기 위한 PHP 8+ 패키지입니다.

icanhazstring/random-issue-picker

https://github.com/icanhazstring/random-issue-picker

Hacktoberfest에 참여하고 싶지만 어디서부터 시작해야 할지 모르겠다면 GitHub 또는 GitLab에서 무작위 문제를 선택하는 도구가 있습니다.

Symfony

Preparing your applications and bundles for Symfony 6

https://symfony.com/blog/preparing-your-apps-and-bundles-for-symfony-6

Symfony 5.4 및 6.0은 11월에 출시될 예정입니다. 차이점은 Symfony 5.4에는 더 이상 사용되지 않는 기능이 모두 포함되지만 Symfony 6.0에서는 모두 제거된다는 것입니다. 또한 Symfony 5.4 및 6.0 모두 가능한 경우 모든 메서드 속성, 인수 및 반환 값에 PHP 유형 선언이 추가됩니다.

Symfony 구성 요소를 사용하는 앱을 업데이트하는 방법을 알아보려면 Symfony Core 팀 구성원이 작성한 이 자세한 게시물을 확인하세요. Symfony 6: PHP 8 Native Types & Why We Need YOU.

you will no longer need flex.symfony.com

https://symfony.com/blog/symfony-flex-is-going-serverless

Symfony Flex의 경우 더 이상 flex.symfony.com이 필요하지 않습니다. 모든 레시피는 이제 github.com/symfony/recipes에 있습니다.

A week of Symfony #771 (4-10 October 2021)

https://symfony.com/blog/a-week-of-symfony-771-4-10-october-2021

Laravel

Working with fixture data in your tests.

https://dyrynda.com.au/blog/working-with-test-fixtures

정적 테스트 fixture를 다루는 방법을 이야기 합니다.

Strategies for decreasing the number of queries in a Laravel app.

https://freek.dev/2075-strategies-for-decreasing-the-number-of-queries-in-a-laravel-app

Laravel 앱에서 쿼리 수를 줄이기 위한 전략을 소개합니다.

📺 Laravel Worldwide Meetup #10:

A Little Bit of AWS Lambda, and Pest to Perfection.

📺 Converting a PHPUnit testsuite to Pest

https://www.youtube.com/watch?v=81-r9THrJhI

📺 Let’s Build an Online Store – A nice series of streams.

https://www.youtube.com/watch?v=-0C04evVV9A&list=PLKJBt7aeK3k8Ry6aNd4wUOvfXtlnQh5-O&index=1&t=5s

💡 기타 읽을 만한 글

The Road to PHP: Static Analysis

https://road-to-php.com/static

정적 분석에 대한 Brent Roose의 10일 뉴스레터입니다.

Testing tips from Matthias Noback:

One Class, One Test?

https://matthiasnoback.nl/2021/09/quick-testing-tips-one-test-per-class/

테스트가 없던 시절로 돌아가는 건 싫고, 실행하기 쉬운 규칙을 만들어 생각없이 테스트를 추가하는 게 정말 도움이 되겠느냐는 글.

Testing Anything; Better Than Testing Nothing?

https://matthiasnoback.nl/2021/09/testing-anything-better-than-testing-nothing/

없는 것보다는 나으니 아무거나 테스트하려는 사람들을 말리며, 테스트를 작성하지 말고 좋은 테스트를 작성하라고 합니다. 그렇게 하는 동안 테스트 작성이 재미있고 쉽고 효과적인지 확인하라고 하네요. 켄트백은 “테스트는 두려움을 지루함으로 변화시켜주는 프로그래머의 돌이다.”라고 했는데 말이죠…

어쨌든 이를 위해 다음에 투자해야 한다고 합니다.

  • 특정 테스트를 매우 빠르게 실행하는 데 도움이 되는 테스트 도구
  • 빠른 결과를 제공하는 테스트
  • 다른 데이터가 제공될 때 코드가 어떻게 동작하는지 보여주기 위해 더 많은 테스트 케이스를 추가하는 것은 정말 저렴해야 합니다.

이런 게 “클래스 하나에 테스트 하나” 규칙이나 request 날리고 DB 확인하는 테스트(make-request-then-look-in-DB)보다는 나을 거라고 합니다.

Write Unit Tests Like Scenarios

https://matthiasnoback.nl/2021/09/write-unit-tests-like-scenarios/

읽기 좋은 테스트를 위해 시나리오를 작성하듯 코드를 작성하라는 조언입니다.
예시로 저자는 Give/When/Then 스타일로 작성합니다. naming 규칙에도 신경써야 하며 더 높은 추상화 수준에서 “왜”에 집중하며(해당 동작의 이유) 테스트를 작성하길 원합니다.

What happens when we clone objects?

https://doeken.org/blog/what-happens-when-we-clone

clone을 사용하면 어떤 일이 벌어질까?

Either data structure.

https://marcosh.github.io/post/2021/09/24/either-why-or-how.html

Either 단일 데이터 유형/클래스에서 무언가가 두 가지 중 하나일 수 있다는 사실을 설명할 수 있는 데이터 구조입니다.
이를 구현하는 예제를 Haskell과 PHP로 구현합니다.

creating an Option type in PHP

https://ryangjchandler.co.uk/posts/creating-an-option-type-in-php

PHP에 Option 추가하기.

null이나 nil 개념이 없는 Rust의 Option에서 아이디어를 얻어 Option type을 만드는 과정을 보여줍니다. PHP 8.0 이상.

Generic 지원은 PHPStan의 지원을 받습니다.

현재 PHP의 enum으로는 구현이 완벽하진 않고, RFC: Tagged Unions가 도입된다면 좀 더 Rust의 Option에 가까운 구현을 할 수 있다고 합니다…만, PHP 8.1을 목표로 한 RFC는 이 글을 번역하는 시점에 Draft 상태로 남아있습니다.

The €13.000 Video Course Launch That Made Me Believe In Myself Again

https://christoph-rumpel.com/2021/9/the-video-course-launch-that-made-me-belive-in-myself-again

Christoph Rumpel이 어떻게 masteringphpstorm.com 코스를 시작했는지에 대한 몇 가지 세부 정보를 공유합니다.

Generative art with PHP

https://www.binarymoon.co.uk/2021/09/creating-generative-art-with-php/

Ben Gillbanks는 코드를 사용하여 간단한 아바타에서 픽셀 아트 도시에 이르기까지 이미지를 만드는 방법을 설명합니다.

픽셀 아트 도시 이미지

A game on FFI: quasilyte/kphp-game

https://github.com/quasilyte/kphp-game

KPHP는 PHP 컴파일러입니다. PHP의 제한된 하위 집합을 PHP보다 빠르게 실행되는 기본 바이너리로 컴파일합니다.

KPHP 팀의 사람들은 FFI에 대한 실험적 지원을 구현하고 데모로 FFI를 사용하여 작은 게임을 만들었습니다.

놀랍게도 KPHP-FFI는 기존 PHP의 FFI와 호환되므로 일반 PHP 7.4 이상에서도 게임을 실행할 수 있습니다.

PHP의 FFI에 대한 완전한 가이드(Complete guide to FFI in PHP)에서 다른 FFI 응용 프로그램에 대해 자세히 읽어보십시오.

0%