# WASM으로 엣지에서 PHP 엄청 빠르게 실행하기

> Clean Markdown view of GeekNews topic #15025. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15025](https://news.hada.io/topic?id=15025)
- GeekNews Markdown: [https://news.hada.io/topic/15025.md](https://news.hada.io/topic/15025.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-05-27T10:03:02+09:00
- Updated: 2024-05-27T10:03:02+09:00
- Original source: [wasmer.io](https://wasmer.io/posts/running-php-blazingly-fast-at-the-edge-with-wasm)
- Points: 9
- Comments: 2

## Topic Body

- 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 시장에 흥미진진한 시기가 다가오고 있음

## Comments



### Comment 25672

- Author: tsboard
- Created: 2024-05-28T16:23:03+09:00
- Points: 2

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

### Comment 25696

- Author: xguru
- Created: 2024-05-29T10:10:58+09:00
- Points: 2
- Parent comment: 25672
- Depth: 1

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