#1. HTTP Client

1. HTTP Client

1) HTTP Client란?

  • URL을 통해 다른 웹 컨텐츠에 접속하여 내용을 가져오는 기술을 말한다.
  • URL이 웹 페이지인 경우 HTML 코드를 가져온다.
    • 웹 페이지가 실행되는 과정에서 JS에 의해 동적으로 변경되는 내용은 가져오지 못한다.
  • URL이 text, xml, json 인 경우 원본 내용을 가져온다.

 

2) 웹 브라우저에서의 HTTP Client

  • 웹 브라우저에서는 XMLHttpRequest 클래스를 통해서 같은 기능을 구현할 수 있다. (Ajax)
  • Ajax가 사용되면 페이지 새로고침 없이 다른 URL의 내용을 js 만으로 로딩해서 특정 DOM요소에 출력할 수 있게 된다.
  • 단, 웹 브라우저 자체의 CORS 제약으로 인해 현재 브라우저가 접근 하고 있는 html이 속한 도메인과 다른 도메인의 URL은 접근 불가능하다. (Ajax로는 해결 할 수 없다)

 

3) 백엔드에서의 HTTP Client

  • XMLHttpRequest가 아닌 일반 응용프로그램이 사용하는 Socket 통신 기술을 사용하기 때문에 어떤 도메인으로 접근 가능
  • Node.js 에서는 http 라는 내장 모듈을 사용하지만, 사용성이 다소 번거롭기 때문에 코드의 효율적인 작성을 위해 개선된 라이브러리가 사용되고 있다. → Axios
npm install --save axios

또는

yarn add axios

 

2. 서버에 접속하기

1) http 활용

  • Node에 기본 내장되어 있는 모듈 사용
// (1) 모듈참조
import http from 'http';

// (2) 접속할 서버의 호스트 이름과 요청 정보(path) 설정
const url = '접속할 서버의 주소';

// (3) GET 방식으로 접속하기 위한 객체 생성
const req = http.get(url, function(res) {
  // 응답이 수신되는 경우 (수신 데이터의 용량에 따라서 여러번 호출될 수 있다.)
  let resData = '';
  res.on('data', function(chunk) {
    resData += chunk;
  });

  // 응답 수신이 종료된 경우 (읽은 데이터를 처리한다.)
  res.on('end', function() {
    console.debug(resData);
  });
});

// (4) 접속객체에 error 이벤트 리스너 설정
req.on('error', function(err) {
  console.error(err);
  console.error('에러 발생: ' + err.message);
});

 

2) Axios 활용

  • Axios 라이브러리 사용
// (1) 모듈참조
import axios from "axios";

// (2) 접속할 서버의 호스트 이름과 요청정보(path) 설정
const url = '접속할 서버의 주소';

// (3) GET방식으로 접속하기 위한 객체 생성 (promise 방식)
axios
  .get(url)
  .then(response => {
    // 지정된 url의 컨텐츠를 성공적으로 가져온 경우 호출된다.
    // -> 응답을 성공적으로 수신했다고 표현함.
    console.log(response.data);
  })
  .catch(err => {
    // 지정된 url로의 요청에 실패한 경우 호출된다.
    // 에러 내용에서 상태코드(숫자)와 에러 메세지만 추출
    // [HTTP 상태코드] - 200(OK), 404(Page Not Found), 401(권한 없음, 로그인 필요), 403(접근금지, 폴더에 접속한 경우)
    //                 50x(접속 대상에서 에러가 나고 있는 경우)
    const errorMsg = `[${err.response.status}] ${err.response.statusText}`;
    console.log(errorMsg);
  })
  .finally(() => {
    // 성공, 실패 여부에 상관 없이 마지막에 무조건 호출된다.
    // 필요 없다면 이 부분은 구현하지 않아도 된다.
    console.log(':)');
  });

  console.log('Promise 방식으로 HTTP 요청');

 

3) async & await 활용

  • Axios와 async & await 사용
// (1) 모듈참조
import axios from "axios";

// (2) 접속할 서버의 호스트 이름과 요청정보(path) 설정
const url = '접속할 서버의 주소';

// (3) async/await 방식을 즉시 실행 함수 형태로 정의
(async () => {
  let result = null;

  try {
    const response = await axios.get(url);

    // 정상적으로 처리에 성공한 경우  promise 방식의 첫 번째 then 역할은 이 위치에서 자연스럽게 코드가 이어진다.
    // 첫 번째 then의 callback 함수에 전달되던 파라미터는 앞에서 리턴 받은 response
    result = response.data;
  } catch(err) {
    // 에러가 발생한 경우 실행되는 부분
    // promise 방식의 catch에 해당
    const errorMsg = `[${err.response.status}] ${err.response.statusText}`;
    console.log(errorMsg);
    return;
  }

  // promise 방식의 마지막 then은 뒷부분에 일반 코드로 작성한다.
  console.log(result);
})();

console.log('async & await + 즉시 실행 함수 방식으로 HTTP 요청');

'국비수업 > Node.js' 카테고리의 다른 글

[Node.js] Express  (0) 2022.06.29
[Node.js] HTTP Server  (0) 2022.06.28
[Node.js] Scheduler  (0) 2022.06.27
[Node.js] Log  (0) 2022.06.27
[Node.js] Event / File Input Output  (0) 2022.06.24

+ Recent posts