'Tattertools'에 해당되는 글 1건

  1. 2007/05/31 호환성 유지하기 2

호환성 유지하기

머리아픈 이야기 2007/05/31 13:54 by daybreaker

좀 규모가 되는 프로그램들을 짜보신 분들은 알겠지만 하위 호환성을 잘 지원한다는 건 정말 어려운 일입니다. 이 일은 프로그램 자체 기능들의 하위 호환성을 유지하는 것과, 프로그램이 돌아가는 환경과 프로그램의 하위 호환성을 유지하는 것으로 나눠볼 수 있는데, 전자는 사실 그렇게 어려운 건 아닙니다. (물론 그 프로그램이 Windows 정도 되는 OS라면 또 얘기가 달라집니다만..)

문제는 후자의 경우입니다. 사실 태터툴즈가 굉장히 많은 버그를 떠안게 된 것도 그런 연유이죠. 사실 이 문제는 모든 '배포형 웹프로그램'에서 나타나는 현상입니다. 서버 환경 자체가 워낙 다양하기 때문에, 또 같은 환경(같은 php 버전, 같은 mysql 버전, ...)이더라도 설정을 어떻게 했느냐에 따라 동작이 달라지기도 하죠. (특히 php의 경우 그것이 두드러집니다)

PHP 5와 MySQL 4.1 이상 환경이 사실 처음 태터툴즈 소스를 만지게 된 우리가 가장 이상적으로 봤던 환경입니다. OOP도 좀더 제대로 사용할 수 있고, UTF-8 문자열도 문제없이 처리할 수 있고 등등요. (참고로 말하자면 MySQL 4.0과 4.1에서 꽤 많은 변화가 있었습니다. utf-8 지원도 그렇고, password 함수의 알고리즘 변경 등이 있었는데, 특히 password 함수가 바뀐 덕분에 제로보드와 호환성 문제가 발생하게 되어 많은 호스팅업체가 4.1 이상으로 넘어가지 않는 결과를 초래하고 말았죠. 사실 mysql 데몬을 띄울 때 옵션을 줄 수 있긴 합니다만..)

한때 내부에서는 태터툴즈를 Python으로 만드는 게 어떻겠냐는 의견도 나왔었습니다. PHP 언어의 한계나 인터프리터 구현의 버그 등으로 인해 우리 입맛에 맞게 쓰는 게 매우 힘들었죠. (특히나 OOP 방향으로 개발하면서 더욱 php에 실망을 많이 했습니다.) 제가 Python을 본격적으로 접하게 된 건 그보다 뒤의 일입니다만, 현재 만드는 사이트는 웬만하면 Python + Django 프레임웍 조합을 사용할 정도로 그 편리함과 깔끔함에 빠져 있습니다. (needlworks.org도 Django 기반입니다. 물론 아직 기능은 별 것 없지만...-_- 참고로 구글도 Python으로 많은 수의 웹페이지를 구성하고 있습니다. Django를 쓴다거나 그런 건 아니고 자체적으로 Python 및 웹서버 구조를 커스터마이징했을 거라고 추측됩니다.)
언어의 깔끔함이나 그런 걸 제쳐두고라도, Python의 경우 상당히 오랫동안 안정화가 되었기 때문에, 더 이용하려고 했던 점도 있습니다. (근본적인 언어 설계의 차이에서 오는 것도 크지요.)

그러나 Python의 Django, PHP의 CakePHP, Ruby의 Rails 등을 쓸 경우 가장 큰 문제는 배포입니다. 사이트 하나를 구축하기 위해서 사용할 때는 매우 편리한 환경을 제공하지만, 그 환경을 설정할 때 root 권한이 필요한 경우도 있고 웹서버의 설정을 건드려야 하는 경우도 있어서 배포용 프로그램에는 적합하지 않죠. 그 점에서만큼은 아직 PHP를 따라올 만한 것이 없습니다. (가장 많은 웹호스팅에서 지원하고 있기도 하구요.)

요즘 학교에서 Key 인증서버 구축을 완료한 덕분에 Windows Vista Enterprise 64bit용을 써보고 있는데, Microsoft가 독점이니 뭐니 해도 하위호환성만큼은 정말 잘 지켜내고 있다는 생각을 금할 수 없습니다. (물론 일반사용자 입장에서 보면 아니라고 할 수 있겠지만, 개발자의 입장에서 보면 정말 대단합니다.) 64비트 환경에서 32비트 프로그램을 실행할 수 있도록 모든 시스템 dll들을 32/64비트 버전을 따로 제공하고 있는 점, 기본으로 접근할 수 있는 Internet Explorer 7을 일부러 32비트용으로 해놨다는 점(Flash player 등은 아직 64비트에서 동작하지 않습니다) 등은 정말 Microsoft 급의 규모가 아니면 하기 힘든 일입니다. Windows 3.1에서 95로 넘어올 때 심시티 2000이 제대로 실행되게 하기 위해서 메모리 해제 함수를 특수 모드로 동작하게 했다는 이야기도 있죠.

Windows의 그 막강한 하드웨어 호환성도 Linux를 여러 번 설치해본 사람이라면 매우 부러워할 만한 부분입니다. 역설적으로 거의 독점하다시피 하는 Microsoft이기에 가능한 부분이기도 하죠. 얼마 전 동아리 서버가 뻑나서 새 CPU와 메인보드를 구입해 Linux를 설치하다가 호환성 문제로 3일 내내 삽질하고 쥐쥐쳤던 걸 생각하면 정말...ㅠ_ㅠ;

아무튼, 웹 환경에서 배포용 프로그램을 개발할 때의 가장 난점이 호환성입니다. 상위호환성은 거의 불가능하다 치더라도 하위호환성을 맞추는 것도 쉽지 않습니다. 태터툴즈의 경우는 PHP와 MySQL 버전이 낮은 환경에서도 잘 실행될 수 있도록 하기 위해 성능을 희생한 부분이 꽤 많습니다. (티스토리의 경우는 서비스이기 때문에 서버 환경을 마음대로 정할 수 있으므로 이런 부분에서 꽤 많은 성능을 끌어올린 것으로 알고 있습니다.) 개인적으로는 제로보드가 그 막강한 시장 영향력(?)을 잘 행사해서 웹호스팅 환경의 꾸준한 업그레이드를 유도해왔다면 훨씬 개발이 편했을 거라는 생각도 해봤지요.

개인사용자용 TextCube에서는 크게 고려할 만한 부분은 아니지만, 요즘 겐도님의 글최재훈님의 글을 보면서, 또 Vista를 쓰기 시작하면서 아키텍처와 호환성에 관해 이런저런 생각이 많이 듭니다. (Flickr가 PHP 4와 MySQL 4를 이용하고 있다는 점이 특히 놀라웠습니다. ^^;)

필자
author image
Daybreaker(아침놀)입니다. 현재 KAIST 전산학과에 재학 중이며 전산 외에도 물리, 음악, 건축 등에 관심이 많습니다. Needlworks 내에서는 각종 홈페이지 제작 및 서버 관리 등과 함께 Textcube 개발에 참여하고 있습니다.

홈페이지 : http://daybreaker.info

2007/05/31 13:54 2007/05/31 13:54