* 이 글은 2020년 9월에 작성되었습니다.
일단, 내 얘기를 잠깐 하고자 한다. 난 본래 C 로 개발을 시작했다가, C++, PHP, Javascript, Java, Python 순으로 프로그래밍 언어를 접했다. 그중에서도 PHP, Javascript 는 지금도 잘 쓰고 있는 언어인데, PHP 는 강의도 두 편 낼 정도로 많은 사랑을 쏟아붓고 있는 편이었다.(예상대로 성적은 그닥) 내가 PHP 를 처음 접한 건 2016년쯤이다. 사실 그때도 PHP 의 위치는 그다지 좋지 않았지만, 애초에 개발에 대한 지식 자체가 부족했기에 별 의구심은 갖지 않았었다.
웹 개발을 본격적으로 시작한 것 또한 2016년부터다. 그때 처음으로 HTML/CSS 를 익혔다. 처음 익힌 서버 사이드 언어가 PHP 였다. 시간이 지나면서 개발에 대한 지식도 쌓이고 여러 가지 기술을 접했다. 그러면서 점차 갈수록 PHP 가 가진 어두운 기운과 미래에 대해 조금씩 생각해보게 되었다. 나는 PHP 를 정말 좋아하지만, 이제 곧 떠날 수밖에 없는 이유를 적어보고자 한다. 참고로 내 다음 언어는 Golang 이 될 예정이다.
분명 이 글을 쓰면 내 강의가 팔리지 않아 수입에 문제가 생기겠지만, 적어도 PHP 를 배우고자 하는 사람이라면 이 정도 사실은 알았으면 좋겠다.
PHP 는 난잡한 언어?
이 문제는 PHP 가 가진 언어의 본질부터 나오는 단점이다. PHP 는 아주 높은 자유도를 가지고 있다. 아래에서 언급하는 그래프에서 2002년 인터넷의 보급기 시절(벌써 몇년 전이야)을 보라. PHP 가 처음 나왔을 때는 아마 지금의 파이썬보다도 더 높은 위치를 차지하고 있었을 것이다. C언어로 웹서버를 짜던 시절이나 JSP 보다도 더욱 유연하게 프로그래밍을 할 수 있었기 때문이다. 그러나, 이는 곧 많은 사람들이 PHP 를 기피하는 이유가 되었다. 아직까지도 시장에 나와있는 PHP 프로젝트들은 레거시 코드들이 정말 많다. 대표적인 레거시 조합은 PHP 4.x, 5.x + JQuery + Bootstrap 조합이다.
레거시 코드라는건 마크업과 서버 사이드가 유지 보수하기 어려울 정도로 난잡하게 구성되어 있으며 MVC 와 같은 패턴이 등장하기 이전이었으므로 어플리케이션의 아키텍쳐가 명확하지 않고 프로젝트마다 서로 다른 어플리케이션 디렉토리 구조를 가지고 있었기 때문에 관리가 어려웠다는 이야기다. 따라서 코드는 스파게티 그 자체였다.
아래의 레포지토리는 내가 강의용으로 짠 코드이다. 전형적인 레거시 코드가 짜여있다.
https://github.com/php-courses-inflearn/php7/tree/main/ch4
GitHub - php-courses-inflearn/php7: [인프런] <PHP 7+ 프로그래밍> 강의 예제코드
[인프런] <PHP 7+ 프로그래밍> 강의 예제코드. Contribute to php-courses-inflearn/php7 development by creating an account on GitHub.
github.com
SSR(Server-Side Rendering)을 한다면 서버 사이드와 마크업이 조금은 섞여있을 수 밖에 없을 것이다. 그렇다곤 해도 과거의 PHP 프로젝트들은 PHP, HTML, Javascript 가 섞여있는 너무나도 많은 레거시 구조를 가지고 있다. 이것이 많은 사람들이 PHP 를 싫어하고, 난잡하며, 유지보수하기 어렵다고 생각한 이유다. 과거에는 JSP 보다 PHP 가 훨씬 시장에서 우위를 가지고 있었고, 그 당시 많은 개발자들이 PHP 를 접하며 나쁜 이미지를 굳혀가고 있었다.
이미지 희석을 위해 노력"은" 하고 있다
PHP 5.6 에서 오랜 세월이 지나 PHP 7 이 나오고, 얼마 전 PHP 8 Beta 버전도 출시되었다. 시간이 지나면서 언어가 가지고 있는 문법 및 일관성이 결여된 부분(예를 들면 내장함수에 스네이크 케이스와 카멜케이스 혼용)이나 많은 사람들이 밈으로 사용하는 잘못된 연산(자바스크립트에서도 자주 찾아볼 수 있는)에 대해서 수정도 이루어지고 있다.
PHP 팀에서도 PHP 를 살리기 위해 노력하고 있는 것이다. 그러나 사람들에게 각인되어진 이미지는 쉽게 변하지 않는다. 난잡한 코드 체계를 바로 잡고 생태계를 확장시키기 위해 Composer 와 같은 의존성 관리자가 나타나고, PSR(PHP Standard Recommendation)과 같은 권장안이 나타났지만, 여전히 안 지켜지는 경우가 허다하다.
더군다나 신규 개발자의 유입이 적은 PHP 시장에서 새로운 규칙과 도구가 쓰일 것이라고 기대하는 것은 오산이다. 적어도 20대 PHP 개발자인 내가 시장에서 느낀 바로는 그렇다. PHP 프로젝트는 기본적인 코드 컨벤션인 PSR-1, PSR-12 조차 안 지켜진 프로젝트가 많다.
사..살려줘
제목이 자극적이지만 어쩔 수 없다. 싫어도 현실을 받아들여야 한다. PHP 는 죽어가고 있으니까. 자, 우리가 언어를 배울 때 가장 많이 접하는 프로그래밍 언어 랭킹을 보자.
이럴 수가 9위라니! 그럼, 괜찮은 것이 아닌가? 그렇다면, 이후 추세는 어떨까? 연도별 PHP 언어의 성장을 봐보자.
자, 2004년 인터넷의 성장기 이후 성숙기인 2010년부터 PHP는 점점 죽어가고 있다는 사실을 알 수 있다. 경쟁 언어인 자바와는 애초에 비교조차 할 수 없다. PHP 7 은 2015년에 공개하였으나, 여전히 저 상태다. 이는 해외의 자료지만, PHP 언어 자체가 이미 미래가 불투명하다는 사실을 알 수 있다. 참고로 해당 그래프는 아래의 사이트에서 가져온 것이다.
'하기 싫지만 억지로 하는 언어' 비율이 '더' 높은 언어
아래의 그래프는 프로그래머스 2020 설문조사에서 가져왔다. 자신 있는 언어와 하기 싫지만 억지로 하는 언어를 비교한 것이다. PHP 를 잘 보자. 하기 싫은데 억지로 하는 비율이 자신 있어하는 비율보다 더 높다는 것을 알 수 있다.
더군다나 프로그래머스의 설문조사는 20대 비율이 압도적으로 높다. 그 의미는 20대는 PHP 를 하기 싫어하며 해당 시장에 신규 개발자의 수혈이 없다는 것이 된다(고령자가 많음). 하지만 회사에서 이미 구성된 프로젝트는 PHP 이기 때문에 그냥 울며 겨자 먹기로 PHP 를 하고 있는 것이다. 그는 PHP 라는 언어 자체가 가진 미래가 얼마나 암울한지를 보여준다. 아이들이 국가의 미래이듯 신규 개발자는 개발시장의 미래인데, 그들이 사용하길 꺼려한다면 이 얼마나 슬픈 현실인가!
웹사이트 점유율 그래프에 속지 마라!
아래의 그래프는 모두 PHP 가 웹사이트 점유율 언어 1위라고 이야기한다. 사실이 아닐지도 모르지만, 적어도 표면적으로 보기엔 그럴 것이다. CMS(Content Management System)가 PHP 언어인 경우가 대다수이기 때문, 또한 웹호스팅 업체에서 가장 많이 제공하는 것도 PHP 웹호스팅이다. 많이 쓰이는 CMS인 워드프레스, 제로, 그누보드를 생각해보라. 모두 PHP 이며, 이는 간단하게 웹페이지를 개발할 때 많이 쓴다.
실질적으로 우리가 기술적으로 접할 수 있는 API 서버와 중대형 어플리케이션에 PHP 가 들어가는 비율은 그다지 많지 않다. 즉 이건, 환상, 일종의 눈을 속이는 신기루라는 것이다. 현 시점에서는 CMS 에서 사용하는 언어는 사실상 배제해야하는 것이 타당하다.
라라벨이 간다
기존의 시장에 나타나 있는 PHP 프로젝트를 제외하고 PHP 를 살려주고 있는 존재가 있다. 그건 바로 라라벨 프레임워크다. 라라벨은 기존에 많이 쓰이던 CI(CodeIgniter) 프레임워크를 재치고 우위를 점치며 죽지 않도록 유지시켜주고 있다. 마치 생명유지장치처럼 말이다. 라라벨은 체계적이며 모던 PHP 의 상징인 PSR, Composer 를 적극적으로 사용한다. 라라벨 프레임워크가 없으면 PHP 는 실질적 프로그래밍 언어의 세계에서 도태될 것이다.
굳건하게 자바에서 자리를 지키고 있는 스프링과는 달리 CI 는 힘이 없으며, CakePHP, Zend 등 기존에 있던 PHP 프레임워크들은 모두 죽었다. PHP 생태계의 두 희망은 워드프레스, 라라벨이다. 다만 워드프레스는 손절각을 보고 있는 것 같으므로 이제는 라라벨 뿐이다.
Laravel vs Spring Framework
알다시피 우리나라는 자바 공화국이다. 그리고 난 자바를 싫어한다. 뭐 이건 감정적인 접근일 뿐이니 너무 신경 쓰지 않아도 상관없다. 하지만 그래프를 보자. 자바의 웹 프레임워크인 스프링과 라라벨은 이미 비교의 대상조차 될 수 없다. 같은 웹 프레임워크이지만 이렇게 시장에서 큰 차이를 보이는 것이다.
여담으로 아는 앵귤러 개발자 분께서 위의 그래프가 Angular 가 아닌 Angluar.js 라는 것에 노하셨다. 둘은 엄격하게 다른 것이다.
다른 언어는 학교에서 사용하니까 그런 거지!
프로그래밍 언어 랭킹에서도 보았듯 Java, Python, C, C++, Javascript 와 같은 언어들은 모두 교육에서 쓰이는 언어들이다. 그렇기에 공급도 많다. 하지만 수요도 많은 편이다. 자바는 우리나라에서만 유독 많이 쓰이는 특이 케이스인데, 그 이유는 국비지원을 포함한 정부 프로젝트, SI 에서 대체로 자바를 사용하기 때문이다. 서버 사이드 프로그래밍이라 하면 자바가 제일 먼저 떠오르는 것이 현실이다. 국내 백엔드 개발자 비율 중에 자바를 사용하는 개발자 비율이 절반이 넘을 것이라 감히 예상해본다. 물론, 난 그래도 자바는 안 한다.
상위권에 랭크된 언어들이 교육용으로 사용되고 있기 때문에 그 언어들 또한 허상일까? 그렇지 않다. PHP 또한 타 언어들과 마찬가지로 범용으로 사용할 수 있도록 구성된 인터프리터 언어이나 실상은 서버 어플리케이션으로 밖에 거의 사용하지 않는다. 반면 위에 언급한 언어들은 사용처가 다양하다. 따라서 교육용으로 쓰여서 랭킹이 높은 것도 있지만, 범용 언어답게 사용처가 다양한 것이다. 이는 어느 정도 거품이 끼어있을지언정 허상일 가능성은 낮다.
Loved? :Dreaded
자, 다음은 스택오버플로우 2020 설문조사에서 살펴보자. 사람들이 싫어하는 언어의 몇 등일까. 자그마치 6등이다. 사실 스택오버플로우의 설문조사는 허상이 많다. 웹 프레임워크에서 jQuery is still king 이라고 할 정도라면 말이다. 그래프에서도 제이쿼리는 웹 프레임워크에서 1등을 차지했다.
참고로 가장 인기있는 언어 순위에선 PHP가 8위를 달성했다. 가장 많이 사용하는 것과 가장 많이 사랑받는 것은 엄격하게 다르다. 이를 잘 분석해야 할 것이다. 많이 사용한다는 것은 프로그래머스 설문조사에서도 보았듯, 싫지만 어쩔 수 없이 사용해야 하는 언어로서의 지표도 포함되어 있으니까 말이다. 이면이 의미하는 바를 잘 생각해보면 알 것이다. Loved, Wanted 에서 PHP 의 존재는 저 아래로 내려가 있으니 잘 아래의 참고자료에서 찾아보면 좋을 것이다.
지금 PHP 를 배워도 될까?
PHP 가 죽어가고 있는 시점이긴 하나, 시장에서 완전히 배제되고 있진 않다. 일자리는 C# 과 비슷하니 문제가 되진 않을 터이다. 하지만 프로그래밍을 처음 접하는 개발자나, 신입 개발자에게 그다지 권하고 싶진 않다. 기회의 측면으로 보자면 자바가 더 나을 것이다. 내가 자바를 싫어하긴 해도 자바가 현재 국내 시장에서 사랑받고 있는 것은 사실이다. 물론 그만큼 자바 개발자는 발에 채일 정도로 많아서 희소가치가 떨어진다는 점 등 이면이 있으니 이는 개인의 가치관에 맞게 고민하면 된다.
프로그래밍 언어라는 건 하나의 도구일 뿐이니 PHP 를 회사에서 사용한다면 배워도 문제 될 건 없다. 다만, 개인적으로 공부할 거라면 Golang, Rust, Python, Javascript/Typescript 를 권장하는 편이다. 이 언어들은 꾸준한 성장세를 보인다. 사실 분야별로 다르겠지만 말이다. 가파른 상승세를 보이는 것은 Rust 이나 이는 현재 사용처가 제한되어 있으니 나머지 언어들을 고려해보는 것이 좋을 것 같다. 항상 급등주는 주의해야한다.
마치며
여기까지 2020년, PHP 언어가 가지는 의미를 간략하게나마 알아보았다. 세상에는 수많은 프로그래밍 언어가 있는데 굳이 PHP 하나를 가지고 이렇게 글을 써야 되는가 싶기도 하지만, PHP 는 내가 수년간 투자하고 접한 언어이고 인터넷의 부흥기를 이끈 언어이기 때문이다. 내가 좋아하는 PHP 가 죽어간다는 사실은 슬프지만, 이제는 시대가 더 이상 그것을 바라지 않게 되었다. 위에서 언급했듯 내 다음 언어는 Golang 이다.
참고 문헌 & 자료
https://www.tiobe.com/tiobe-index/
https://programmers.co.kr/pages/dev-survey-2020#developer-tech-stack-lang