분류 php

레거시 코드가 아니라 PHP입니다.

컨텐츠 정보

  • 조회 361 (작성일 )

본문

작년에 Vimeo 개발자는 PHP, Go, Ruby, Python, NodeJS, Java, C, C ++ 및 약간의 Rust 등 다양한 언어로 백엔드 코드를 작성했습니다.


2004 년에는 PHP로 시작했습니다. Vimeo와 같은 신생 스타트업에 이상적인 언어였습니다. PHP의 인터프리터는 기업가가 프로토 타입을 신속하게 개발할 수 있게 했으며 이메일 전송 및 데이터베이스 액세스와 같은 일반적인 작업의 번거로움을 없애주는 대규모 표준 라이브러리와 함께 제공되었습니다.


대부분의 스타트업은 실패하지만 일부 PHP 기반 스타트업은 여전히 ​​약 10 년이 지났습니다. 일부는 급격한 성장을 이루었고 그중 일부 (특히 Facebook)는 PHP가 병목 현상이라고 판단하여 PHP에서 마이그레이션을 시작했습니다. 그 미니 엑소더스에는 두 가지 큰 이유가 있었습니다. PHP의 성능과 대규모 PHP 코드베이스를 유지하는 문제입니다.


2014 년의 성능면에서 PHP는 필요했던 것보다 느렸고 어레이는 필요 이상으로 많은 메모리를 사용했습니다. 대규모 PHP 코드베이스를 유지하는 것도 대규모 버그를 감지 할 수 있는 좋은 정적 분석 도구가 부족하기 때문에 더 어려워졌습니다.


Vimeo는 2004 년 이후 10 년 동안 PHP 코드베이스와 함께 여러 번 성장했지만 이러한 문제가 실제로 우리를 방해 할만큼 충분히 성장하지 않았습니다. 하지만 페이스 북이 공개적으로 PHP를 포기했을 때 일부 개발자들은 PHP가 인터넷 시대의 포트란이 되는 길에 있다고 생각했습니다. 백엔드 엔지니어의 새로운 물결은 500,000 줄의 PHP를 더 잘 엔지니어링 되고 더 빠르고 테스트 가능한 Go 서비스 묶음으로 분할하는 방법을 계획했습니다.


한동안 임박한 느낌이 들었지만 우리는 PHP를 포기하지 않았습니다. 몇 가지 분명한 이유가 있습니다. 전체 코드베이스를 다시 작성하는 것은 리소스 집약적이고 오류가 발생하기 쉽습니다. 그러나 약간 덜 분명한 이유도 있습니다. PHP가 더 좋아졌습니다.


"PHP가 더 나아졌습니다"라고 말하는 것은 실제로 그 변화를 정당화하지 않습니다. 지난 6 년 동안 PHP의 실행 시간이 절반 이상 줄어들었고 커뮤니티는 엄청나게 성장했으며 이제 정적 분석에서 수집한 통찰력을 통해 PHP 코드베이스 (이전 및 신규)를 개선하려는 인기 있는 추진력이 있습니다.


PHP의 개선 사항이 Vimeo에 도착하는 데 시간이 걸렸습니다. 먼저 만료 날짜가 지난 수년 동안 프로덕션 환경에서 실행해온 PHP의 이전 버전 (5.4)을 제거해야 했습니다. PHP 7로 이전하면 백엔드 응답이 훨씬 빨라졌으며 PHP 7의 향상된 구문 덕분에 개발자는 반환 및 매개 변수 유형에 대한 전체 언어 수준 지원을 통해 약간 더 깔끔한 코드를 작성할 수 있었습니다.


PHP는 혁신을 멈추지 않았습니다. 2 주 전에 출시 된 버전 8은 개발자가 비즈니스 로직을 보다 간결하게 표현할 수 있도록 많은 언어 수준의 개선 사항을 제공합니다. 내년 초에 업그레이드를 기대하고 있습니다.


정적 분석은 굉장합니다 


PHP를 사용하면 시작하기가 매우 쉽지만 기본적으로 발에 총을 쏘는 것에 대해 많은 보호 기능을 제공하지 않습니다. 수년에 걸쳐 수많은 개발자들이 짧은 기간 동안 PHP를 시도하고 실수로 발을 쏘다가 언어를 포기했습니다.


나는 가끔 PHP로 발을 들여 놓기도 했지만, 포기하는 대신 목표를 향상 시킬 수 있는 도구를 만들기로 결정했습니다. 따라서 PHP 용 정적 분석 유형 검사기인 Psalm이 탄생했습니다.


