Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

angular-summernote v0.2.3 릴리즈

전에는 개인 프로젝트를 해도 어떤 릴리즈 시점이 없이 하고 있었는데 최근에는 메인테이너로 있는 소소한 프로젝트가 있어서 릴리즈할 때 블로그에도 공유하기로 했다. 릴리즈 공지용 페이지를 따로 운영하기에는 너무 소소하고 그렇게 잦은 릴리즈를 할 것도 아니라서...

angular-summernote는 올 초에 summernoteangular.js의 인기에 업혀가려고 후딱 만들었던 프로젝트다. 이번에 며칠 간 작업을 해서 v0.2.3을 릴리즈 했다.

초기에 큰 이슈들만 처리하고 어느 정도 안정화가 된 상태에서 놔두고 있었는데 지난 5월부터 이슈가 가끔 올라왔는데 회사 일이 바빠서 처리를 못 하고 있었다. 최근에 사용하는 사람들이 약간 늘었는지 아니면 전에는 이슈를 좀 바로바로 처리하다가 몇 달씩 놔둬서 그런지 이슈가 쌓여가기 시작했고 언제 수정해 주느냐는 불평의 댓글도 올라왔다.(왠지 이런 댓글을 보니 더 처리하기 싫어지기도 했다.) 계속 처리 못 하고 있으니 몇몇은 자신이 어떻게 패치해서 수정하고 있는지 공유하는 훈훈한 광경도 나왔다.(그래도 풀 리퀘스트를 만들어서 보내주는 사람은 없더군.)

이번 수정에서는 버그픽스가 주 작업이었다.(그래서 버전은 패치버전만 하나 올렸다.) 가장 큰 버그가 onImageUpload시에 ngModel이 동기화되지 않는 현상이었는데 업로드는 테스트하기 어려워서 제대로 테스트 안했더니 모달팝업때문에 ngModel에 변경사항이 제대로 반영되지 않았다. 처음 만들 때는 summernote에 onChange 이벤트가 없어서 변경사항을 추적하기 위해서 keyup등의 이벤트를 추적해서 변경사항을 반영하고 있었는데 그 사이에 summenote가 v0.5.8로 올라오고 onChange 이벤트도 생겨서 일단 최신 버전에 맞게 코드를 고쳤다. 너무 오랜만에 만지는 거라 소스를 다시 파악할 필요가 있기도 했고...

onChange로 코드를 변경하고 나니(여기서도 고생을 꽤 했지만) onImageUpload를 적용해야 했는데 사실 이 부분은 로직은 금세 짰지만, 테스트를 짜는데 엄청나게 오래 걸렸다. summernote 자체의 코드는 모르기도 했고 karma에서 업로드동작을 구현하려니 이벤트가 발생하지 않아서 꽤 고생했다. 이것만 며칠 붙잡고 있었던 듯.. ㅠㅠ (사실 onImageUpload 리스너 테스트는 아직 작성하지 못했다. 아~ 파일 업로드 ㅠ)

버그를 다 수정하고 최신 기능 중 하나인 airmode 기능도 추가하고 새로운 버전을 릴리즈햇다. change log를 따로 관리하고 있기는 하지만 이젠 Github의 릴리즈 기능에서 change log를 관리해 주기 때문에 파일로 관리할 필요가 있나 생각 중이다.

이번 수정을 하면서 이슈도 완전히 털어버렸더니 기분이 상쾌하다. 작업을 시작한 김에 커버리지도 봐야겠다고 생각해서 Coveralls도 붙였다.(Github에서 코드 커버리지를 보여주는 Coveralls 참고) Coveralls 문서에서 몇 가지 플러그인을 안내하고 있는데 마친 Karma로 테스트를 작성하고 있어서 grunt-karma-coveralls를 사용했다. grunt-karma-coveralls는 karma-coverage에 기반을 두고 있는데(커버리지는 istanbul로 측정한다) 처음 써봐서 약간 시간이 걸렸지만 몇 가지 설정을 적용하니 커버리지를 측정을 연동할 수 있었다. 몇 줄 안 되는 코드이지만 충실히 테스트를 작성한 결과 90.57%의 커버리지가 나왔다.

Github README의 프로젝트 빌드 상태 배지

전에 오류 나던 Travis CI의 테스트도 해결돼서 배지가 모두 녹색으로 나와서 기분이 좋다.

덧) 릴리즈 공지를 쓰려고 한 거였는데 쓰고 보니 후기처럼 써버렸;;; ㄷㄷㄷ

2014/09/06 16:53 2014/09/06 16:53