Node.js request 모듈: HTTP 요청을 통한 API 사용하기

Node.js request 모듈

Node.js 에서 HTTP 요청을 보내 리턴 받는 모듈로 request 모듈이 사용 되었습니다. 사용법이 간단해 REST API 를 호출 하는 등의 작업을 쉽게 수행할 수 있습니다.

단, request 모듈은 2020년에 deprecated(사용 중단 권고) 상태가 되면서 업데이트, 유지 보수가 멈추어 다른 모듈의 사용을 권장하고 있습니다.

비동기 통신(Asynchronous communication)

비동기 통신(Asynchronous communication)

request 모듈은 기본적으로 Node.js 의 모듈 답게 비동기 통신을 행합니다. 비동기 통신은 요청과 응답이 동시에 이루어지지 않아도 되는 방식으로 요청 중에도 다른 작업을 동시에 진행할 수 있게 됩니다.

이로 인해 통신 중에도 웹 사이트가 멈추지 않고 동작이 가능하게 됩니다. 단, 이로 인해 순서대로 동작할 것으로 예상 되는 코드를 짜게 된다면 통신 중에 아래의 코드가 먼저 실행 되기 때문에 통신 이후 작업은 콜백 함수 내에 코드를 작성해야 합니다.

예를 들어 API 통신 이후 결과 값을 사용하려 할 때 콜백 함수 내가 아닌 통신 함수(request, fetch 등)의 함수 밑에 작성하게 되면 정상적으로 동작하지 않습니다.

Node.js request 모듈 사용 방법

먼저 npm 을 통해 모듈을 install 해줍니다.

npm install request
Bash

그 후 js 파일에 다음과 같은 코드를 작성하면 간단하게 사용이 가능합니다.

여기서 사용한 url 은 제가 애용하는 테스트용 REST API 제공 사이트 JSONPlaceholder – Free Fake REST API 입니다.

const request = require('request');

request('https://jsonplaceholder.typicode.com/posts/1', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body); // 웹페이지의 HTML을 출력합니다.
    } else {
        console.log("Error: " + error);
    }
});
JavaScript

그럼 다음 내용을 JSON 형태로 콜백 받아 출력 됩니다.

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
JSON

대안, 대체 모듈

위에서 언급 한 것과 같이 request 모듈은 더 이상 업데이트 되지 않는 모듈로 이후 보안, 호환 등의 문제를 발생 시킬 수 있어 최근엔 같은 기능을 하는 여러 인기 대체 모듈들이 존재하고 있습니다.

Axios

Promise 기반(비동기 통신이 끝나면 결과 값을 나타내는 객체)의 HTTP 클라이언트 입니다. 브라우저, Node.js 환경 모두에서 사용 가능 합니다. 해당 내용에 대해선 Node.js Axios 모듈: HTTP 요청으로 REST API 호출하기 포스팅에서 자세히 다루고 있습니다.

Fetch API

프론트엔드 영역의 Vanila JS 에서도 사용하던 API 입니다. Node.js 환경에서도 ‘node-fetch’ 라이브러리를 통해 사용할 수 있게 되었고 이 또한 Promise 기반으로 되어있습니다.

Got

Got 은 스트림 지원, Promise API, 요청 재시도와 같은 기능을 포함한 라이브러리 입니다.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
목차
위로 스크롤