레이블이 REST API인 게시물을 표시합니다. 모든 게시물 표시
레이블이 REST API인 게시물을 표시합니다. 모든 게시물 표시

2015년 3월 20일 금요일

REST API 테스트를 위한 HTTP 클라이언트 앱


Windows와 Linux에서 쉽게 사용할 수 있는 free HTTP Client app 중 가장 대표적이며, 추천할 만한 것은 Command Line Interface(CLI) 툴인 curl과 Chrome 브라우저의 app인 DHC 이다. 초기에 DHC를 사용하다가 curl 코드를 이용해 script를 만들어 자동화된 테스트를 수행하는 것이 좋다.

1. curl

가장 널리 사용되는 REST API 테스트를 위한 HTTP client app으로 가장 대표적인 것은 curl이다. curl은 CLI 툴로 HTTP만이 아니라 HTTPS, FTP, SSL 등을 지원한다. CLI 툴이기 때문에 쓰기 불편할 수 있지만 script 형태로 많은 테스트 케이스를 정의하여  자동화된 테스트를 수행하기 용이하다.

curl 다운로드


2. DHC Chrome 앱

Chrome App이며, REST API 테스트에 최적화된 GUI 툴이다. 직관적으로 사용할 수 있으며, HTTP URL, method, Header, body를 customize할 수 있고, 그 값을 저장할 수 있다. 또한 프로젝트나 서비스 단위로 테스트 세트를 구성하여 재사용하는 것도 용이하다. 설정을 기억함에도 불구하고, 많은 테스트 케이스를 자동으로 수행하는 기능은 제공하지 않는다. 테스트 케이스를 만들면, curl 코드가 자동으로 생성된다.

DHC 앱 설치 










2015년 3월 18일 수요일

Hapi.js + MongoDB (on Windows)

Hapi.js와 MongoDB를 붙여서 사용하는 예제가 없거나, 제대로 실행이 되지 않는 경우가 많고, 특히 Windows에 대한 내용은 극히 적어 그 방법을 정리해 본다.
아래의 예제는 schema가 없거나 훨씬 자유로운 경우이며, 좀더 schema를 갖추어 MongoDB와 연동하는 경우는 Mongoose를 사용한다.
Mongoose는 다음에 다시한번 다루어보자.


1. OS가 32bit인지 64bit인지 확인

1) 아래의 방법으로 command prompt를 실행시킨다.

  • Win7: Windows key + 'R'을 누르고 'cmd'를 입력한 후 Control+Shift+enter key를 눌러 실행
  • Win8: Windows key + 'X'를 누른 후 'A' 키 입력 


2)command prompt를 열어 아래 명령을 입력하여 32bit인지 64bit인지 확인한다.

> wmic os get osarchitecture


2. Windows 버전 MongoDB 설치

MongoDB download site에서 적합한 version의 MongoDB 설치 파일을 다운받는다. 32bit의 경우 최신 버전에서 지원안할 경우, 이전 버전(Previous Release)을 설치한다.


3. MongoDB를 Windows 서비스로 등록

1) 아래의 방법으로 command prompt를 관리자 모드로 실행시킨다.

  • Win7: Windows key + 'R'을 누르고 'cmd'를 입력한 후 Control+Shift+enter key를 눌러 실행
  • Win8: Windows key + 'X'를 누른 후 'A' 키 입력 

2) 관리자 모드로 MongoDB data와 log를 저장할 folder를 만든다. 여기서 folder위치는 D:\data라 가정하자.

> mkdir D:\data\db
> mkdir D:\data\log


3) MongoDB configuration file을 만든다. 아래와 같이 command prompt에 입력한다. 이때 mongoDB가 설치된 위치를 C:\Program Files\MongoDB Standard라고 가정한다.

>echo logpath=D:\data\log\mongod.log> "C:\Program Files\MongoDB Standard\mongod.cfg"
>echo dbpath=D:\data\db>> "C:\Program Files\MongoDB Standard\mongod.cfg"


4) Windows 서비스로 등록한다. 여기서 주의할 것은 =와 그 뒤의 값(" ") 사이에 여백 한칸이 반드시 필요하다는 것이다.

>sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB Standard\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB Standard\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

위의 과정을 모두 마치면 아래와 같은 메시지가 command prompt에 나타난다.

[SC] CreateService 성공


5) 아래 명령을 통해 MongoDB(서비스 이름)가 시작하도록 해보자.

>net start MongoDB


참고로, 서비스를 제거하는 것은 아래 명령을 사용하면 된다.

>sc.exe delete MongoDB


