개발&Development/웹

APM(Apache+PHP+MySQL)의 문제

겐도 2006. 3. 27. 05:48
APM이라고 한다면 웹서버를 Apache, 비지니스 레이어를 PHP로 하고 데이터는 MySQL을 사용하는 플랫폼이다. 주로 Linux를 OS Platform으로 이용하지만 Windows도 사용된다. 이 블로그에 사용되는 Tattertools도 APM을 기반으로 한다.

최근에 새로운 프로젝트를 기획하면서 양대 산맥이라 할 수 있는 APM과 ASP.NET(IIS + ASP + MS-SQL)를 비교 검토해 본적이 있는데 나름대로 각각 충분한 기능성을 보유하고 있고 ASP는 Platform가격이 비싸다는 정도로 APM이 약간 우세한 감이 없지 않으나 다른 측면에서 문제점을 가지고 있다고 보고 있다. 태터가 격고 있는 문제이기도 하고 프로젝트를 새로 시작할 때도 가장 걱정되는 문제이기도 하다.

쉬운것이 좋은 것인가?
PHP의 장점이라고 한다면 쉽다라는 점을 가장 먼저 들어야 될 것이다. 변수 타입이 뭐냐는 생각할 필요없이 그냥 쓰면 돌아간다. 프로그래머에 따라서는 이 성질을 십분 발휘하는 다양한 테크닉을 사용할 수도 있겠지만 입문자 혹은 제대로 된 이해가 없는 경우 막 쓰게 된다. 본인의 경우 C/C++을 장기간 해 오면서 타입체크나 invalid에 대해 상당히 신경을 써 왔는데 PHP에선 도저히 감을 잡을 수 없을 정도의 자유로움(?)이 있다. 그리고 덕분에 많은 PHP의 공개된 코드들을 보면 상당히 위험해 보인다.

쉽게 원하는 기능성을 구현할 수 있는 대신 error에 대한 처리에 미숙할 수 밖에 없다. 이런 점은 magic_quote라는 해괴망칙한 옵션을 만들었고 이것은 아래서 설명할 다른 문제점을 만들어 버렸다.

타이트한 문법과 자유스러운 문법의 장단점이 아마 적용되는 부분일 것 같다. 기말레포트 쓰는데야 더할나위 없는 언어지만 대규모의 비지니스 어플레케이션을 작성함에 있어서는 QA(Quality Assurance)를 수행함에 머리아픔에 틀림없다. 마구마구 수용해 줌은 사소한 실수를 찾기 힘들게 만들고 이는 전체시스템의 안정성을 훼손시켜 버린다.

그때 그때 달라요
PHP는 현재 3, 4, 5 버전 정도가 돌아가고 주로 4를 많이 사용한다. 3에서 4로 그리고 4에서 5로 버전업을 하면서 많은 기능들이 추가되었다. 허나 3에 맞추어 작성하여도 4,5에서 다르게 동작하는 케이스가 있기도 하다. 가장 문제는 같은 4라 하더라도 서버의 설정(php.ini나 apache 설정)에 따라 전혀 다르게 동작을 해 버리는 상황이 종종 나온다. 대표적인 것이 위에 잠시 나왔던 magic_quote일 것이다. 일부 개발자들은 headache내지 hell이라고 까지 표현하고 있다. 제한된 환경이라면 자신의 서버 셋팅을 바꿔 버리면 되겠지만 TatterTools의 경우 웹호스팅 서버에 설치되는 경우도 존재하여 도저히 대응이 불가능에 가깝기도 하다. 일부 대응책이라고 나온 것 조차 동작하는 환경과 아닌 환경이 존재한다.

언어의 Semantics가 그때그때 달라져 버리면 어쩔 수 없는거 아닌가.

MySQL도 재미있는 것이.. SQL문의 동작이 버전별로 다른 경우가 있다. 또한 5에서의 경우 옵션에 따라서도 달라져 버린다.

아는 분은 아시겠지만 태터의 개발에 있어서 개발자에 직접 참여하고 있지는 않지만 테스팅을 서포팅 중인데 버젼의 다양성이야 다른 어플리케이션의 QA에서도 해온거지만 옵션을 다양하게 하기는 이번처럼 복잡한것도 처음이다. 그것도 플랫폼의 동작 옵션을 건드리고 있는 것이다. 특정 플랫폼에서만 에러가 나도 많은 작업들이 처음부터 이루어 지는데 이러한 PHP와 MySQL의 특성들이 태터의 릴리징을 상당히 느리게 만들고 겨우 통과해도 n%의 사용자들은 정상 동작하지 않아 사용을 못하게 된다.

