Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- zustand
- polling
- 코딩 테스트
- 개발
- 프레임 워크
- Study
- react-query
- 개발자 도구
- useState
- prettier
- 비제어
- 개발자
- Pr
- Context API
- github
- frontend
- PullRequest
- package.json
- tailwind css
- 티스토리챌린지
- 오블완
- 가을 감성
- 협업
- form
- next.js
- CSS
- react
- js
- Fe
- eslint
Archives
- Today
- Total
ougi FE
Fetch와 Ajax, axios 이해하기 본문
728x90
저는 오늘 서버와 통신하는 방법들 중 몇가지를 소개하겠습니다 제가 오늘 소개하는 방법들은 모두 비동기 통신 방법입니다 일단 알아두면 좋은 지식이니 먼저 비동기와 그 반대인 동기가 무엇인지 먼저 살펴보겠습니다!
그림을 보면 동기 처리의 예시는 주문을 하고 음료를 받는 것까지 한명이 모두 끝날 때까지 기다려야 하지만 동기는 진동벨을 받고 여러 사람을 동시에 처리할 수 있습니다 요약하자면 동기는 순차적으로 작업을 수행하고 해당 작업이 수행중이라다음 작업은 대기하여야 합니다 반면에 비동기식은 요청이 들어오면 해당 작업이 끝나지 않았더라도 계속 요청을 받습니다
Fetch
- JavaScript에서 서버로 네트워크 요청을 보내고 응답을 받을 수 있도록 해주는 매서드입니다
- 기본 응답 결과를 따로 json으로 바꾸거나 text로 바꾸는 별도의 처리가 요구 되는 번거로움이 있습니다
- 내장되어 있으므로 별로도 import 해주지 않아도 됩니다
- 네트워크 에러 발생 시 계속 기다려야 합니다
- 구형 브라우저에서는 지원 하지 않습니다
- API 요청을 취소할 수 없습니다
- XMLHttpRequest와 비슷하지만 Fetch는 Promise를 기반으로 구성되어 있어 더 간편하다는 차이점이자 장점이 있습니다
- XMLHttpRequest란 웹 브라우저에서 서버와 비동기적으로 데이터를 주고받기 위해 사용되는 객체입니다
- Ajax의 가장 핵심적인 구성요소 입니다
- XMLHttpRequest객체를 이용하여 전체 페이지가 아닌 필요한 데이터만 불러오는 것이 가능합니다.
여기서 잠깐 일단 Promise란 무엇인지 간단하게 설명드리겠습니다
비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기로 다음 중 하나의 상태를 가집니다
- 대기(pending): 이행하지도, 거부하지도 않은 초기 상태
- 이행(fulfilled): 연산이 성공적으로 완료됨
- 거부(rejected): 연산이 실패함
Promise 연결
then
- 목적: Promise가 성공적으로 해결되었을 때 실행할 콜백 함수를 지정합니다
- 용도: 비동기 작업이 완료된 후 처리할 작업을 정의합니다
- 설명:
then
메서드는 Promise 객체가 해결되면(즉, 성공적으로 결과를 반환하면) 해당 콜백을 실행합니다then
은 새로운 Promise를 반환하므로 체이닝을 통해 여러 비동기 작업을 순차적으로 처리할 수 있습니다
try
- 목적: 예외가 발생할 수 있는 코드를 실행하기 위해 사용됩니다
- 용도: 예외가 발생할 가능성이 있는 코드를
try
블록 안에 작성합니다 - 설명: 코드 블록 내에서 예외가 발생하면, 즉시 실행이 중단되고
catch
블록으로 제어가 이동합니다
catch
- 목적:
try
블록에서 발생한 예외를 처리하기 위해 사용됩니다 - 용도: 예외 발생 시 이를 잡아서 적절한 처리를 수행하는 코드 블록입니다
- 설명:
try
블록에서 예외가 발생하면 해당 예외를 처리하기 위한catch
블록이 실행됩니다 여러 개의catch
블록을 사용할 수도 있으며 각catch
블록은 특정 예외 타입을 처리할 수 있습니다
finally
- 목적: 예외 발생 여부와 상관없이 항상 실행되어야 하는 코드를 작성하기 위해 사용됩니다
- 용도: 예외가 발생하든 발생하지 않든 실행되어야 하는 정리 작업을 수행하는 코드 블록입니다
- 설명:
finally
블록은try
와catch
블록의 실행 결과에 관계없이 항상 실행됩니다 주로 자원 정리나 파일 닫기, 데이터베이스 연결 종료 등과 같은 작업에 사용됩니다
사용법
일단 Fetch는 두개의 인자를 필요시 합니다
- URL (필수): 요청할 URL을 입력해줍니다
- 선택 매개변수 ex) method, headers, body 등등
코드 예시
fetch (URL,
method: 'POST', // HTTP 메서드 (GET, POST, PUT, DELETE 등)
header: {
'Content-Type': 'application/json', // 요청 헤더
},
body: JSON.stringify(), // 요청 본문 (POST, PUT 등에 사용)
credentials: 'include' // 자격 증명 포함 여부
})
.then(response => {
if (!response.ok) {
throw new Error('오류!!');
}
return response.json();
})
.then(data => {
console.log(data); // 서버로부터 받은 데이터를 처리합니다.
})
.catch(error => {
console.error(error);
});
axios
- 브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리입니다. (Promise 기반)
- 크로스 브라우징 기반( 다양한 웹브라우저에서 깨지지 않게 보이는 웹페이지 제작 기술을 얘기하는 것)
으로 브라우저 호환성이 뛰어납니다 - fetch에 존재하지 않는 기능이 많습니다. (자동으로 JSON 데이터 형식으로 변환, 요청 취소 및 타임아웃 설정 가능 등..)
- 따로 라이브러리를 설치 해야합니다
사용법
/* axios 라이브러리 설치 */
// npm 사용
npm i axios
// yarn 사용
yarn add axios
대표 메서드들
- GET : axios.get(url[, config])
- POST : axios.post(url, data[, config])
- PUT : axios.put(url, data[, config])
- DELETE : axios.delete(url[, config])
코드 예시
axios.post(URL)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
Ajax
- 자바스크립트를 사용한 비동기 통신, 클라이언트와 서버 간 데이터를 주고받는 기술입니다
- 전체 웹페이지를 다시 불러오는 동기 방식과는 다르게 점진적으로 해당 부분의 사용자 인터페이스를 갱신할 수 있습니다
- XMLHttpRequest객체를 이용하여 전체 페이지가 아닌 필요한 데이터만 불러오는 것이 가능합니다
- XMLHttpRequest가 사용되다가 불편함과 호환성을 이유로 jQuery 내에서 Ajax를 사용하는 것이 대세가 되었습니다
- jQuery는 자바스크립트를 간결하고 효율적으로 사용할 수 있게 해주는 라이브러리로, DOM 조작과 이벤트 처리 등을 쉽게 구현할 수 있습니다.
🎯 정리
간단한 HTTP 요청 처리, Vanilla JS로 통신, react-native에서는 Fetch가 좋다고 합니다 왜냐하면 빠른 업데이트 때문입니다 그리고 좀 더 많은 기능과 장점, 사용자 편의가 필요할 때 또는 react 환경에서는 axios가 훨씬 편리하다고 합니다 이 방법들을 확실히 숙지하여 적절히 잘 사용하셨으면 좋겠습니다
728x90
'JavaScript' 카테고리의 다른 글
[코딩 테스트] (제일 작은 수 제거하기) 나의 첫 코딩 테스트 트러블 슈팅!! ⚽(+ shift, sort, pop, splice, Math.min) (1) | 2024.09.28 |
---|---|
[JavaScript] Cropper.js가 뭘까? ✂️ (2) | 2024.09.11 |
[Formatter] ESLint가 뭘까?? (1) | 2024.09.06 |
Websocket💬이란?? (+Polling) (0) | 2024.08.23 |
[Web Storage] 💾LocalStorage, SesstionStorage 그리고 🍪Cookie까지 (0) | 2024.08.17 |