
예시)
https://example.com/users (사용자 리스트)https://example.com/users/123 (ID가 123인 사용자)URI는 동사가 아닌 명사를 사용
잘못된 예: /getUser, /updateUser
올바른 예: /users, /users/{id}
예시 ) https://www.example.com/path/resource
요청의 구성
요청 라인(Request Line)
예) GET /index.html HTTP/1.1
헤더(Header)
예)
Host: www.example.com
User-Agent: Mozilla/5.0
본문(Body)
{
"username": "john_doe",
"password": "1234"
}
응답의 구성
상태 라인(Status Line)
예) HTTP/1.1 200 OK
헤더(Header)
Content-Type: text/html
Content-Length: 1234
본문(Body)
<html>
<body>Hello, world!</body>
</html>
| 특징 | 동기통신 | 비동기 통신 |
|---|---|---|
| 요청 후 대기 여부 | 요청 완료까지 대기 | 대기하지 않고 다른 작업 수행 가능 |
| 처리 방식 | 순차 처리 | 병렬 처리 |
| 응답 속도 | 느릴 수 있음 | 더 빠르게 반응 가능 |
| 구현 난이도 | 상대적으로 쉬움 | 상대적으로 복잡함 |
| 예시 | 데이터베이스 연결, 파일 입출력 | AJAX, Promise, async/await |
then과 catch를 활용하거나 async/await로 비동기 요청을 처리할 수 있음import axios from 'axios';
axios.get('https://jsonplaceholder.typicode.com/posts')
.then(response => {
console.log('데이터:', response.data);
})
.catch(error => {
console.error('오류:', error);
});
import axios from 'axios';
async function fetchData() {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
console.log('데이터:', response.data);
} catch (error) {
console.error('오류:', error);
}
}
fetchData();
import axios from 'axios';
async function postData() {
try {
const response = await axios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'New Post',
body: 'This is a new post created with Axios.',
userId: 1
});
console.log('응답 데이터:', response.data);
} catch (error) {
console.error('오류:', error);
}
}
postData();
axios.get('https://jsonplaceholder.typicode.com/posts', {
headers: {
Authorization: 'Bearer your-token'
}
});
axios.get('https://jsonplaceholder.typicode.com/posts', {
params: {
userId: 1
}
}).then(response => {
console.log('필터링된 데이터:', response.data);
});
axios.defaults.baseURL = 'https://jsonplaceholder.typicode.com';
axios.defaults.headers.common['Authorization'] = 'Bearer your-token';
axios.get('/posts');
axios.interceptors.request.use(
config => {
console.log('요청 전 처리:', config);
return config;
},
error => Promise.reject(error)
);
axios.interceptors.response.use(
response => {
console.log('응답 후 처리:', response);
return response;
},
error => Promise.reject(error)
);
Promise를 사용then, 실패 시 catch로 처리.json())제공fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => {
if (!response.ok) {
throw new Error('네트워크 응답에 문제가 있습니다.');
}
return response.json(); // JSON 데이터로 변환
})
.then(data => {
console.log('데이터:', data);
})
.catch(error => {
console.error('오류 발생:', error);
});
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
if (!response.ok) {
throw new Error('네트워크 응답에 문제가 있습니다.');
}
const data = await response.json();
console.log('데이터:', data);
} catch (error) {
console.error('오류 발생:', error);
}
}
fetchData();
async function postData() {
const payload = {
title: 'New Post',
body: 'This is a new post created with fetch.',
userId: 1,
};
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST', // HTTP 메서드
headers: {
'Content-Type': 'application/json', // 요청 헤더
},
body: JSON.stringify(payload), // JSON으로 변환
});
if (!response.ok) {
throw new Error('네트워크 응답에 문제가 있습니다.');
}
const data = await response.json();
console.log('응답 데이터:', data);
} catch (error) {
console.error('오류 발생:', error);
}
}
postData();
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer your-token',
},
body: JSON.stringify({ title: 'Hello', body: 'World', userId: 1 }),
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('오류 발생:', error));
fetch의 응답은 Response 객체로 반환
Promise를 reject함=> 해결방법 : response.ok로 상태 코드 확인
if (!response.ok) {
throw new Error(`HTTP 오류! 상태 코드: ${response.status}`);
}
=> 해결방법 : AbortController사용
const controller = new AbortController();
const signal = controller.signal;
fetch('https://jsonplaceholder.typicode.com/posts', { signal })
.then(response => response.json())
.then(data => console.log(data))
.catch(error => {
if (error.name === 'AbortError') {
console.error('요청이 취소되었습니다.');
} else {
console.error('오류 발생:', error);
}
});
// 요청 취소
controller.abort();