Ruby가 핫한 트렌드로 자리 잡을 때 같이 급 부상했던 web framework이 있습니다. 많이 들어보셨을 것이라고 생각되는 Ruby on Rails입니다. 제가 직접 써보지는 않았지만, 이슈트래커로 유명한 redmine이라든가, github을 표방하는 gitlab도 이 rails를 기반으로 작성된 웹 어플리케이션입니다.


재밌게도 node 진영에서도 web framework을 하나 탄생했습니다. 네이밍 센스가 훌륭하다고 생각되는 sails입니다. 기차를 타고 떠나는 ruby와 배를 타고 떠나는 node가 되는 셈이군요.


오늘은 이 sails를 간단하게 리뷰해보고 정말 쉽게 RESTful API 서비를 command line 몇줄로 완성시켜 보겠습니다.


node가 깔려있는 환경이라고 가정하고 설명하겠습니다.


다음 명령을 통해서 sails를 설치하겠습니다.


# npm install -g sails


간단하게 설치가 끝납니다. 다들 아시겠지만 -g는 global로 설치를 하는 옵션입니다.


작업할 폴더로 이동후에 다음 명령으로 sails seed를 만들어봅시다.

root@59be8027f662:/app# sails new
info: Created a new Sails app `app`!


lift 명령을 통해서 sails를 띄워봅시다.

root@59be8027f662:/app# sails lift

info: Starting app...

info:
info:
info:    Sails              <|
info:    v0.10.5             |\
info:                       /|.\
info:                      / || \
info:                    ,'  |'  \
info:                 .-'.-==|/_--'
info:                 `--'-------'
info:    __---___--___---___--___---___--___
info:  ____---___--___---___--___---___--___-__
info:
info: Server lifted in `/app`
info: To see your app, visit http://localhost:1337
info: To shut down Sails, press <CTRL> + C at any time.

debug: --------------------------------------------------------
debug: :: Fri Nov 07 2014 15:30:25 GMT+0900 (KST)

debug: Environment : development
debug: Port        : 1337
debug: --------------------------------------------------------


배타고 떠나는 모양이 웃기네요. 웹브라우저를 열어서 접속할 주소를 알아서 맞추셔서 url을 입력하시면 다음과 같이 sails가 반겨줍니다.

sails_intro.png


sails를 ctrl-c로 잠시 멈추고 다음 명령으로 user라는 모델을 RESTful로 사용할 수 있도록 해보겠습니다.

root@59be8027f662:/app# sails generate api user
info: Created a new api!


믿기지 않겠지만 이제 user라는 object를 RESTful로 사용할 수 있게 되었습니다.

lift로 다시 sails를 띄워놓은 상태에서 curl을 사용해서 확인해보도록 하겠습니다.

우선 가져오기를 해봅시다.

root@59be8027f662:/app# curl http://localhost:1337/user
[]


입력한 user가 없으니 당연하게도 []로 빈 배열이 나옵니다.

이제 추가해보도록 하겠습니다.

root@59be8027f662:/app# curl -d "first_name=Jhon&last_name=Doe" http://localhost:1337/user
{
  "first_name": "John",
  "last_name": "Doe",
  "createdAt": "2014-11-07T06:43:32.337Z",
  "updatedAt": "2014-11-07T06:43:32.338Z",
  "id": 5
}


저는 이런 저런 테스트를 하느라 id가 5까지 올라갔네요. 아마 처음하시면 id가 1로 나올것입니다.

다른 테스트를 위해서 한명 더 추가해봅시다.

root@59be8027f662:/app# curl -d "first_name=Jane&last_name=Doe" http://localhost:1337/user
{
  "first_name": "Jane",
  "last_name": "Doe",
  "createdAt": "2014-11-07T06:44:38.373Z",
  "updatedAt": "2014-11-07T06:44:38.373Z",
  "id": 6
}


id 5번에 John Doe, 6번에 Jane Doe가 추가되었습니다.

전체를 가져와봅시다.

root@59be8027f662:/app# curl http://localhost:1337/user
[
  {
    "first_name": "John",
    "last_name": "Doe",
    "createdAt": "2014-11-07T06:43:32.337Z",
    "updatedAt": "2014-11-07T06:43:32.338Z",
    "id": 5
  },
  {
    "first_name": "Jane",
    "last_name": "Doe",
    "createdAt": "2014-11-07T06:44:38.373Z",
    "updatedAt": "2014-11-07T06:44:38.373Z",
    "id": 6
  }
]


훌륭합니다. 단 한줄로 이렇게까지 RESTful API 서비스를 구현할 수 있다니..


이제 id가 5번인 항목을 가져와보겠습니다.

root@59be8027f662:/app# curl http://localhost:1337/user/5
{
  "first_name": "John",
  "last_name": "Doe",
  "createdAt": "2014-11-07T06:43:32.337Z",
  "updatedAt": "2014-11-07T06:43:32.338Z",
  "id": 5
}


John의 성을 바꾸어 봅니다.

root@59be8027f662:/app# curl -X PUT -d "last_name=Smith" http://localhost:1337/user/5
{
  "first_name": "Jhon",
  "last_name": "Smith",
  "createdAt": "2014-11-07T06:43:32.337Z",
  "updatedAt": "2014-11-07T06:47:02.869Z",
  "id": 5
}


Jane을 삭제합니다.

root@59be8027f662:/app# curl -X DELETE http://localhost:1337/user/6
{
  "first_name": "Jane",
  "last_name": "Doe",
  "createdAt": "2014-11-07T06:44:38.373Z",
  "updatedAt": "2014-11-07T06:44:38.373Z",
  "id": 6
}


마지막으로 전체를 가져오면 다음과 같겠죠

root@59be8027f662:/app# curl http://localhost:1337/user
[
  {
    "first_name": "John",
    "last_name": "Smith",
    "createdAt": "2014-11-07T06:43:32.337Z",
    "updatedAt": "2014-11-07T06:47:02.869Z",
    "id": 5
  }
]


옛날에는 RESTful API 서비스도 만드는데 상당히 시간이 오래걸렸던 것 같은데, 너무나도 쉽게 만드니 한편으로는 허탈하네요.


여기까지 sails를 사용하여 아주아주아주 간단한 RESTful API 서비스를 만들어보았습니다.