인사이트 출판사에서 최근에 출간된 "쉽고 빠른 웹 개발 Django"를 읽다 문득 재미있는 실험이 하고 싶어 졌다. 이 책에 나오는 예제를 루비로 한번 만들어 보면 어떨까?
마침 이 책은 책 전체가 하나의 예제다. 소셜 북마킹이라는 주제로 웹 서비스를 만들어나가는 가운데 장고(Django)프레임워크의 주요 개념들을 적재적소에서 소개하는 방식을 취한다. 내 실험은 여기에 나온 파이썬 코드들을 모두 루비로 바꾸기만하면 되는 것이다. 한번 발동한 호기심은 좀처럼 끝 모르고 치닫더니 급기야 프레임워크의 선택에 까지 이른다. 뭘로 해 볼까?파이썬 진영도 그렇지만 루비 진영에도 훌륭한 웹 프레임워크가 여럿 나와 있다. 그 중 가장 인기있고 힘 센 놈은 단연 레일스(Rails) 겠지만, 이번에는 시나트라(Sinatra)라는 신예를 한번 기용해 보기로 하였다. 버전 번호가 비슷한 것도 이유가 되었지만(장고의 현재 버전이 1.1인 반면 시나트라는 이글을 쓰는 현재 버전이 0.9.1이다), 무엇보다도 둘 다 '딴따라' 출신이라는 점이 선택의 가장 큰 이유가 되었다. 장고는재즈 기타리스트인 장고 라인하르트(Django Reinhardt)의 이름을 땄다고 알려져 있고, 시나트라는 '마이웨이'로 유명한가수 프랭크 시나트라(Frank Sinata)의 얼굴이 그려져 있는 프레임워크이기 때문이다.
객체관계맵핑(ORM)을 사용한다는 점, 정규표현식을 사용하여 URL맵핑을 쉽게 할 수 있게 해 준다는 점, 구글앱엔진에서도 작동할수 있다는 점 등은 서로 비슷한 점이라고 하겠지만, 시나트라가 DataMapper, ActiveRecord, Sequal 등여러 가지 ORM 도구들을 골라 쓸 수 있는 반면 장고는 하나의 ORM만 제공하는 점, REST 기반 URL 맵핑이 조금 더쉬운 점 등에서는 시나트라가 조금 더 편리해 보였다.
그렇지만 결국은 장고의 손을 들어주어야 했다. 멋드러진 관리자(admin)기능이 자동으로 생성되는 거야 뭐 장고의 트레이드 마크니 그렇다손 치더라도, 장고에서는 프레임워크 차원에서 지원하고 있는캐싱(caching) 처리에 대한 지원 부분이 아직 시나트라에는 없기 때문이었다. 물론 시나트라는 루비 웹 표준 인터페이스라고할 랙(rack)에 기반하고 있어 랙 미들웨어인 Rack::Cache를 적용할 수는 있겠지만, 장고나 레일스 프레임워크에서 제공하는 소위 '서버측 캐시'라면 아직은 직접 구현하는 수 밖에 없다는 점이 아쉬웠다.
프레임워크의 무게는 프레임워크의 기능과 반비례하는 것 같다. 가벼운 프레임워크는 사용자에게 "감놔라 대추놔라" 하는 게 적어서입맛이 좋은 반면 그만큼 직접 처리해야 할 것들도 많아진다. 물론 갖출 건 다 갖추면서도 너무 무겁지도 또 너무 가볍지도 않은그런 프레임워크가 최고겠지만, 문제는 이 무거움의 정도가 받아들이는 사람들마다 그리고 진행해야 하는 프로젝트의 상황마다 다 다르다는 것이 아닐까.
아직은 신인인 시나트라가 장고처럼 음악을 열심히 익혀 다시 경연에 나올 날을 기대해 본다.
덧글