개요
2019년부터 워드프레스 및 라라벨로 개발하고 있는 이제는 3년 차 웹 개발자입니다.
슬슬 이직을 하고 싶다는 생각이 계속 들고 있습니다,
채용 시장조사를 하던 중 PHP를 계속하는 게 제 커리어 적으로 좋을지 의문이 들었습니다.
아마 저처럼 처음 회사에 들어와서 처음 PHP를 접하여 사용하는 분들이 많을 것이며
마찬가지로 입사 후 라라벨와 워드프레스 또한 처음 배우신 분들 일 것입니다.
그러면 자연스럽게 저와 비슷한 고민을 할 것 같습니다
제 글이 참고가 되었으면 좋겠네요.
인터넷 반응
PHP에 대한 국내 개발 커뮤니티 반응은 대체로 아래와 같습니다.
- PHP는 별로다.
- 취업이 안된다.
- 유행이 지났다.
저는 산업기능요원으로 개발 업체에서 복무하고 있습니다.
산업기능요원을 진행하면서 군 훈련소에 입소했을 때 만난 같이 산업기능요원을 하시는 분들에게
PHP로 개발한다고 처음 말했을 때 반응은 아래와 같았습니다.
보통은
"PHP도 언어인가..?"와 같이 비꼬는 반응하고
"싱글 스레드는 저리 가시죠?" 같은 반응입니다
Javascript 또한 싱글 스레드인걸 생각함과 동시에 멀티 스레드와 싱글 스레드는 각각의 장단점이 존재하는 걸 생각하면
억지로 까는 느낌이 강합니다.
물론 PHP와 달리 JS는 비동기 요청도 가능하고 동시성의 특징을 지니는 등 차이가 존재하고
PHP 문서 퍼포먼스를 보면 개발할 시 고려야 할 사항이 많습니다.
이 부분에 대해서는 아래에서 정리해 보도록 하겠습니다.
제가 겪은 것 말고도 인터넷에 달린 의견들을 차례차례 세부적인 반응들을 까 보면
PHP는 별로다
보통 입문자 또는 이제 막 공부하려는 사람들이 PHP와 JAVA 중에 어떤 걸 배울까요?라는 질문을 하면
100이면 100 이런 대답이 달립니다, 어느 분은 그냥 하지 마라고 합니다 ㅋㅋ
이런 반응이 생긴 배경은 아래와 같다고 봅니다.
- 레거시 코드에 당한 피해자들로 만들어진 PHP 안티 개발자들
- 이는 초기 웹 개발 언어로 한 시대를 풍미했기 때문에 그 영향으로 우후죽순 생긴 래거시 코드가 가장 큰 문제입니다.
- 특히 라라벨과 같은 프레임워크나 워드프레스 같은 큰 생태계를 가진 CMS 또한 없었던 초기 PHP의 자유도로 인해 많은 코드들이 양산되었고 그중에는 돌아가기만 하던 코드 또한 존재했기 때문입니다.
- 저도 외주로 순수 PHP 프로젝트를 받아본 적이 있었는데, 많이 난감했던 기억이 있습니다, 저도 그 프로젝트로 PHP를 시작했다면 PHP 좋지 않은 감정을 가졌을 듯합니다.
- JAVA와 비교해 예전 PHP가 가지는 부실함이 준 이미지
- PHP 문서를 보면 솔직히 말해서 함수와 변수에 대한 네이밍이 규칙성이 없습니다, 믿음이 안 가게 만들죠.
- 5..* 이상 버전부터는 객체지향이 적용이 되어 괜찮아졌지만 그 이전 버전에서 쌓아 올린 이미지가 좋지 않았습니다.
- 간단한 사이트를 만들기 좋다.
- PHP는 간단한 사이트 만들 때 좋습니다는 말은 장점이기도 하지만 단점이라고 생각합니다, 이 말로 인해 "아 PHP는 간단한 거 만들 때만 쓸 수 있구나"라는 편견을 만들어버린 건가라는 생각이 듭니다.
- 물론 간단한 거 만들 때도 좋지만 좋은 프레임워크와 함께 쓰면 Java와 Spring과 같이 대형 프로젝트에서도 "충분히 쓰일 수 있지만 간단한 사이트 만들 때 좋다"에 가려지는 것 같습니다.
- PHP가 배우기 쉽다고 하여 어려운 걸 못 만드는 것은 아니라고 생각합니다.
이들이 합쳐지면서 PHP는 별로다라는 생각을 가진 사람들이
새롭게 개발을 입문하는 사람들한테 "PHP는 별로다"라고 말해주어 입문자들의 머릿속에서 PHP의 이미지가 구축된 것이죠.
그렇기에 PHP가 바뀌어도 그대로 별로라고 본다고 생각합니다.
하지만 이를 해결하기 위해 막연히 입문자들에게 PHP를 하라고 할 수 없기도 합니다
지금은 PHP가 처음 나왔을 때와 달리 훨씬 다양한 언어, 프레임워크, 라이브러리를 사용할 수 있기 때문이죠.
이 문제를 해결하기는 힘들 것이라고 생각합니다.
받아들여야지요
취업이 안된다
PHP를 하면 취업이 안된다는 얘기를 한 번씩은 들어보셨을 것입니다.
하지만 PHP는 아직도 프로그래밍 언어 탑 10위 안에도 들며 많은 웹 사이트에도 사용 중입니다.
마찬가지로 채용 공고 사이트에서도 아직도 PHP 개발자 구인은 많습니다.
또한 아래와 같은 우대사항을 보고 들어간다면 레거시 코드만을 보면서 개발할 일은 확연히 줄 것입니다.
모던 PHP 가능자 / OOP개념에 익숙하신 분 / 라라벨, 코드이그나이터 사용 가능자 / MVC패턴 이해자
결정적으로 많은 회사에서 라라벨 프레임워크나 비교적 틀이 잡힌 워드프레스을 도입했기 때문에 이전보다 레거시 코드를 볼 일은 확연히 줄어들었습니다, 레거시 코드를 걱정하지 않아도 된다고 봅니다.
취업이 안된다는 이야기가 나온 이유는 PHP가 주로 JAVA와 비교되기 때문에 부각된다고 생각합니다.
PHP도 물론 취업이 할만하 다라 할 수 있지만
정부에서 밀어주는 JAVA와 비교해서는 취업 시장이 더 작을 수밖에 없습니다.
하지만 PHP가 무조건 안 좋다는 아닙니다.
JAVA에 경우 학원에서 웹 개발자를 양성할 때 배우는 경우가 많아 공급도 많기 때문에 JAVA는 시장이 큰 만큼 공급도 많습니다.
하지만 연소득을 볼 경우 아무래도 시장이 큰 쪽이 많이 번다는 것도 참고해 두면 좋습니다.
유행이 지났다
그래서 사람들은 PHP를 유행이 끝나가는 언어라고 합니다.
생각에는 유행이 끝난다는 것과 언어가 망하는 건 별개로 생각합니다
하지만 유행이 지났다는 의견은 공감합니다.
저에게 개발을 처음 하는 사람이 입문할 언어를 추천해달라고 부탁한다면 PHP가 아닌 Go, Python, Kotlin, Javascript, Java 등을 추천할 것 같습니다.
해당 언어들이 유행에 맞으며 현재 입문자 기준으로 포기 비용 또한 없으니 위 언어들을 택하는 게 나은 선택이라고 생각합니다.
각 언어마다 가지는 이미지가 PHP와 비교해서 더 좋은 건 사실입니다.
아무리 PHP가 최근에 들어서 업데이트를 통해 좋아졌다고 하지만 강의나 커뮤니티, 문서 등을 보면 타 언어도 꿀리지 않을 뿐만 아니라 괜찮은 이미지도 가지고 있습니다.
그렇기에 다시 PHP가 대세가 되긴 힘들 것 같다는 생각입니다.
PHP 퍼포먼스
개발을 잘하려면 언어마다의 특징을 생각하며 상황에 맞는 언어를 고르는 능력을 갖추는 게 중요하죠.
PHP를 까는 사람들이 "정말 PHP를 몰라서 깔까"라고 반문을 한 번 해봤습니다.
물론 그냥 까는 사람들도 있겠지만 다 그렇지 않을 게 분명하니까요.
우선 PHP 탄생 배경을 알아봅시다.
PHP 처음은 1994년 C 바이너리 세트에서 시작했으며 1년 정도를 거쳐 바이너리 세트에서 PHP로 바뀌었습니다.
여기서 웹 페이지 전용 언어로 만들기 위해 접차 살을 붙여나가고 수정 및 확장하여 작금의 PHP가 되었습니다.
개발 편의성이 및 생산성으로 수많은 사용자들을 불러 모아 지금의 생태계를 만들었죠.
하지만 PHP는 시작부터 가진 특징으로 인해 현재 환경에서 여러 가지 문제를 초래했습니다.
바로 싱글 스레드죠.
싱글 스레드
스레드는 프로세스 하위에서 일하는 작업 단위입니다, 이 싱글 스레드가 하나라는 말은 프로세스당 스레드를 하나만 가질 수 있다는 것입니다.
JS도 싱글 스레드이긴 하나, 이벤트 루프의 존재나, 비동기 통신 같은 해결책 및 보완할 수 있는 기능이 많습니다.
현재는 생태계가 PHP와 비교할 수 없을 정도로 커졌습니다.
그렇다면 PHP도 같은 싱글 스레드인데 비슷하게 해결할 수 없었을까요
PHP는 현재 비동기 요청에 경우 cURL 라이브러리는 직접 비동기를 지원하지 않아 소캣을 이용해야 합니다,
이 문제를 해결한 게 Guzzle로 cURL에서 기능을 추가한 라이브러리입니다.
이를 이용하면 비동기 통신이 가능합니다.
멀티 스레드처럼 행동해 주는 기능에 대해서는 php 7.2부터는 pthreads와 parallel이 존재하며
이들이 어느 정도 해결해주지만 약간씩 하자가 보입니다.
PHP 8 버전 때부터 지원하는 Fibers에 경우 훨씬 빠른 모습을 보여주지만 이것도 완전한 동시 실행은 아닙니다.
- pthreads는 cli에서만 가능하며 웹이 불가능하다는 큰 문제점과 더불어 현재는 PHP에서 공식적으로 지원을 하지 않습니다.
- parallel의 경우 php 자체는 싱글 스레드이기에 한 프로세스에서의 메모리 공유를 통한 통신이 아닌 채널을 통해 메모리 메시지를 공유하는 방식입니다.
- Fibers는 버전 8부터 지원하는 방법으로 기존 방법인 위 2개보다는 확실히 빠른 속도를 보여줍니다, 하지만 Fiber 자체는 여러 Fiber 또는 기본 스레드와 동시 실행을 허용하지 않습니다.
- 번외로 위 방법을 안 쓰고 프레임 워크 및 라이브러리로 대체하는 방법도 있으나, 언어 자체에서 지원해 주는 편이 통일성이 생기기에 필요하다고 봅니다.
멀티 스레드일 경우 같은 프로세스라는 점으로 메모리 공유가 되지만 PHP는 다른 방식으로 해결했습니다.
메모리 과다 점유
하지만 이는 프로세스의 증가로 이어지다 보니 기존부터 멀티 스레드를 사용하여 같은 프로세스에서 메시지 공유하는 방식을 채택한 다른 언어에 비해서는 메모리를 많이 잡아먹을 수밖에 없습니다.
즉 타 언어에 비해 병행 작업에서 메모리를 과다 점유하게 됩니다.
이로 인해 웹 소켓을 통한 사용자끼리의 통신이나 서버 사이드에서 처리해줘야 하는 이벤트에 경우 PHP는 약한 모습을 보여줄 수밖에 없습니다.
그러니 이런 작업에서는 어쩔 수 없이 사용해야 하는 제외하고는 다른 언어를 이용하는 편이 좋아 보입니다.
결론
프로그래밍 언어도 유행이 있다는 말이 가장 마음에 와닿은 것 같습니다.
언어가 나빠서가 아닌 그저 유행이 바뀐 거죠, 유행을 따르는 건 개인의 선택이라고 생각합니다.
유행과 더불어 앞으로는 대용량 데이터 처리에 능한 언어가 좋을 수밖에 없다고 생각합니다.
PHP는 데이터처리에서도 특출난 모습이 없기에 웹 페이지 생산성(기존의 개발자 풀 + 많은 소스 + 문서)을 장점으로보고
사용해야 하는 언어라는 생각이 듭니다.
"언어를 가리는 개발자는 크게 성장못한다"라는 말이 있어서는 동의하지만 다른 선택지가 있다면 PHP 만 고집할 필요는 없고
본인이 원하는 대로 하시면 될 것 같습니다
OKKY에 해당 글을 공유했습니다, 댓글이 많아 참고하시면 좋을 듯합니다.
'PHP > Modern PHP' 카테고리의 다른 글
[PHP] 게시판 만들기 with MVC - 3부 View(List & Create) (1) | 2023.12.27 |
---|---|
[PHP] 게시판 만들기 with MVC - 2부 Routing (0) | 2023.12.26 |
[PHP] 게시판 만들기 with MVC - 1부 Migration (1) | 2023.12.26 |
[PHP] PHP 면접 질문 정리 (1) | 2023.12.08 |
PHP 인코더, 디코더 (소스코드 암호화) 해보기 (0) | 2020.12.21 |