XMLHttpRequest라는 복잡한 객체를 사용했지만, 이제는 Fetch API라는 더 간편하고 강력한 표준 기능이 내장되어 있습니다.async/await와 함께 사용할 때 비동기 코드를 매우 깔끔하게 작성할 수 있습니다.fetch() 함수는 요청을 보낸 후, HTTP 응답을 나타내는 Response 객체로 이행되는 Promise를 반환합니다.
fetch('https://api.example.com/users')
.then(response => {
if (!response.ok) { // HTTP 상태 코드가 200-299가 아닌 경우
throw new Error('Network response was not ok');
}
return response.json(); // 응답 본문을 JSON으로 파싱
})
.then(data => {
console.log(data); // 최종적으로 파싱된 데이터
})
.catch(error => {
console.error('Fetch error:', error);
});
fetch()의 두 번째 인자로 options 객체를 전달하여, HTTP 메서드, 헤더, 본문(body) 등을 설정할 수 있습니다.
const newUser = {
name: 'Alice',
job: 'Developer'
};
fetch('https://api.example.com/users', {
method: 'POST', // HTTP 메서드 지정
headers: {
'Content-Type': 'application/json' // 보내는 데이터가 JSON 형식임을 명시
},
body: JSON.stringify(newUser) // JavaScript 객체를 JSON 문자열로 변환하여 전송
})
.then(response => response.json())
.then(data => console.log('User created:', data))
.catch(error => console.error('Error:', error));
JSON은 서버와 클라이언트 간에 데이터를 교환하기 위해 사용되는 경량의 텍스트 기반 데이터 형식입니다. JavaScript의 객체 리터럴 문법과 매우 유사하여, JavaScript 환경에서 다루기 매우 쉽습니다.
핵심 규칙:
key: value 쌍으로 이루어집니다."")로 감싸야 합니다.JSON을 제공합니다.JSON.stringify(object):
JSON.parse(string):
response.json() 메서드가 이 과정을 자동으로 처리해줍니다.)async/await를 이용한 실전 예제async/await 문법을 사용하면 Promise 기반의 fetch 코드를 동기 코드처럼 더 읽기 쉽게 작성할 수 있습니다.// 서버로부터 사용자 목록을 가져와 화면에 표시하는 함수
async function displayUsers() {
const userListElement = document.getElementById('user-list');
try {
// 1. API 요청을 보내고 응답을 기다림
const response = await fetch('https://jsonplaceholder.typicode.com/users');
// 2. HTTP 에러 처리
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// 3. 응답 본문을 JSON으로 파싱하고 결과를 기다림
const users = await response.json();
// 4. 받아온 데이터로 DOM 조작
users.forEach(user => {
const li = document.createElement('li');
li.textContent = `${user.name} (${user.email})`;
userListElement.appendChild(li);
});
} catch (error) {
// 5. 네트워크 에러나 파싱 에러 처리
userListElement.textContent = 'Failed to load users.';
console.error(error);
}
}
// 함수 실행
displayUsers();
async/await와 함께 사용하면 비동기 코드를 매우 간결하게 작성할 수 있습니다.JSON.stringify()를, 받을 때는 response.json() (내부적으로 JSON.parse() 수행)을 사용합니다.fetch 사용 시, response.ok를 확인하여 HTTP 에러를 처리하고, try...catch 구문으로 네트워크 에러를 처리하는 것이 중요합니다.