Fetch API / Axios / CORS
2025. 4. 27. 23:08
728x90
반응형

Fetch API

  • 웹 브라우저에서 HTTP 요청을 보내고 응답을 처리하는 기능을 제공하는 최신 API입니다. 
  • fetchJavaScript에서 HTTP 요청을 보내기 위한 내장 함수으로 비동기 방식으로 동작하며, 프로미스를 반환하여 비동기 처리를 보다 직관적으로 할 수 있게 해줍니다.
fetch('https://api.example.com/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: '홍길동',
    email: 'hong@example.com'
  })
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));

Fetch API's Response

  • fetch API가 반환하는 Response 객체는 HTTP 응답에 대한 메타데이터를 담고 있습니다. 
    • status : HTTP 상태 코드 (예: 404, 500 등)
    • statusText : 상태 코드와 관련된 설명 메시지
    • ok : 응답이 성공적인지 여부를 확인합니다 (status가 200-299 범위일 때 true)
  • 그러면 body (응답 데이터) 는 어디에 있는 걸까?
    • fetch는 기본적으로 응답 본문을 "텍스트"나 "바이너리 스트림" 형식으로 제공합니다.
    • 예를 들어, JSON 형식으로 응답을 받을 때, JSON 본문을 자동으로 파싱하면 그 파싱 과정에서 발생할 수 있는 오류를 처리하기 어려울 수 있기 때문에, 개발자가 직접 파싱 메서드(json(), text(), blob() 등)를 호출하도록 하는 것입니다.
async function logJSONData() {
  const response = await fetch("http://example.com/movies.json");
  const jsonData = await response.json();
  console.log(jsonData);
}

Axios

  • JavaScript에서 HTTP 요청을 보내기 위한 라이브러리
  • 내부적으로 XMLHttpRequest 또는 fetch를 사용하여 HTTP 요청을 보내고 Promise를 반환합니다.
  • fetch API보다 사용하기 쉽고 편리한 기능들을 제공합니다.
    • Axios는 응답이 JSON 형식이면 자동으로 JSON.parse()를 해주기 때문에, 응답 데이터를 쉽게 사용할 수 있습니다.
    • 요청과 응답을 가로채서 수정할 수 있는 기능을 제공하며, 예를 들어, 요청 전에 인증 토큰을 자동으로 추가할 수 있습니다.
    •  Axios는 요청에 대해 타임아웃을 설정할 수 있어 네트워크 상태가 좋지 않은 경우에 유용합니다.
    • Node.js와 브라우저 모두 지원: Axios는 브라우저뿐만 아니라 서버사이드(Node.js)에서도 동작합니다.
    • 이 외에도 다양한 기능을 제공합니다.

CORS ( Cross-Origin Resource Sharing )

  • 브라우저 보안 정책인 SOP(Same-Origin Policy, 동일 출처 정책)를 우회하기 위한 메커니즘입니다.
  • 즉, 출처가 다르면 리소스를 직접 요청하거나 응답을 사용할 수 없습니다. 이때 CORS를 통해 예외적으로 접근을 허용할 수 있습니다.
    • 출처가 다른 리소스를 요청하려고 하면, 브라우저는 자동으로 CORS 요청을 합니다.
    • 서버는 Access-Control-Allow-Origin 등의 헤더를 응답에 포함시켜야 합니다.
    • 브라우저는 응답의 CORS 허용 여부를 확인하고, 허용되지 않으면 JS에서 접근을 차단합니다.

Access-Control-Allow-Origin

  • 서버가 어떤 출처(origin)의 요청을 허용할지를 브라우저에게 알려주는 응답(Response) 헤더입니다.
  • 이 헤더가 없다면, 브라우저는 교차 출처 요청에 대해 응답을 스크립트에서 사용할 수 없도록 차단합니다.
  • 보안상 제3자가 쿠키까지 가져가면 안 되므로 credentials : true인 경우에는 * 사용 할 수 없습니다.
728x90
반응형

'javascript' 카테고리의 다른 글

JSDoc  (1) 2025.05.22
Code Design Pattern  (0) 2025.04.27
javascript 변수 : var / let / const  (0) 2025.04.18