커피 세 잔으로 BDD하기 – CoffeeScript, Mocha, Chai

😢 이 페이지는 다음 주소로 변경될 예정입니다.

CoffeeScript에 대한 얘기는 정말 많이 들었고 주변에서도 많이 사용하고 있지만 정작 제대로 살펴본 적이 없었다. 주말 시간을 내서 Better CoffeeScript Testing With Mocha 글을 중점으로 여러 아티클을 읽어보고 정리하는 차원에 남기는 포스트다.

이 모든 내용을 포스트 하나에서 다루기에는 각각의 내용이 방대하기 때문에 개론적으로만 읽고 각 소제목에 따른 더 읽을 거리를 참고 했으면 좋겠다.

BDD (Behavior-Driven Development)

BDD 즉, 행위/행동 주도 개발은 애자일 방법론 중 하나로 TDD와 인수 테스트 주도 계획(Acceptance Test-Driven Planning)에서 진화한 방법론이다. TDD를 한다는 본질은 다르지 않지만 사용자 스토리와 같은 인수 테스트를 기준으로 기획하게 된다.
Continue reading 커피 세 잔으로 BDD하기 – CoffeeScript, Mocha, Chai

Slack에서 Hubot 사용하기

😢 이 페이지는 다음 주소로 변경될 예정입니다.

최근에 #이상한모임 slack이 개설되었다. 순식간에 많은 분들이 가입해서 왕성한 활동 펼치고 있어 신기해 하는 한편 같이 휩쓸려(?) 잘 놀고 있다. 골빈해커님이 hubot으로 weirdbot을 만들어서 재미있는 기능들을 만드는 것을 보고 hubot을 어떻게 만들 수 있는지 찾아보게 되었다.

Hubot은 Github에서 공개한, 자동화를 위한 채팅봇이다. Node.js 기반에 CoffeeScript로 짜여져 있고 Heroku와 같은 곳에 손쉽게 디플로이 해서 활용 가능하며 확장도 간편하게 가능하도록 구성되어 있다. 또한 이미 많은 기능들이 구현되어 있어서 npm에서 hubot-script을 내려받고 설정하는 것으로도 강력하게 활용할 수 있다.

Slack은 협업을 위한 채팅 도구로 Github, Trello 등 다양한 Integration, 여러 체널의 Push notification 지원 등 편리한 기능을 많이 제공한다. 이전까지는 몰랐는데 내부적으로는 IRC로 구현되어 있는 모양이다. IRC에 친숙하다면 쉽게 적응해서 사용할 수 있을 정도로 유사한 부분이 많다.

Slack에서 Integration을 통해 Hubot을 추가하면 API키를 발급해줘서 쉽게 연동이 가능한데 무료 정책 내에서는 연동할 수 있는 서비스 수가 제한되어 있기 때문에 여기서는 IRC gateway를 활용했다. IRC Gateway는 보안상 기본 설정에서는 사용할 수 없다. 사용하려면 slack의 primary owner에게 요청해 기능을 사용할 수 있도록 활성화 해야 한다. 다만 이 gateway를 사용하게 되면 채팅방의 내용이 외부로 노출될 가능성이 있다는 요지의 안내를 받을 수 있는데 보안성에 민감한 slack이라면 이 방법보다 앞서 얘기한 hubot integration을 사용하는 편이 낫다.

이 글에서는 다음과 같은 방법으로 Hubot을 만들어 사용했다. (늘 그렇듯 OSX 기준으로 작성되어 있다.)

  • 로봇을 돌리기 위한, slack 일반 계정을 생성
  • IRC Gateway 사용
  • Heroku 사용

Slack 계정 생성하기

본인 그룹의 slack에서 IRC Gateway 사용이 가능하다면 로봇으로 상주시킬 계정을 새로 생성한 후 Account > Settings > Gateways 에서 Gateway Configuration 버튼을 눌러 Host, User, Pass 정보를 확인한다.

Hubot 설치하기

사실 이런 포스트 할 필요도 없을 정도로 Hubot 문서는 깔끔하게 잘 되어 있다. 먼저 기본적으로 nodejs는 설치되어 있어야 한다.

$ npm install -g yo generator-hubot
$ mkdir koalabot
$ cd koalabot
$ yo hubot