이거 DBMS야 파일 시스템이야;;
MySQL을 실전에 거의 처음 사용하는 셈인데 나의 첫마디는 이거였다. "이것도 안되요?"
태터툴즈의 경우 버전 3를 기준으로 많은 쿼리들이 작성되다 보니 느리다. 심지어 서브쿼리조차(부조회) 사용을 하지 못하는 것이다. 새로운 프로젝트에서는 태터와는 다른 제약이 있어 4나 5를 검토해 보았는데 결론은 5.1은 되어야 DBMS라고 부를만 하다는 것이었다. 그리고 현 상태에서는 5.0까지 정식으로 나왔고 5.1은 아직 베타이다.
혹자는 ProgressSQL이 더 좋다고 한다. 실제로 써보니 MySQL은 DBMS인가라는 생각만 들 뿐이다. 대학때 프로젝트로 만들었던 것과 차이가 별반 없어 보인다.
사실 나는 DBMS로는 무조건 MS-SQL 2000내지 2005를 써왔다. 그러다가 MySQL을 보니 지금까지 그런 환경에서 어플리케이션을 작성해 온 사람들에게 경의감 까지 들 정도이다. 5.1이 나오면 기능성이 만족 될지 모르겠지만 아직 3,4가 판을 치는 상황에서 당분간은 DBMS를 MySQL로 사용하기엔 아찔하다.

코드와 디자인의 분이. 요원한 소원
ASP의 훌륭한 점이라고 한다면 디자인과 코드의 분리를 어느정도 구현했다는 점이다.(아직 완벽한 것은 아니다.) 그리고 곧 나올 ATLAS를 보고 있는데 AJAX를 구현함에 있어서도 이런 특성을 십분 발휘할 수 있지 않을가 기대를 하고 있다. 허나 우리의 PHP군. 애시당초 그런게 고려되었을리 만무하다.
이런점이 왜 필요한가? 간단한 프로그램 작성하는데는 필요없다. 하지만 규모가 커지고 이쁘장함과 기능성이 둘다 중요해 지는 시점에서 혼자서 두마리의 토끼를 잡기는 힘들다. 설사 능력이 있다 하더라도 한곳에 집중하는 편이 좋다. 그리고 보통은 둘다 잘하는 사람은 드물다.(사용하는 뇌의 영역이 다른듯)
현재 웹 아키텍쳐를 설계함에 있어 디자인과 코드를 분리하는 문제는 심각하게 고려하고 있다. 여기서 PHP는 단독으로는 불가능하다. 뭔가 끼어 들어야 한다. 사실 어거지로 뭔가 넣어야 한다. PHP는 그러라고 탄생된건 아닌거 같기 때문이다.

명필이 붓을 가리지는 않지만..
현재 신규 프로젝트에서 APM을 택할 가능성은 높은 것 같다. 개인적으론 ASP.NET을 추천하였지만 역시 APM도 무시할 수 없고 오히려 그쪽으로 결정될 가능성이 높다라고 보고 있다. 위에서 언급한 기술적인 문제를 제외하곤 다른 분야에선 APM이 오히려 높은 점수를 받고 있기 때문이다. 특히 가격.
나야 나름대로의 환경에서 개발을 해내야 하고 그것이 나의 능력이 되어야 겠지만, APM은 아직 보완해야 할 부분이 너무나 많은 것으로 보인다. 장점이 엄청 많다지만 결정적으로 발목을 잡고 있는 것들이 있다.

PS. 마비노기에 보면 "게임이 너무 쉬우면 재미없습니다"란 말이 중간에 나온다. 프로그래밍 언어도 그런것 같다. 너무 쉬운것도 문제가 되나 보다.

PS2. 프로그래밍을 시작하면서 PHP를 쓰는건 좀 위험하지 않나 싶다. 가능하면 좀 엄격한 언어를 먼저 접하고 PHP로 오는게 좋지 않나 생각이 든다. PHP가 언제까지 지금의 인기를 유지할지도 모르기 때문이기도 하고 다른 언어로의 적응에도 문제가 될지도 모른다는 생각이다.

PS3. 개인적인 의견이니 절대적으로 믿지도 마시고 나름대로의 의견을 트랙백으로 걸어주시면 매우 감사하겠습니다.

'개발&Development > ' 카테고리의 다른 글

Professional Ajax  (1) 2006.03.30
네이버의 매쉬업?(Mash-up) : Naver OpenAPI  (1) 2006.03.27
펌, 불펌, 막펌  (1) 2006.03.16
도메인과 링크  (0) 2006.03.15
What women want  (0) 2006.03.10