26 May 2005
by Joseph Jang
프로그래밍 언어의 평가
나쁜 프로그래밍 언어란? 어떤 사람들은 문법이 마음에 들지 않아서 나쁜 프로그래밍 언어라고 부를테고, 어떤 사람들은 그 언어를 사용해 개발한 프로덕트의 성능이 너무 떨어져서 나쁜 프로그래밍 언어라고 부를 것이다. 어떤 사람들은 자신이 필요로 하는 라이브러리가 없어서 나쁜 프로그래밍 언어라고 부른다. 모두 자신만의 기준을 가지고 있다. 어떤 기준이 옳은가?
프로그래밍 언어는 종교가 아니라 도구다. 프로그래밍 언어를 선택할 때에는 자신이 해결하고자 하는 문제와 그 문제를 해결하는 상황에 가해지는 제약 조건이 프로그래밍 언어와 잘 맞아떨어지는 가를 살펴야한다. 애초부터 나쁜 프로그래밍 언어가 존재하기보다는 프로그래밍 언어를 선택하는 사람의 문맥에서만 좋고 나쁨이 존재하는 것이다. (물론 논리적으로는 모든 상황에서 나쁜 언어가 존재할 수는 있다. 하지만, 아마도 그런 언어는 당신이 경험해 볼 기회가 없을 것이다. 이 글은 철학 에세이가 아니다.) 프로그래밍 언어 논쟁이 자주 이상한 길로 빠지는 이유는 논쟁에 참여하는 사람이 그 언어를 경험한 문맥은 제각기 다르기 때문이다.
한편, 프로그래밍 언어는 문법 내지는 표준 라이브러리로만 구성되는 것이 아니다. 프로그래밍 언어 자체 뿐만이 아니라, 프로그래밍 언어가 사용되는 방법, 프로그래밍 언어를 사용하는 사람들, 프로그래밍 언어를 위한 도구들 등 프로그래밍 언어 외적인 요소들도 프로그래밍 언어 평가의 범주에 포함시켜야 한다.

