본문 바로가기

IoT Server 설계/Node.js

RESTful API 개념 및 node.js express 모듈 개념

본 포스팅에서는 지난 포스팅에서 설치한 node.js와 node 모듈중 하나인 express 모듈을 활용하여 RESTful API를 구현하기에 앞서 RESTful 에대한 개념과 node.js 에서 자주 사용되는 프레임웍인 express의 이론에 대해서 설명한다.


1. RESTful API 란?

: REST는 Representational State Transfer의 약자로, 월드와이드웹과 같은 하이퍼미디어 시스템을 위한 소프트웨어 아키텍쳐중 하나의 형식으로, REST 서버는 클라이언트로부터 HTTP 프로토콜을 사용해 서버 정보에 접근 및 변경을 가능하게 한다. (정보의 형식은 text, xm, json 등이 존재함.) 즉! REST란 어떠한 자원에 대해 CRUD (Create, Read, Update, Deltete) 연산을 수행하기 위해 URI (Resource)로 요청을 보내는 것으로 GET, POST 등의 메소드를 사용하여 요청을 보낸다. 이러한 REST API의 구성요소는 Resource, Method, Representation of Resource로 구성된다.


**URI와 URL의 차이점은?**

- URL (Uinform Resource Locator)은 인터넷 상 자원의 위치 (어떠한 파일의 위치)를 의미하지만 URI (Uniform Resource Identifier) 는 인터넷 상의 자원을 식별하기 위한 문자열의 구성으로 URI는 URL을 포함하게 된다.


[REST API 구성요소]

  • Resource
- 서버는 unique한 ID를 가지는 Resource를 가지고 있으며, 클라이언트는 이러한 자원에 요청을 보낸다. 이러한 Resource는 URI에 해당된다.
  • Method
- 서버에 요청을 보내기 위한 메소드로 GET, POST, PUT, DELETE가 존재하며 create, read, update, delete 연산을 수행하기 위해서 적절한 메소드를 사용하여 서버에 요청을 해야한다.

  • Representation of Resource
- 클라이언트와 서버가 데이터를 주고받는 형태로 json, xml, text, rss 등이 존재한다. 최근에는 key-value 형태의 json을 주로 사용한다.

가장 중요한 CRUD를 위한 REST 기반 아키텍쳐에서 자주 사용되는 메소드는 아래의 4가지가 존재한다.


  • GET (read)

- 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식

- URL에 데이터를 포함시켜 요청하며 데이터를 Header에 포함시켜 전송


  • POST (create)

- 데이터를 서버로 제출하여 추가 또는 수정하기 위해 데이터를 전송하는 방식

- URL에 데이터를 노출하지 않고 전송하며 데이터를 body에 포함시켜 전송
- body 전송으로 전송길이에 제한은 없지만 캐싱할 수 없음

  • PUT (update)
- 자원수정
  • DELETE (delete)

- 자원 삭제



2. node.js Express 란?


: 일반적으로 node.js 는 모듈을 사용한다고 할 수 있다. 모듈이라는 것은 어떠한 기능을 쉽게 사용하기 위해 만들어 놓은 것을 뜻하며, node의 경우에 자체적으로 모듈등이 들어가 있으며, 필요한 모듈을 다운받아서 사용하기 위해서는 npm 명령어를 활용해서 필요한 모듈을 다운받아 손쉽게 사용이 가능하다. 예를들어 http 모듈의 경우는 require('http'); 방식으로 활용이 가능하다. 이러한 모듈들 중에서 본 포스팅에서 배울 express는 node 상에서 동작하는 웹 개발 프레임웍 이라고 할 수 있다. 기본적으로 node에 내장된 모듈이 아니기 때문에 express를 사용하기 위해서는 

# npm install express -g

명령어를 활용해서 설치가 가능하다.



다음에 포스팅할 RESTful API 구현을 위해서는 Express 모듈이 필수적이다. 다음 시간에는 express를 활용하여 RESTful API 서버를 구현을 하겠으며, 메소드 중 GET 방식 활용이 가능한 API 서버를 구성하도록 하겠다.