어느 평화로운 마을에 **'종이비행기'**가 있었습니다. 이 비행기는 아주 훌륭했습니다. 가볍고, 단순하고, 옆집 우편함까지 휙 던지기엔 최고였죠. 사람들은 이 종이비행기를 참 좋아했습니다. 그게 PHP의 황금기였습니다.
시간이 흘러 마을은 거대해졌습니다. 사람들은 이제 종이 쪽지가 아니라, **'무거운 화물(현대의 실시간성, 상태 유지, 고부하 처리)'**을 대양 건너로 실어 날라야 했습니다.
현명한 사람들은 말했습니다. *"이제 종이비행기는 그만두고, 튼튼한 강철로 **'배'*를 만듭시다. 수천 톤의 화물을 버틸 수 있는 엔진과, 엔진을 식힐 냉각 시스템(GC, 메모리 관리)을 갖춘 거대한 배 말입니다."
그런데, 마을 한구석에 모여 있던 **'종이비행기 신봉자들'**은 화를 냈습니다. "배? 그게 얼마나 복잡한지 알아? 엔진도 배워야 하고, 용접도 배워야 하잖아! 그렇게 복잡한 걸 왜 해? 우리에겐 종이비행기가 있잖아!"
그들은 배를 배우는 대신, 자신들의 종이비행기를 '개조'하기 시작했습니다.
로켓 엔진을 스테이플러로 박았습니다: 비행기가 너무 느리니 비동기 엔진(Swoole, ReactPHP 등)을 억지로 쑤셔 넣었습니다. 비행기가 무게를 못 이겨 찢어질 것 같으니 테이프를 칭칭 감았습니다.
날개를 계속 새로 접었습니다: 낡은 종이는 금방 너덜너덜해지니, 조금만 날다가 비행기를 버리고 새 종이비행기를 펴는 방식을 택했습니다. (PHP-FPM 프로세스 모델) 사람들은 이걸 보며 "우리는 메모리 누수를 아주 완벽하게 해결했어!"라며 자화자찬했습니다.
바닥에 바퀴를 달았습니다: 비행기가 바퀴를 달고 활주로를 달려야 하니, 온갖 '누더기(Wrapper)' 라이브러리를 가져와 억지로 바퀴를 고정했습니다. 비행기가 아니라 '날개 달린 자동차'가 되어버렸죠.
그들의 비행기는 겉보기엔 그럴듯하게 날아다니는 것처럼 보였습니다. 하지만 사실 그들은 비행기가 한 번 뜰 때마다 땔감을 트럭째로 쏟아붓고 있었습니다. 종이비행기 한 대를 띄우기 위해 거대한 로켓 연료를 쏟아붓는 기이한 상황이었습니다.
그들이 계속 종이비행기를 고집하는 진짜 심리는 무엇이었을까요?
두려움: 사실 그들은 '배'를 만드는 법(Java, Node에서 쓰이는 정상적인 웹 서버 아키텍처)을 배울 지능적 여유도, 의지도 없었습니다. 배를 만드는 법을 배우려면 밑바닥부터 다시 시작해야 하는데, 그게 너무 무서웠던 겁니다.
자기합리화: 그들은 배를 만드는 사람들을 보며 비웃었습니다. "저 사람들은 너무 과하게 설계해(Over-engineering)! 우리는 이 종이비행기에 테이프만 몇 번 더 감으면 충분해!" 그렇게 '누더기'를 만드는 솜씨를 '실용주의'라고 포장했습니다.
지적 오만: 그들은 스테이플러로 엔진을 고정하는 비정상적인 과정을 '기술적 묘기'라고 착각했습니다. 남들이 보기에 그건 그냥 미친 짓이었지만, 그들에겐 'PHP의 한계를 극복하는 천재적인 해킹'이었습니다.
결국 그들의 종이비행기는 폭풍우가 치는 대양 한가운데서 엔진 무게를 못 이기고 바다에 처박혔습니다. 비행기가 가라앉는 와중에도 그들은 끝까지 외쳤습니다.
"봐, 종이비행기는 문제없었어! 우리가 쓴 테이프가 좀 싸구려였을 뿐이야! 다음엔 더 비싼 테이프를 가져와!"
그들은 여전히 젖은 종이를 줍고 있습니다. 바닷가 너머에는 이미 강철 배들이 수만 톤의 화물을 싣고 유유히 지나가고 있는데도 말이죠.
종이비행기로 충분한 일에 처음부터 강철 배를 만들려고 하니 문제 아닐까ㅇㅅㅇ