결국 의미있는 프로그래밍 언어의 평가는, 프로그래밍 언어를 평가하는 사람의 특정한 문맥 – 예를 들어, 해결하고자 하는 문제와 문제를 해결하는 상황적 조건 – 에서 프로그래밍 언어 자체 뿐만 아니라 프로그래밍 언어 외적인 요소들까지도 포함해서 이루어져야 하는 것이다.
PHP 프로그래밍 언어의 평가
일단, PHP 프로그래밍 언어의 평가가 어느 정도 정당하기 위해서는 그 평가가 웹 어플리케이션에 대해서 이루어져야 한다고 생각한다. PHP가 사용되는 어플리케이션의 절대 다수는 웹 어플리케이션이기 때문이다. 이 때, 우리는 웹 어플리케이션 개발 양상의 변화를 염두에 두어야 한다. PHP가 처음으로 선보일 당시, PHP가 해결하고자 했던 웹 어플리케이션 상의 문제와 현재 개발되는 웹 어플리케이션의 문제는 크게 달라졌기 때문이다. 가장 중요한 변화는 바로 규모와 복잡성이다.
PHP가 처음 만들어질 당시에는 비교적 작은 규모의 단순한 웹 어플리케이션들이 대부분이었다. 당연히 PHP의 설계 철학도 거기에 맞춰졌으리라고 생각한다. PHP로 만들어지는 어플리케이션의 규모가 작았기 때문에, namespace의 부재나 템플리팅, 전역 변수들이 미치는 부정적인 영향보다 긍정적인 영향이 더 컸으리라고 생각한다.
하지만, 웹 어플리케이션의 규모가 점점 커지고, 유지 보수 문제가 중요한 문제로 떠오르게 되었다. Java 진영에서는 JSP, JavaBean, EJB 등의 기술을 기반으로 MVC를 도입한 JSP Model 2를 발전시켰다. 하지만, PHP 진영에서는 언어 자체가 원래부터 초기의 웹 어플리케이션 개발에 초점이 맞추어져 있었기 때문에 변화 자체가 힘들었고, 기존의 사용자를 버리고 변화할만큼의 자유는 없었다고 생각된다. (기술 발전에 있어서 이와 유사한 경우는 자주 발견된다.) 전형적인 예가, PHP의 템플리팅 기능이라고 생각한다. 웹 어플리케이션 개발이 발전하면서 프리젠테이션과 로직의 분리가 상당히 강조되어왔지만, 템플리팅 기본 지원이라는 강력한 이점을 포기하기는 너무나 힘들었을 것이다.
이와 같이, PHP 프로그래밍 언어 자체(문법과 라이브러리)에는 큰 규모의 웹 어플리케이션에 잘 어울리지 않는 아쉬운 점이 있는 것이 사실이다. 하지만, 이러한 문제들도 완전히 극복할 수 없는 그런 종류의 문제들은 아니다. 적어도 non-trivial한 언어라면 어떤 언어든지 제대로 사용하기 위해서는 어느 정도의 숙련을 필요로 한다. PHP 프로그래밍 언어의 문제점들도 숙련된 프로그래머의 정련된 discipline (이 단어에 대응하는 적당한 우리말 단어가 없는 듯 하다)를 통해서 해결되거나 피해갈 수 있는 문제들에 지나지 않는다. 따라서, PHP 문법의 세련되지 못함을 이유로 PHP가 언어의 선택에서 탈락되어야 하는 경우는, 문법 이외에는 모든 조건이 다른 언어들과 거의 동등하다거나, PHP에 숙달된 프로그래머가 별로 없다거나, 다른 목적 (예를 들어, 다른 고급 언어를 사용함으로써 충족되는 프로그래머의 만족감)이 필요한 상황 외에는 없을거라고 생각한다.
이러한 점에서 이미 PHP 프로그래밍 언어를 사용하고 있는 프로젝트에서 PHP 프로그래밍 언어 자체의 문제를 이유로 들어 다른 언어로 바꿀만한 정당성은 거의 없다고 생각한다. (반면에 새로운 프로젝트에서 프로그래밍 언어를 선택해야하는 입장에 있는 경우에는 굳이 PHP를 선택할 필요는 없는 것은 말할 필요도 없다.) 내가 다니던 회사에서도 PHP 프로그래밍 언어를 사용하는 대규모 웹 어플리케이션의 유지보수가 큰 문제가 되어서, 다른 언어로 바꾸자는 의견이 분분했던 적이 있다. 분명히 유지보수의 문제는 PHP 프로그래밍 언어 자체에도 어느 정도 책임이 있을 것이다. 하지만, 그들이 PHP 프로그래밍 언어의 문제에 눈이 멀어 보지 못했던 것은, 대규모 웹 어플리케이션 자체의 복잡성이었다고 생각한다. 대규모 웹 어플리케이션 자체의 복잡성을 해결하기 위한 다른 노력을 고려하지 않으면서, 프로그래밍 언어 또는 관련 제반 기술을 바꾸면 문제가 해결된다는 생각은 엔지니어링의 결과로 보기에는 힘들고, 웹 어플리케이션 자체를 위험에 빠뜨릴 수 있는 위험한 생각이라고 생각한다. (사실 당시에, 나도 그러한 생각을 하는 사람 중의 한 사람이었고, 이후로 이 문제에 대한 고민이 시작되었다.)
Zend에서는 몇몇 문제를 해결한 PHP 5를 내놓았고, PEAR를 정통적인 3rd party 라이브러리로 내세우고 있다. 이러한 노력들이 다른 수많은 기술들과의 경쟁에서 이기고 좋은 결과를 거둘 수 있을지는 미지수이다. 개인적인 의견으로는 PHP에는 아직도 초기 디자인의 유물들이 너무나 많이 남아있기 때문에 비관적이라고 본다. 그럼에도 불구하고 PHP의 커다란 사용자층은 PHP를 계속 살아남도록 하는 원동력이 될 것이다. 그리고, 그 동안에 무슨 일이 벌어질지는 아직 아무도 모르는 일이다.
한편, 웹 어플리케이션 뿐만 아니라 어떤 어플리케이션 개발에 있어서 기술의 성숙도는 프레임워크가 있느냐 없느냐로 결정된다고 생각한다. 프레임워크는 어떤 어
플리케이션의 베스트 프랙티스(best practice)들을 모두 모아놓은 결과물이기 때문이다. 웹 어플리케이션 개발 분야에서도 프레임워크 기술은 2000년 즈음 이후로 크게 발전해서 널리 퍼지게 되었다. 웹 어플리케이션을 자신의 니치(niche)로 가지고 있는 PHP 진영에서도 이러한 노력이 분명히 있을 것이라고 생각했고, 나는 회사의 개발자 메일링 리스트로 "PHP에서 가장 널리 쓰이는 MVC 기반 웹 프레임워크가 무엇인지" 질문을 했다. 며칠이 지나도록 답변이 없었다. 나는 직접 웹 검색을 해보기로 했다. 웬걸, PHP로 만들어진 웹 프레임워크는 너무나 많았다. 국내에서 가장 유명하다는 PHP 커뮤너티 사이트인 PHPSCHOOL에도 가보았다. MVC에 관한 글은 단 하나(!)였다. (현재는 두개다.) 성급한 일반화일런지는 몰라도, 적어도 국내에서는 PHP 개발자들은 MVC 프레임워크를 거의 사용하지 않는다는 것이다. 대부분의 개발자들은 JSF와 같은 새로운 JSP 기술에 열광하고, RubyOnRails에 열광하는데, 어째서 PHP 기반의 MVC 프레임워크는 찾지 않을까. 이상하다고 생각했다.
내가 아는 PHP 개발자는 스스로가 하고 있는 일을 가치가 낮은 일로 여겼다. 그 이유는 PHP는 좋지 못한 언어란 것이었다. PHP 개발자를 포함해 내가 아는 대부분의 소프트웨어 개발자들은 PHP 언어를 싫어하고, 동시에 PHP 개발을 낮은 가치를 지닌 일로 평가한다. 같은 어플리케이션을 만들어도 J2EE 나 .NET 플랫폼에서 개발을 하면 높은 가치를 생산하고 PHP로 만들면 낮은 가치를 생산할까? 위에서 내 논리를 잘 따라왔다면 합리적인 답변은 그렇지 않다는 것이다. 하지만, 나는 이 질문이 잘못되었다고 생각한다. PHP, JSP, ASP 개발은 낮은 가치를 생산하는가? 아마도 대부분이 그렇다고 대답할 것이라고 생각한다. 사람들은 웹 어플리케이션 개발(특히, 웹 티어 개발)을 낮은 가치로 평가한다.
닷컴 붐이 일 때, 엄청나게 부풀려진 웹 어플리케이션 시장은 평균적으로 경험이 적고 기술 수준이 낮은 웹 프로그래머를 양산하게 되었다. 당연히 경험이 적고 기술 수준이 낮은 프로그래머로부터 나오는 산출물 또한 그 품질이 낮을 수 밖에 없다. 여기서 사람들은 한가지 착각을 한다. 산출물의 품질이 낮은 프로그래머가 사용하는 기술은 가치가 낮은 기술이라는 인식이다. PHP는 처음부터 프로그래머가 쉽게 배울 수 있고 편이성을 강조한 언어였다. 당연히 경험이 적은 대다수의 초보 프로그래머가 선택한 언어는 PHP 였을 것이다. 그리고, PHP는 동급의 웹 어플리케이션 기술인 JSP나 ASP에 비해서도 오히려 낮은 평가를 받는 처지가 된다.
PHP 기술에 대한 낮은 평가는 기술 수준이 낮은 PHP 프로그래머들을 낳게 된다 (기술 수준이 높은 프로그래머는 다른 언어로 옮겨가거나 PHP를 선택하지 않음으로써). 이것은 positive feedback으로 전체 PHP 프로그래머들의 수준을 낮추는 결과를 가져왔고, 현재 커뮤너티의 수준도 낮은 수준에 머무르게 된 것이라고 생각한다. (이 얘기는 당사자들에게는 민감한 얘기라고 생각한다. 이것은 평균적인 수준에 대한 얘기이지 PHP 프로그래머 개개인에 대한 얘기가 아닌 것을 유념해주기 바란다. 또한 이것은 비난이나 인신공격도 아니다. 이 글은 문제점을 제대로 파악하자는 의도를 가지고 있다.)
PHP 개발자를 낮은 기술에 머무르게 하는 이 positive feedback 구조에도 불구하고, 숙련된 개발자는 PHP를 사용하더라도 분명히 높은 가치의 산출물을 낼 것이라고 생각한다. PHP를 사용하는 개발자는 PHP를 사용하기 때문에 가치가 낮은 것이 아니라, PHP 개발자에게 기대하는 수준 이상의 것을 하지 못하기 때문에 구조의 족쇄에서 영영 빠져나오지 못하는 것이다. 솔직히 말해서, 한번 이러한 feedback이 확립된 이상 PHP 언어가 거기로부터 빠져나오기는 힘들다고 생각한다. 하지만 PHP 개발자 개개인은 그렇지 않다는 것이 중요하다. 합리적이지 않는 이유 – PHP를 사용한다는 이유로 자신의 가치를 낮게 평가하지 말고 경험을 쌓고 더 높은 가치의 일을 하도록 노력해야한다고 생각한다. HTML markup과 PHP 코드를 자유자재로 구사하면서 스파게티 웹 티어 코드를 생산해내는 PHP 프로그래머와 프리젠테이션과 로직의 분리라는 디자인 목적을 깨뜨리지 않으려 세심하게 노력을 기울이는 PHP 프로그래머, 5년 후 그들 사이의 갭은 얼마 만큼 일까.
Summary
웹 어플리케이션 개발을 위해 만들어진 PHP 프로그래밍 언어는 초기 웹 어플리케이션의 개발에 최적화 되어있고, 요즘 웹 어플리케이션의 대형화 복잡화 경향을 잘 따라가지 못하는 한계를 분명히 가지고 있다. 하지만, 그것은 분명히 극복할 수 있는 한계로서, PHP 기반의 웹 어플리케이션 프레임워크들과 같은 노력들도 존재한다. 언어적인 한계를 평가할 때는 그것을 실제 이상으로 과대 평가하지 않도록 주의를 기울여야 한다. PHP5나 PEAR와 같은 PHP의 개선을 위한 노력들도, 어느 정도 한계는 있지만 PHP가 확보하고 있는 넓은 사용자층으로 인해 기대해볼 만하다.
PHP 언어를 사용하는 것은 낮은 가치를 지니는 일이란 것은 일종의 미신이다. 이러한 미신으로 인해 PHP 언어에 덮혀씌워진 오명은 피드백 구조로 인해 당분간 깨어지기는 힘들 것이다. 하지만, 개발자 개인이 이러한 미신을 깨뜨리고 높은 가치를 지니는 개발자가 되는 것은 개발자 자신의 몫일 것이다.
Comments |
Categories: Software Development