[yeoman](http://yeoman.io/) 제너레이터로 hubot을 생성할 수 있다. yo hubot 명령어를 입력하면 봇을 생성하는 인터프리터가 나타나는데 내용에 맞게 작성자, 봇 이름, 설명 등을 순차적으로 입력하면 된다. 여기서는 IRC Gateway를 사용하므로 adapter에는 irc을 입력하면 된다. 그러면 알아서 irc에 맞는 어뎁터가 설치된다.

yo hubot

여기서 unicode/ucsdet.h를 찾을 수 없다는 에러가 나타나면 다음 명령어로 command line developer tool을 설치한다.

$ xcode-select --install

이제 초기 생성이 끝났다. 이제 설치된 hubot을 shell adapter를 통해 콘솔에서 확인할 수 있다. hubot help를 입력하면 사용 가능한 명령어를 볼 수 있다.

$ bin/hubot --name <봇이름>

Heroku로 디플로이 하기

이제 heroku로 봇을 내보낼 차례다. heroku를 사용하기 위해서는 heroku에 먼저 가입을 해야 하고 heroku toolbalt를 설치해야 한다. 그리고 나서 생성한 hubot을 git에 커밋한다.

$ git init
$ git add .
$ git commit -m "Initial commit"

앞서 가입한 heroku를 heroku login을 통해 로그인하고 dyno라고 불리는 컨테이너를 생성한 후 환경설정을 한 다음에 앞서 만들었던 hubot을 내보내는 순서로 진행된다.

$ heroku login
# 앞서 가입한 정보로 로그인
$ heroku create
# heroku에 dyno가 생성됨, dyno 주소를 알려준다.

# 환경변수를 다음과 같이 지정하는데 서버, 닉네임, 비밀번호는 앞서 IRC Gateway에서의 정보를 입력해야 한다.
$ heroku config:set HUBOT_IRC_SERVER="<IRC Server>"
$ heroku config:set HUBOT_IRC_NICK="<IRC Nickname>"
$ heroku config:set HUBOT_IRC_PASSWORD="<IRC Password>"

# 자동으로 접속하게 될 방 목록을 `,`로 구분해서 입력한다.
$ heroku config:set HUBOT_IRC_ROOMS="#koala,#kangaroo,#melbourne"
$ heroku config:set HUBOT_IRC_UNFLOOD="false"
$ heroku config:set HUBOT_IRC_USESSL=1

# dyno가 생성될 때 알려준 주소를 입력한다.
$ heroku config:set HEROKU_URL=http://hot-koala-2015.herokuapp.com

# heroku로 git을 push하면 끝난다.
$ git push heroku master

Hubot 기능 추가하기

Hubot 스크립트 설치

hubot-scripts에 포함되어 있는 스크립트는 hubot-scripts.json에 추가하는 것으로 바로 사용할 수 있다. 사용 가능한 목록은 카탈로그 페이지에서 확인할 수 있다.

외부 스크립트 설치

외부 스크립트 설치도 지원한다. 다음은 hubot-thank-you를 설치하는 예로 아래와 같이 npm으로 설치한 후 external-scripts.json에 배열로 해당 스크립트명을 추가하면 된다.

$ npm install hubot-thank-you --save
# external-scripts.json을 열어서 "hubot-thank-you"를 json스럽게(...) 추가한다.

직접 만들기

직접 만들고 싶다면 scripts 폴더에 있는 example.coffee를 참고해 만들면 된다. 자세한 가이드는 Scripting 항목에서 볼 수 있다.


아무리 재미있는 도구들이 나와도 회사에서 적용하지 않는 경우엔 둘러보는 정도로 그칠 때가 많았는데 이 기회에 살펴볼 수 있어서 좋았다. CoffeeScript는 아직도 어색한데 익숙해질 수 있도록 좀 더 살펴봐야겠다.

Xaomi Power Bank 10400mAh 구입

😢 이 페이지는 다음 주소로 변경될 예정입니다.

아이폰을 과하게 쓰다보니 몇번 완충완방이 되었었는데 베터리 수명에 그렇게 큰 영향을 준다는 사실은 최근에야 알았다. 사무실에도 충전 케이블을 하나 비치해두기 시작해서 평일엔 그래도 괜찮은 편이지만 주말엔 정말 금방 베터리가 달아버려 불편했었다. 그러던 중에 Xaomi Power Bank가 평이 좋아 Aliexpress를 통해 하나 구입하게 되었다.1

내가 구입한 모델은 Xaomi Power Bank2 10400mAh이다. 자세한 스펙은 xaomi power bank 페이지 에서 확인할 수 있다.

  • 겉보기 보다 무겁다. 가방에 넣으면 가방이 묵직해지는 느낌이 들 정도.
  • 스펙으로는 iPhone 5s를 4.5회 충전이 가능하다고. 아직 그만큼 써보진 않았지만 묵직한 무게 탓인지 4.5회는 충분히 하고도 남지 않을까 싶다.
  • 모서리 마감이 날카로운 편. 케이스나 파우치 없이 쓰면 가방 안에 다른 물건에 흠집이 날 것 같아서 나는 두꺼운 테이프를 모서리에 둘러줬다. (덕분에 사제폭탄 느낌이 난다.)

매일 가지고 다니는 카메라 Ricoh GR도 베터리가 짧은 편이라 여행을 가거나 한다면 이 충전기 힘을 빌리게 될 것 같다.


  1. Aliexpress에서 10불 전후의 제품은 정품이 아니라길래 20불 전후인 제품으로 구입했다. 다행히 정품. 알리에서 구입했다. 
  2. 글을 적고 나서 한문 명칭이 궁금해 찾아보니 행동전원(行動電源)이다.