프로젝트 1일: 웹 브라우저 JS 테스트 환경

나는 30일간의 안식휴가 중이다. 오늘은 그 첫날이다.

근무하는 회사는 여러모로 개발자로 일하기에 참 좋은 환경을 갖추고 있다. 그중에서도 가장 감사한 것은 “안식 휴가 제도”다. 직원들이 근속연수와 상관없이 매년 15일의 유급 휴가를 사용할 수 있고, 추가로, 3년마다 안식휴가를 준다. 3년 근속 시 10일, 6년 근속 시 30일, 그리고 9년 근속 시 60일의 유급 휴가를 준다. 9년 차 안식휴가의 경우, 30일씩 두 번에 나누어 사용할 수 있고, 나는 9년 차 안식휴가를 30일로 나눠서 사용 중이다.

30일 동안 무엇을 할까? 대개의 직원은 여행을 가는 경우가 많지만, 내 경우에는 이번 휴가의 주요 목표는 육아 지원이다. 이제 100일 남짓 된 딸아이 육아를 돕는 것이 핵심 목표이고, ‘조금’ 남는 시간에 무엇을 할지 고민해봤다. 고민의 결과, 30일 동안 개발 프로젝트를 하나 진행해 보자고 마음먹었다. 업무로써의 개발이 아니라, 그저 흥미로운 개발 말이다. 수익을 고려한 개발이 아니라, 그저 해 볼 만한 생각이 들어서 하는 개발을 해보자.

그동안 관심 있었던 기술 요소나 도구들을 나열해보고, 그걸 공부하며 연습해보는 기회로 삼는 것도 좋겠다. 30일이 끝날 즈음에 괜찮은 결과물이 나오면 더할 나위 없이 좋겠지만, 혹여 별달리 내세울 만한 결과물이 나오지 않더라도, 관련 기술을 학습하고 정리해보는 것만으로도 의미가 있을 것 같다.

그동안 새로 알아보고 싶거나 더 본격적으로 써보고 싶었던 주제의 키워드이다.

node.js, express, angular.js, karma, jasmine, bower, coffeescript, git, libgit2, lxc/docker, travis-ci, objective-c

머릿속에 한가지 연습용 개발 아이템이 떠올랐지만, 개발을 진행하면서 언제든 바뀔 수 있는 터, 차차 공개하기로 하고, 오늘은 일단 관련 기술을 공부하기 시작한다.

개인적으로 개발 프로젝트에 있어 가장 중요하게 생각하는 것은 자동화 테스트다. Test-Driven이나 Behavior-Driven, 그중 어떤 용어를 쓰든, 그리고 테스트를 먼저 작성하든 나중에 작성하든 그건 내게 중요치 않고, 될 수 있는 대로 테스트 커버리지가 높은 것을 중요하게 생각한다.

소프트웨어는 한번 설계하고 만들고 끝나는 완성품이 아니라, 늘 지속해서 개선하는 과정의 산물이다. 늘 개선할 수 없다면 좋은 소프트웨어나 웹서비스가 될 수 없다. 지속해서 개선하기 위해서 필수적인 것이 자동화한 테스트이다. 일일이 손으로 테스트해야 한다면, 지속적인 개선은커녕 작은 버그 수정조차 어려워진다.

서버사이드의 테스팅 프레임워크는 몇 가지 익숙하거나 염두해 둔 것이 있는데, 웹 브라우저 측의 자바스크립트 테스팅 프레임워크는 익숙한 것이 없다. 조금 찾아보니, Jasmine이라는 자바스크립트 테스팅 프레임워크가 쓸만한 것 같고, Karma라고 자바스크립트 테스팅 프레임워크를 실행해주는 ‘테스트 러너’가 눈에 띄었다. Karma 입장에서는 사용하고자 하는 자바스크립트 테스팅 프레임워크가 Jasmine, qunit, 또는 mocha등 무엇이든 상관없이 실행해주는 도구다. 그런데, 말이야 쉽지, 이게 과연 무슨 얘긴지 실체를 보기 전이라 잘 이해가 되지 않았다.

OK, 오늘은 이걸 우선 공부해보자. 이걸로 테스트 돌리게 세팅해 놓고, Jasmine으로 자바스크립트 유닛 테스트를 돌리는 것을 1차 목표로 삼고 출발.

반나절의 삽질 끝에 [express] 프로젝트를 하나 만들어서 Karma를 실험해 볼 준비를 마쳤다. 그리고 Jasmine을 처음 사용해서 기본으로 들어있는 유닛 테스트를 돌려보았더니 이제야 감이 좀 왔다.

그러니까, Jasmine은 웹 브라우저에서 각종 자바스크립트 유닛테스트를 돌리는 프레임워크고, Karma는 그 작업을 터미널에서 하는 것처럼 보여주는 도구였던 게다. 터미널에서 karma start를 실행하면 해당 프로젝트의 karma.conf.js를 읽어서 관련 있는 유닛테스트를 돌려준다. 대상 소스 파일이 바뀌거나, 테스트 파일이 바뀌어도 관련 유닛 테스트를 재실행 주는 시스템.

일단은, 루비 환경의 Guard와 비슷한 느낌이다. 차이가 있다면, Karma가 크롬 브라우저를 띄워서 테스트를 실행해주고, 결과를 터미널에 보여준다는 것.

호오~ 괜찮은데? 브라우저에서 일일이 테스트 돌리는 페이지를 리로드하는 게 아니라, karma가 필요한 일을 대신해준다, 크롬이나, 사파리 등 원하는 브라우저를 띄워서. 웹 UI에서의 js테스트를 위해 잘 활용해 봐야겠다.

오늘은 여기까지.

[express]: http://expressjs.com/

30일 프로젝트 글목록