본문 바로가기

개발

손쉽게 PHP 네이티브 확장 개발하기 (Zephir)

들어가며

PHP 네이티브 확장 개발해보신 분들은 알 것이다.

마이너 버전 (예: 7.3->7.4 올라갈 때마다 BC Break가 나타나는 것은 물론이요, Zend API (PHP 네이티브 확장 개발시 사용하는 API) 가 어떻게 변경됐는지 제대로 알려주지도 않는다.

(당장 최신 버전 Zend API에 대한 문서도 없다. 찾아봐도 PHP 5.3 시절 문서가 끝, 마이너 버전 업데이트할 때마다 커밋 찾아가며 수정해야한다)

진짜 더럽게 만들기 힘들고, 관리도 매우 귀찮다.

본론

손쉽게 PHP 네이티브 확장을 개발하게 해주는 언어가 있다.
Zephir라는 언어인데, 문법도 PHP와 유사하고,

무엇보다 호환성이 뛰어나다. PHP 버전 올라갈 때마다 커밋 뒤져가며 확장을 다시 개발할 필요가 없는 것이다.

심지어 PHP 코드 내부에서 선언한 함수를 PHP에서 호출하듯 가져다 쓸 수 있다. (물론 이것은 PHP 유저랜드를 거쳐 호출하게 해주는 기능이기 때문에 코드가 심각하게 느려진다)

장점

  • 문법이 PHP와 유사하다.

PHP 코드를 작성하듯 매끄럽게 네이티브 확장도 작성할 수 있다.

  • 빠르다

C언어로 트랜스파일링되기 때문에 상식적으로 짠 코드는 PHP에서 실행하는 것보다 훨씬 빠르게 동작한다.

  • 호환성이 뛰어나다

위에 서술했듯, PHP 버전 올라갈때마다 커밋 뒤져가며 확장 수정할 필요가 없다. 그냥 Zephir 컴파일러로 다시 컴파일하기만 하면 된다.

  • 메모리 Safe 언어다

C언어로 확장 작성시 발생할 수 있는 메모리 관련 문제가 없다.

  • C언어나 PHP와의 연동이 쉽다.

C / PHP 코드를 손쉽게 호출할 수 있고, 그 역도 가능하다.

단점

  • 커뮤니티가 작다.

제일 큰 단점이다. 유저 수가 적어서 코드 작성 중에 문제가 발생해도 자료를 찾기 힘들다.
그나마 다행인건 공식 디스코드가 있어서, 여기에다 질문하면 빠르게 답변을 받을 수 있다.

  • 미래가 밝지 않은 편이다.

당장 PHP 8에 JIT이 나왔기 때문에, 성능상 이점이 많이 사라졌다.

  • 언어에서 지원하는 기능이 적다.

reference나 제네레이터를 지원하지 않는다. 이 기능들이 필요하면
C언어로 함수를 직접 작성하여 Zephir 코드와 연결시켜야한다.

  • 문법이 좀 이상하다.

비트 연산자를 사용할 때 심한 스트레스를 받을 수 있다.

Zephir를 사용하는 대표적인 프로젝트

  • Phalcon 프레임워크