Node.js에서 외부 API를 호출하는 방법은 무엇인가요?
_____A1: Node.js 기본 내장 모듈인 `http` 또는 `https`를 사용할 수 있으나, 간편하게 사용하기 위해서는 `axios`, `node-fetch`, `request`(비권장) 같은 서드파티 라이브러리를 주로 사용합니다.
Q2: 내장 `https` 모듈을 이용해 GET 요청으로 외부 API를 호출하는 예시는?
A2:
```js
const https = require('https');
https.get('https://api.example.com/data', (res) => {
let data = '';
res.on('data', chunk => { data += chunk; });
res.on('end', () => {
try {
const json = JSON.parse(data);
console.log(json);
} catch (e) {
console.error(e.message);
}
});
}).on('error', err => {
console.error('Error: ', err.message);
});
```
Q3: `axios`를 사용하여 외부 API를 호출하는 방법은?
A3:
```js
const axios = require('axios');
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
```
Q4: POST 요청으로 외부 API에 데이터를 보내는 예제는?
A4:
```js
const axios = require('axios');
axios.post('https://api.example.com/data', {
key1: 'value1',
key2: 'value2'
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
```
Q5: Node.js에서 비동기로 `fetch` 함수를 사용하려면 어떻게 하나요?
A5: Node.js 18버전 이상에서는 공식 `fetch` API가 내장되어 있어 다음과 같이 사용 가능합니다.
```js
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
```
Node.js 버전이 낮을 땐 `node-fetch` 패키지를 설치해서 사용할 수 있습니다.
Q6: 외부 API 호출 시 헤더 등을 추가하고 싶으면 어떻게 하나요?
A6: `axios`의 경우 요청 옵션에 `headers` 객체를 추가합니다.
```js
axios.get('https://api.example.com/data', {
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
}
});
```
Q7: API 호출 시 타임아웃 설정은 어떻게 하나요?
A7: `axios` 사용 시, `timeout` 옵션을 밀리초 단위로 지정할 수 있습니다.
```js
axios.get('https://api.example.com/data', { timeout: 5000 })
.then(...)
.catch(error => {
if (error.code === 'ECONNABORTED') {
console.error('Request timeout');
}
});
```
Q8: 외부 API 호출 중 발생할 수 있는 오류를 어떻게 처리하나요?
A8: 네트워크 오류, 응답 코드 에러, JSON 파싱 오류 등을 `try-catch` 또는 `.catch()` 구문으로 처리하며, HTTP 상태 코드를 체크해 적절한 처리 로직을 구현합니다.
Q9: 외부 API 호출 결과를 JSON 형식으로 파싱하려면?
A9: 대부분의 라이브러리는 자동 파싱을 지원합니다(`axios`는 `response.data`, `fetch`는 `response.json()` 함수 사용). 내장 `https` 모듈 사용시엔 수신한 문자열을 `JSON.parse()`로 직접 변환해야 합니다.
Q10: 요청에 쿼리 파라미터를 추가하려면 어떻게 하나요?
A10: URL에 직접 `?key=value` 형식으로 붙이거나, `axios`에선 `params` 옵션을 사용할 수 있습니다.
```js
axios.get('https://api.example.com/data', {
params: { userId: 123 }
});
```
요약:
- 가벼운 내장 모듈부터 편리한 `axios`, `fetch`를 활용할 수 있습니다.
- 비동기 처리와 오류 핸들링에 주의하며, 필요 시 헤더, 타임아웃, 쿼리스트링 등을 설정합니다.
- 최신 Node.js는 내장 `fetch` API 사용이 가능해 점점 편리해지고 있습니다.
Node.js는 비동기 I/O 모델을 기반으로 하여 높은 성능을 제공하므로, 외부 API와의 통신에 적합합니다.
여기서는 Node.js에서 외부 API를 호출하는 방법을 다양한 라이브러리와 함께 설명하겠습니다.
1. 기본 HTTP 모듈 사용하기 Node.js는 기본적으로 `http`와 `https` 모듈을 제공합니다.
이 모듈을 사용하여 외부 API에 요청을 보낼 수 있습니다.
```javascript const https = require('https'); const options = { hostname: 'api.example.com', port: 443, path: '/data', method: 'GET', headers: { 'Content-Type': 'application/json', }, }; const req = https.request(options, (res) => { let data = ''; // 데이터 수신 res.on('data', (chunk) => { data += chunk; }); // 응답 완료 res.on('end', () => { console.log(JSON.parse(data)); }); }); // 오류 처리 req.on('error', (e) => { console.error(`문제가 발생했습니다: ${e.message}`); }); // 요청 전송 req.end(); ```
2. Axios 라이브러리 사용하기 Axios는 Promise 기반의 HTTP 클라이언트로, Node.js와 브라우저 모두에서 사용할 수 있습니다.
Axios는 사용하기 간편하고, 다양한 기능을 제공합니다.
설치 ```bash npm install axios ``` 사용 예제 ```javascript const axios = require('axios'); axios.get('https://api.example.com/data') .then((response) => { console.log(response.data); }) .catch((error) => { console.error(`문제가 발생했습니다: ${error.message}`); }); ```
3. Fetch API 사용하기 Node.js 18버전부터는 Fetch API가 기본적으로 지원됩니다.
Fetch API는 브라우저에서 사용되는 것과 유사한 방식으로 HTTP 요청을 처리할 수 있습니다.
사용 예제 ```javascript const fetch = require('node-fetch'); // Node.js 17 이하에서는 설치 필요 fetch('https://api.example.com/data') .then((response) => { if (!response.ok) { throw new Error('네트워크 응답이 좋지 않습니다.
'); } return response.json(); }) .then((data) => { console.log(data); }) .catch((error) => { console.error(`문제가 발생했습니다: ${error.message}`); }); ```
4. Request 라이브러리 사용하기 Request 라이브러리는 HTTP 요청을 간편하게 처리할 수 있도록 도와주는 라이브러리입니다.
하지만 현재는 더 이상 유지보수되지 않으므로, 새로운 프로젝트에서는 Axios나 Fetch를 사용하는 것이 좋습니다.
설치 ```bash npm install request ``` 사용 예제 ```javascript const request = require('request'); request('https://api.example.com/data', { json: true }, (err, res, body) => { if (err) { return console.error(err); } console.log(body); }); ```
5. 비동기/대기 패턴 사용하기 비동기/대기 패턴을 사용하면 코드가 더 깔끔해지고 가독성이 좋아집니다.
Axios와 Fetch API 모두 Promise를 반환하므로, async/await 구문을 사용할 수 있습니다.
Axios 예제 ```javascript const axios = require('axios'); async function fetchData() { try { const response = await axios.get('https://api.example.com/data'); console.log(response.data); } catch (error) { console.error(`문제가 발생했습니다: ${error.message}`); } } fetchData(); ``` Fetch API 예제 ```javascript async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error('네트워크 응답이 좋지 않습니다.
'); } const data = await response.json(); console.log(data); } catch (error) { console.error(`문제가 발생했습니다: ${error.message}`); } } fetchData(); ``` 결론 Node.js에서 외부 API를 호출하는 방법은 다양하며, 사용자의 필요에 따라 적절한 방법을 선택할 수 있습니다.
기본 HTTP 모듈을 사용할 수도 있지만, Axios나 Fetch API와 같은 라이브러리를 사용하는 것이 더 간편하고 효율적입니다.
비동기/대기 패턴을 활용하면 코드의 가독성을 높일 수 있으므로, 이를 적극적으로 활용하는 것이 좋습니다.
작성자:
이주희 [비회원]
| 작성일자: 1년 전
2024-09-13 05:21:38
조회수: 219 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 219 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.