Psalm의 핵심 기능은 TypeScript의 검사기와 대체로 유사하며 Hack이라는 Facebook (PHP 파생) 언어에서 몇 가지 아이디어를 차용합니다. Psalm은 PHP 코드가 프로덕션에서 유형 오류를 유발할 수 있는 경우와 논리가 의미가 없는 경우를 알려줍니다. 사용하지 않는 클래스 및 메서드 감지와 같은 몇 가지 추가 기능을 추가하고 Psalm은 자동으로 찾은 많은 문제를 수정할 수 있습니다.


지난 몇 년 동안 CI 파이프 라인의 일부로 Psalm을 사용하여 Vimeo에서 PHP를 작성하는 방법에 변화를 가져 왔습니다. Psalm은 모든 것을 완전히 망칠 염려 없이 대규모 변경을 수행 할 수 있는 자신감을 얻었습니다.


코드베이스에 최신 PHP 코딩 표준을 도입한 이러한 변경 사항은 레거시 냄새를 제거하는 데 도움이 되었습니다. 코드를 변경해도 안전하다고 느끼면 더 이상 레거시 코드가 아닙니다.


저는 제 문제를 해결하기 위해 시편을 만들었지만 지금은 오픈 소스화하여 다른 많은 사람들의 문제도 해결하는 데 도움이 되었습니다. Psalm은 또한 최근에 악의적 인 사람들이 악용하기 전에 코드베이스에서 수많은 보안 취약점을 식별하는 데 도움이 되었습니다.


간단히 말해서,이 글을 읽는 사람이 큰 변경을 두려워하는 대규모 레거시 PHP 프로젝트로 작업하는 경우 정적 분석 유형 검사 도구를 사용하기 시작하는 것이 좋습니다. Psalm (및 유사한 도구)은 코드베이스 내의 기존 문제를 더할 수 있으므로 코드 품질을 천천히 향상 시킬 수 있습니다.


기존 코드가 반드시 레거시 코드는 아닙니다. 


2000 년대 중반에는 잘 정립 된 PHP ORM이 없었기 때문에 자체적으로 구축했습니다. 다행히 PHP는 MySQL 지원, 쿼리 매개 변수 바인딩, 매직 게터 및 세터를 포함하여 간단한 ActiveRecord 스타일 ORM을 만들기 위한 많은 빌딩 블록을 제공합니다. 또한 작업을 수행 할 수 있는 정말 똑똑한 엔지니어가 있는 데도 도움이 되었습니다.


ORM의 마지막 주요 업그레이드는 10 년 전이었습니다. 버그 수정, 더 나은 유형 및 몇 가지 새로운 기능과 같은 사소한 개선이 있었지만 기본 구조는 변경되지 않았습니다.


수년 동안 다른 ORM을 사용하려는 시도가 몇 번 있었지만 새로운 비즈니스 요구 사항에 대한 제안이 없었으며 대신 ActiveRecord 패턴에 대한 불만이 동기가 되었습니다.


결국 어떤 제안도 성사되지 않았습니다. 이전 코드가 다음과 같은 경우 새 코드보다 이전 코드가 더 바람직 할 수 있습니다.


  • 그 일을 효과적으로 수행
  • 정적으로 분석하기 쉽습니다.
  • 잘 테스트 됨
  • 관용적임

고맙게도 기존 ORM은 네 가지 요구 사항을 모두 충족합니다.


신뢰할 수 있는 오래된 코드를 유지하면 비즈니스에 실질적인 이점을 가져다주는 것에 엔지니어링 노력을 집중할 수 있는 기회가 주어지며, Vimeo가 최근에 엄청난 양의 성과를 거두었다고 말할 수 있는 계약상의 의무가 있습니다. Vimeo Record와 같은 멋진 신제품을 소개합니다.


"PHP가 끔찍할 필요는 없습니다." 


많은 개발자들이 10 년 전에 약간의 PHP를 작성했으며 이후 더 존경 받는 언어로 옮겨갔습니다. 그들은 종종 다른 사람들에게 PHP를 더 이상 작성하지 않아서 얼마나 안도하며 어떻게 사용할 수 없는지 다른 사람들에게 이야기하고 싶어합니다.


저는 이것이 가능하다고 말씀 드리려고 여기에 왔으며, Vimeo가 PHP를 통해 지속적으로 성공을 거둔 것은 2020 년에 빠르게 변화하는 기업을 위한 훌륭한 도구라는 증거입니다.


PHP의 르네상스는 적어도 한 명의 전직 반대자들을 변화 시켰습니다. 어느 날 동료이자 오랜 비평가가 저를 옆으로 데려가 "PHP로 작업하는 것이 끔찍할 필요는 없다"는 것을 보여준 것에 대해 매우 진지하게 감사했습니다.



https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580



PHP