6) 폴더를 하나 만들고, 간단한 node.js 코드를 구현해 MongoDB에 연결을 해보자.

아래와 같이 mongodb 모듈을 설치한다.
>npm install --save-dev mongodb

아래 코드를 index.js 파일에 구현한 후 'node index'로 실행시킨다.



MongoDB에 연결되면 'We are connected'라는 메시지를 볼 수 있다.



지금부터는 MongoDB와 hapi.js를 이해하기 위한 sample 예제이다.

4. 사용할 database와 collection 만들기 

db명을 'taskdb'이고 collection명을 'tasks'라고 가정한다.

1) mongo.exe를 실행한다.

>cd C:\Program Files\MongoDB Standard\bin
>mongo.exe

2) 사용할 database를 생성한다.

mongodb prompt>use taskdb

3) collection을 만들며, 값을 추가한다.

mongodb prompt>var i = {task : "send an email to my boss", description : "CC colleagues"}
mongodb prompt>var j = {task : "submit the paper", description : "Hurry!"}
mongodb prompt>var k = {task : "attend the daily meeting", description : "Room 3"}
mongodb prompt>db.tasks.insert(i);
mongodb prompt>db.tasks.insert(j);
mongodb prompt>db.tasks.insert(k);

다음 명령을 통해 collection이 잘 생성되고 값이 잘 추가되었는지 확인한다.

mongodb prompt>show collections
mongodb prompt>db.tasks.find()


5. sample Hapi.js + mongoDB 코드 

1) 빈 folder를 만들고 hapi project를 만든다.

>npm init
>npm install --save-dev hapi boom joi hapi-mongodb


2) 아래 예제 코드를 이용해 index.js를 구현한다.




6. 테스트

command prompt를 이용해 잘 동작하는지 확인한다.

>curl http://localhost:8080/tasks"
>curl http://localhost:8080/task/xxxxxxx
>curl -X POST -H "Content-Type: application/json" -d "{\"task\":\"Fix bug 1\", \"description\":\"Absolute\"}" -i http://localhost:8080/tasks
>curl -X DELETE http://localhost:8080/tasks/xxxxxxx -i

위에서 POST 명령의 경우 Linux에서는 아래와 같이 실행한다.
>curl -X POST -H "Content-Type: application/json" -d '{"task":"Fix bug 1", "description":"Absolute"}' -i http://localhost:8080/tasks



TL;DR

Hapi와 MongoDB를 windows에서 한번 돌려보자. 앞으로 hapi.js를 공부하기 위한 기본 틀 역할을 한다.





<참조>
1. BUILDING A REST API USING HAPI.JS AND MONGODB
2. hapi-mongodb: A simple Hapi MongoDB connection plugin
3. Getting started with MongoDB and node.js on Windows
4. Install MongoDB on Windows
5. Getting Started with MongoDB

2015년 3월 16일 월요일

REST API 구현을 위한 hapi.js와 express.js의 초간단 비교

REST API 서버 구현을 위해 node.js를 검토한다면 node.js 단독으로 사용하기 보다는 REST API 구현을 도와주는 모듈을 함께 사용하는 것이 좋다. 가장 많이 사용되는 모듈은 단연 express.js이다. 지원하는 plugin 수에서도 압도적이고, 인터넷 상의 문서도 많다. MEAN stack처럼 하나의 package로 사용하는 경우도 많아 자연스럽게 express.js가 검토된다.
hapi.js는 express.js에 비해 넓게 쓰이고 있지 않은 반면 매우 강력한 강점을 가지고 있다. 매우 직관적이고 구조화된 mapping을 하고 있다는 것이다. 소위 ‘configuration over code’라는 장점을 가지고 있는 것이다. 이것만으로도 express.js가 아닌 hapi.js를 써야 할 이유가 있다고 생각한다.
다음은 express.js를 통해 routing을 하는 예이다.

위의 코드를 보고 직관적으로 어떤 URL이 어떤 handler에 연결되어 있는지 파악하기 쉽지 않다.
아래 hapi.js를 통해 동일한 동작을 하는 코드를 살펴보자.

hapi.js를 사용한 코드가 express.js에 비해 path와 handler의 mapping관계를 직관적으로 보여준다.
hapi.js 홈페이지의 getting started는 내용이 너무 부족하다. hapi.js에 대해 잘 알 수 있는 관련 문서도 많지 않다. 앞으로 참고할만한 hapi.js 관련한 자료를 만들어 보자



참고
Node.js Framework Comparison: Express vs. Koa vs.Hapi