9P by xguru 28일전 | favorite | 댓글 2개
  • PHP는 현재 인터넷 상의 웹사이트 중 약 75%를 차지하고 있음
  • PHP는 프로그래밍 언어 중 "섹시 보이"는 아니지만, 인터넷 탄생 이후 중요한 역할을 해왔음
  • 이제 PHP를 Wasmer와 Wasmer Edge에서 완전히 실행할 수 있게 됨 (오픈 베타)

WebAssembly에서 PHP 실행의 중요성

  • WebAssembly의 특성 덕분에 프로그램이 접근할 수 있는 리소스를 안전하게 제한할 수 있음
  • OS나 하드웨어 가상화의 오버헤드 없이 PHP를 안전하게 실행할 수 있음
  • Wasmer 팀은 PHP가 WebAssembly에서 완벽하고 가능한 한 빠르게 실행되도록 수많은 시간을 투자했음
  • WebAssembly 내에서 opcode 캐싱을 활성화하여 최대 3배 더 빠른 속도를 얻었음

PHP 앱에 serverless-like 확장성 제공

  • 모든 PHP 앱에 serverless-like 확장성을 제공하면 엄청난 가치를 열어줄 수 있음
  • PHP 앱을 Edge에서 실행하고 클라우드 제공업체가 부과하는 가격의 일부만 지불할 수 있음
  • Wasmer로 모든 PHP 애플리케이션을 실행할 수 있으며, 앱이 샌드박싱을 깨고 해서는 안 되는 유해한 일을 할 걱정은 할 필요가 없음

가장 인기 있는 PHP 프레임워크를 Wasmer와 Wasmer Edge에서 실행 가능

  • WordPress
  • Symfony
  • Laravel
  • 모든 PHP 템플릿: https://wasmer.io/templates?language=php
  • 참고: 사용자 정의 파일 시스템 볼륨에 대한 Wasmer Edge 지원은 진행 중임. SQLite를 사용하는 배포된 앱(WordPress나 Symfony 등)은 현재 데이터베이스 변경 사항을 메모리에만 저장하고 아직 영구적으로 저장하지는 않음

WebAssembly와 PHP에서 최대한 활용

  • opcode 캐싱을 활성화하여 WordPress를 수정 없이 3배 더 빠른 속도로 실행할 수 있음 (600ms에서 200ms로 단축)

직접 시도해 보기

  • 일반적으로 php -S localhost:8000 .을 실행한다면, 이제 Wasmer를 통해 완전히 샌드박스로 실행할 수 있음:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPress도 쉽게 로컬에서 실행 가능. WordPress 저장소 클론 후 루트에서 wasmer run . --net 실행 (Wasmer 4.3.1 필요)
  • 완전히 샌드박스화된 상태로 서버에서 실행되는 완전 기능을 갖춘 PHP CLI가 제공됨
  • 앱이 /etc/passwd 같은 것에 접근하는 것에 대해 더 이상 걱정할 필요 없음

기술적 위업

  • Wasmer에서 WebAssembly로 PHP가 완벽하게 작동하도록 하는 것은 쉬운 일이 아니었음
  • 프로세스를 따라가며 많은 문제를 해결함:
    • PHP 내에서 try/catch 문을 사용하는 데 필요한 longjmp/setjmp 구현에서 stack이 덮어 쓰여지고 제대로 복원되지 않는 모호한 버그 발견
    • 나가는 HTTP 호출 속도를 10배 느리게 만드는 버그 발견 및 수정
    • 기본적으로 PHP opcache를 활성화하여 최대 3배 더 빠른 PHP 시간 확보
    • 파일 시스템 가상화 계층 및 네트워킹(IPv6)에 대한 많은 작은 수정 사항
  • 이전 WordPress를 Wasmer로 실행하는 블로그 게시물을 따라갔다면, WordPress에서 동작을 변경하고 차단 edge case를 트리거하지 않기 위해 수많은 코드 수정(일명 해킹)을 해야 했음을 알 수 있음
  • 최신 Wasmer 릴리스에서는 WordPress, Laravel, Symfony가 어떠한 코드 수정 없이도 Wasmer에서 실행됨

속도

  • 기본 속도로 PHP를 실행하는 것만으로는 충분하지 않았고, WebAssembly에서 가능한 한 빠르게 실행하기를 원했음
  • PHP에는 실행 속도를 훨씬 더 빠르게 해주는 Zend Opcache 모듈이 있음
  • Opcode 캐싱 모듈은 PHP 소스가 변환되는 바이트코드를 최적화하고 캐싱하여 이미 처리된 파일의 AST 구문 분석에 시간을 절약함
  • Opcode 캐싱은 앱이 처리할 수 있는 요청 수를 3배까지 가속화할 수 있으므로 WebAssembly에서 활성화하는 것이 명백해 보였음
  • 그러나 opcode 캐싱(및 Zend 모듈 로딩)은 기본적으로 비활성화되어 있었음 (Wasm에서 사용할 수 없는 dlopen, dlsym 등이 필요하기 때문)
  • 독특한 퀘스트에 착수함: PHP에서 opcode 캐싱 활성화
    • 연구 끝에 정적으로 연결하는 새로운 방법을 찾았고, 과정에서 수많은 것들을 수정해야 했지만 결국 실행에 성공함
  • Wasm에서 Opcache가 없는 WordPress 타이밍: ~620ms
  • Wasm에서 Opcache를 활성화한 WordPress 타이밍: ~205ms
  • Opcache를 활성화하는 것만으로도 3배의 속도 향상이 있음!
  • PHP를 네이티브 속도에 가깝게 만들기 위한 더 많은 개선점이 있음을 깨달음 (기대해 주세요!)

더 많은 기회 열림

  • WordPress playground와 같이 현재 Emscripten에 의존하여 브라우저에서 PHP를 실행하는 프로젝트에 더 많은 기회를 열어줌
    • 이런 프로젝트들이 브라우저와 Edge 모두에서 실행할 수 있는 패키지로 만들어 질수 있음
  • cold-start에 대한 완전히 혁신적인 접근 방식을 준비 중 (Cloudflare & Fly.io 우리가 당신들 지켜보고 있어요!)
  • Edge 시장에 흥미진진한 시기가 다가오고 있음

개인적으로 PHP가 아직도 왕성하게 활용되고 있는게 뭔가 대단하기도 하고 신기합니다. ㅎㅎ 악명 높았던 시절을 지나서 이제 많이 바뀌었다고 하는데, PHP 다시 한 번 써볼까 싶은 생각도 듭니다.

해커뉴스도 긱뉴스도 PHP라면 싫어하는 분들이 많지만 ㅎㅎ
웹 이라는 기술이 다른 것으로 아예 바뀌지 않는한 계속 이용되지 않을까 싶어요.
"언어" 라는 것에 초점을 맞추지 말고 "웹"에 어울리는 기술의 하나로 봐야 하는게 아닌가 생각합니다.