다시 만들기로 하였다 - ZF.js 개발기 #1

자바스크립트(Javascript) 이놈과 악연은 꽤나 오래된 거 같다. 코딩을 시작한 2003년 정도부터 웹퍼블리싱을 직접 하던 나는 PHP와 Flash-ActionScript와 더불어 꽤나 오랜 시간 작업해왔으니 말이다. 하지만 다른 언어와 달리 내가 이놈을 밉상으로 여기는 이유는 너무나 다양하지만 대표적인 이유는 Scope문제였다. 뭘 모르던 시절에는 자바스크립트 프로그래밍은 원래 그런 줄 알았다. 동일한 문제가 ActionScript2.0에도 있었기 때문이다. AS2.0은 태생이 Javascript를 베이스로 한 언어다 보니 양쪽 작업을 겸하던 나는 스크립트 언어는 당연히 이리저리 꼬이는 구조라 생각했다.

웬걸? ActionScript가 3.0으로 버전업 때 JAVA 베이스로 변경하면서 전혀 다른 언어가 되었고. AS3.0, PHP5, Javascript 이세가지 언어의 발전은 점점 다른 판도를 보였고 각 작업할 때마다 다른 접근 방식으로 프로그래밍을 하게 되었다. PHP는 PHP대로 난감한 구석이 있다지만 그래도 서버사이드다 보니 버전 및 셋업에만 신경 쓰면 다른 건 신경 쓸 것이 없었고, AS3.0은 버추얼 머신 베이스다 보니 작업에만 집중하면 되었지만, Javascript는 늘어나는 브라우저와 버전들 그리고 새로운 환경들 덕분에 하나의 루틴을 만들기 위해서 고려하고 분기 처리해야 할 것들이 나날이 늘어날 수밖에 없었다.
그래서.. 포기했었지..

그 후 어느 순간부터 본업이 AS3.0에 집중되었고 자바스크립트는 Helper수준으로만 사용하다 보니 별다른 문제 삼을 필요도 없어졌다. 그렇게 순탄하게 개발일을 하다가 어느 날 Flash 시장이 Apple에 의해 무너졌고 얼마 후 나 또한 개발 에이젼시 일을 접고 서비스 개발을 준비하다 보니 다시 자바스크립트를 만질 수밖에 없었다. 그전까지 각 언어별 프레임웍 작업에 익숙했던 나는 PureMVC / Codeigniter처럼 내 손에 잘 맞는 자바스크립트 프레임웍을 찾기 시작했다. Angular.js, React.js 등등 이리저리 찾아봐도 왠지 입맛에 맞지 않았고 결국 나는 JQuery를 기반해서 작업을 시작했지만 어느 순간부터 JQuery의 구조체 만으론 갈증을 느끼져 간단한 프레임웍을 만들어 쓰자고 결심하게 됐다.

ZF.js — Zero’s Framework 사실 말이 프레임웍이지 개인적으로만 사용할 요량이었고 웹서비스 빌딩 작업에 필요한 최소한의 구조만 구현하였다. AS3.0 작업을 오래 했던 나는 손에 익는 Event Model 구조와 PureMVC의 구조체를 자바스크립트에서 그대로 사용하고 싶었다. 서비스 개발을 진행하면서 그때그때 필요한 것들을 조금씩 수정 보안해가며 거의 2~3년 동안 이놈과 함께 작업한 것 같다.

몇 달 전부터 지인의 프로젝트를 같이 진행하게 되어 본격적으로 ZF.js를 활용해 Nginx, MariaDB, Codeigniter (PHP7), Bootstrap 들과 함께 두 달간 미친 듯 작업해서 R&D 단계를 넘어서 프로토타입 단계까지 진입하게 되었다. 사실 백오피스 빌딩 진행 중 프로젝트 템플릿만 두 번 정도 리팩터링 하게 되었고 워킹 프로세스도 많이 달라지다 보니 ZF.js도 리팩터링을 하였지만 부족함이 점차 나오기 시작했다. 그래서..

다시 만들기로 하였다.

마침 진행중인 프로젝트의 프로토타입도 어느 정도 나와주었고, 지인도 본업에 집중하는 타이밍이라 다음 벌크업을 위해서 이때 재정비를 해야겠다 싶었고 고민을 했다. 다시 Angular.js나 React.js로 건너갈까 싶었지만.. 사실 바벨이나 웹 팩 등으로 환경을 구축하거나 그것을 학습하기 위한 매몰비용을 생각하니 조금은 까마득해졌다. 나에게 필요한 건 무궁무진한 기능들이나 NPM 등의 확장 기능들보단 앞으로 내가 진행할 작업에서 손에 꼭 맞는 그런 프레임웍이 필요할 뿐이니까.

Front-End부터 Back-End를 왔다 갔다 작업하면서 느낀 점은 각 언어별로 다른 프레임웍을 쓰면 작업 전환할 때마다 머릿속 메모리를 리부팅해야 하는 느낌이 들다 보니 언어를 통일할게 아니라 빌딩 루틴을 맞추고 싶다는 생각이 들었다. 내 몸에 꼭 맞는 기성품이 없으면 조금 너덜너덜하더라도 직접 만들어 입는 것도 좋을 거 같았다.

ZF.js 이번에는 제대로 만들어서 향후 작업에 탄탄한 기틀이 되게 하고자 얼마 전부터 작업해서 오늘 기초 작업이 마무리 되었다. 아직 구현해야 할 부분들도 많고 언제 정식버전이 되어 배포까지(?)할 수 있을지 모르겠지만 그때까지 차근차근 일기 쓰듯 히스토리를 남기도록 해야겠다. 특히나 오늘 같은 날 무지 기분이 좋다. 삽질 끝에 프레임웍의 방향성이 결정되니 앞으로 작업들이 막연한 게 아니라 빨리 완성해서 이놈으로 웹서비스 만들 생각하니 벌써부터 재밌어진다. (나 변태인가;;)

  • 정형화된 클래스 상속과 인터페이스 구조체
  • Private, Public, Get/Set 간단한 구조체로 구현
  • 가상 인터페이스 및 가상 데이터 타입 지원
  • 버블링 이벤트 모델 및 이벤트 디스패처
  • 패키징, 컴파일 필요 없음 / 순수 자바스크립트 문법
  • Callback, Scope 문제 차단
  • MVC Framework / Notification Model

지금까지 처리된 내용들이다. 아직 몇 가지를 더 구현해야 하지만 이것들이 내가 기존 자바스크립트 프레임웍에서 만족하지 못했던 부분들이다 보니 ECMA 2016이 기본이 되는 날까지는 맘 편히 이놈으로 작업할 수 있을 거 같다. 언제 또 감성에 젖어서 후속 글을 적을지 모르겠지만, 차차 예전 버전과 신규 버전의 ZF.js의 제작과정들을 하나씩 정리하도록 해야겠다.

오늘은 여기까지!

Old - ZF.js
New - ZF.js