2016/03/05

Zapary Chart의 시작


이전 글에서 잠깐 언급했던 내 장난감 차트인 Zapary Chart(zapChart)에 대해 역사 관리 차원에서 지금까지 진행된 것들을 정리해 보기로 했다. 시작은 이 글을 올릴 때 즈음이니까 아직은 1년이 안됐다.

하지만 호랑이 담배피던 시절까지 거슬러 올라가면 Chart 프로그램에 대한 나의 역사는 꽤 오래다. DOS 창에 c++로 그래프를 그렸던 시절이 있었기 때문이다. 마침 그 때 Windows 3.1이 나오는 바람에 DOS 창에서 돌아가는 프로그램은 의미를 상실했다. 머 전문 개발자도 아니고 실험실에서 모니터링을 위해서 만든 것이었는데 공부하기도 바빠서 그 프로그램은 당시에 모니터링 프로그램이 필요하다던 중소기업 부장 아자씨에게 주어 버렸다. 그리고, 그 즈음에 더 재미있는 장난감이 나왔는데, 그게 바로 리눅스였다. 초창기 리눅스 시절, 리눅스 가지고 별의별 장난을 하면서 잘 놀았다. 하지만 직장 생활을 하면서부터 리눅스나 프로그램 개발과는 멀어지게 돼 버렸다. 그런데 웃기는 건 세월이 지날 수록 리눅스를 쓰는 회사들이 많아졌다는 것이다. 물론, 대부분은 서버용이었다. 언제부터인가 Window는 VirtualBox에서 쓰고 우분투가 내 메인 데스크탑이 된 지도 오래다.

아무튼 각설하고... 몇 년 전부터 다시 Chart 프로그램을 완성하고 싶은 마음이 불현듯 솟아났다. 그리고 소시적 오픈 소스 갖고 놀던 기억들이 되살아 났다. 그래서 소일 거리로 Chart부터 만들자고 결심하게 됐다. 사실, 요즘은 Web에서도 Chart API 들이 많이 공개돼 있고, 속도도 문제가 되지 않으며, 모바일 차트 앱들도 꽤 있다. 더구나 오픈 소스 차트 프로그램도 많더라. 내 스스로도 머에 써 먹을려고 이걸 이제서야 만들겠다는 거냐고 물어 볼 때가 있다. 지금의 내 대답은 이거다. "의미없다. 걍 내 소중한 장난감일 뿐이다. My precious~!!!"

한 가지 위안을 삼고 싶은게 있다면 내 맘대로 지지고 볶고 할 수 있다는 것이다. 그래서 Zapary Chart에는 내 기본적인 생각들을 담아낼 수 있다. 내가 전문 개발자가 아니다 보니 프로그램을 잘 만들지는 못할 것이다. 하지만, 최소한 c++로 만들어진 기존의 오픈 소스 차트 프로그램들과는 다르게 동작할 것이다. 무엇보다 중요한 것은 장난감에 살을 붙여가는 재미가 꽤 쏠쏠하다는 것이다.

오픈소스로 개발해 볼까하는 맘도 없지 않았는데 당분간은 나 혼자 갖고 놀 것이다. 왜냐하면 더 훌륭한 오픈 소스 차트 프로그램도 많기 때문이다. 기본적으로 예전에는 wxWidgets 기반의 freechart를 개선해 보려고 했던 적도 있었는데 해 보다가 구조적으로 막히는 부분이 생겨 버려서 접었다. 새로 시작하는 김에 아예 Qt5를 배울 겸해서 Qt5로 만들고 있다. Qt 기반의 오픈 소스 차트 프로그램인 QCustomPlot도 훌륭한 편이다. 하지만 남들이 짠 프로그램을 소화해 내면서 내 생각을 집어 넣는 일은 생각보다 어려운 일이다. 더구나 나이를 먹을 수록 그게 힘들더라. 그래서 맘 편히 나만의 장난감을 만들기로 한 것이다.

zapChart는 사각형에서 시작했다. 마우스 이벤트 처리 부분이 생소했기 때문에 사각형에서 마우스 이벤트 처리 방식을 이해할 필요가 있었다. 이제 저 사각형들 안에 차트를 꾸겨 넣을 수 있게 되었다. 아직도 마우스 이벤트 처리부분이 깔끔하진 않다. 아무튼 ZapChart는 장난감이기 때문에 마우스로 장난칠 수 있어야 한다. 마우스가 되면 언젠가는 Touch도 당연히 될 것이다.

기본적인 Chart 골격을 만들었다. Grid 방식의 Layout과 다중 축을 지원한다. 한 화면에 무한대까지는 아니더라도 제한없이 Chart를 꾸겨 넣을 수 있다. 하지만 이제 시작일 뿐이다. 머리 속에는 집어 넣어야 할 기능들이 너무 많아서 어느 세월에 만들까하는 생각도 든다. 티끌모아 태산이다. 하나씩 살을 붙이다 보면 태산이 될 것이다.

그래서 Zapary Chart의 실체가 뭐냐... c++/Qt5 기반의 Chart Widget이다. Qt가 Multi-Platform을 지원하니까 이론상 OS나 기기에 상관없이 동작해야 할 것이다. Qt의 QGraphicsView / QGraphicsScene / QGraphicsItem Framework을 사용할까 하다가 그 자체도 복잡하단 생각이 들어서 내가 보기에 가능한 단순하게 만들고 있다. 우분투 환경에서 개발하고 있는데, 차트를 여러개 그려도 컴퓨터가 빨라서 그런지 금방금방 차트를 그려 낸다. 틈틈이 Chart에 대한 내 기본적인 생각들도 기억관리 차원에서 올릴 예정이다.

댓글 없음:

댓글 쓰기