• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (328)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (14)
      • 리눅스 (5)
      • 자바 (75)
        • spring (7)
      • js (35)
      • 오라클 (39)
        • PLSQL (3)
      • cs (5)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • fetch
        2024년 09월 18일
        • chantleman
        • 작성자
        • 2024.09.18.:39

         

        동기 방식: 직렬적(순차적)으로 작업 수행.

        해당 작업이 수행중이면 다음 작업은 대기.

        서버는 한번에 많은 요청이 들어오고 동시에 많은 요청을 처리해야 하기 때문에 이러한 방식과는 맞지 않음

         

         

        비동기 방식: 병렬적으로 처리.

        요청이 들어오면 해당 요청에 의한 작업이 끝나지 않았더라도 계속 요청을 받고, 작업이 끝났다는 이벤트가 오면 해당 요청을 처리함

        예) Web API, Ajax, axios, setTimeout 등

         

         

         

         

        자바스크립트는 싱글 스레드 방식으로 하나의 스레드에서 모든 것을 돌려야함.

        비동기적 자바스크립트 동작을 하는 기술들을 통틀어 Ajax라고 하는데, Ajax를 이용해서 데이터를 불러오는 동안 다음 코드를 진행하는 것이 가능해짐

         

         


         

        Ajax( Asynchronous  Javascript And Xml)

        브라우저가 갖고있는 XMLHttpRequest객체를 이용해서 전체 페이지를 새로고침하지 않고 페이지의 일부만을 위한 데이터를 가져오는 기법

         

        기존 비동기 처리는 이벤트를 기반으로 하는  XMLHttpRequest API를 통해 통신을 주고받았지만 엄청 번거로운 작업이었음  

        이를 개선하기 위해 JQuery를 통해 구현하기 시작하다가

        이후 HTTP 요청에 최적화된 API들(Axios(XHR, Promise) , fetch(Promise))이 등장하면서 fetch API를 통해 통신하는 것이 주요 방식으로 자리 잡음

        서버에서 정보를 가져올 때 리액트처럼 페이지 전체를 새로고침하지 않아도 받아올 수 있음

         

         


         

        promise 객체

        자바스크립트에서 제공하는, 비동기를 간편하게 처리할 수 있도록 도와주는 객체

        미래에 발생할 일 또는 그 결과로서 비동기 작업 처리 결과를 반환하는 객체로 활용됨

        정해진 기능을 수행하고나서 결과에 따라 성공이나 실패에 대한 정보를 리턴

         

        fetch API는 promise와 함께 ajax를 쉽게 사용할 수 있는데, fetch가 반환값으로 가지는 것이 promise일만큼 promise는 네트워크 통신과 밀접한 연관이 있음

         

            let promise = new Promise(function(resolve, reject){
                //promise가 만들어지면 executor함수는 자동으로 실행됨
                setTimeout(()=>{
                    resolve("완료");
                },1000);
                //reject("실패");
            });
            
            
            promise
        	.then((rst)=>console.log("성공시 >> ", rst))
        	.catch((err)=>console.log("요청 실패시 >> ",err));

         

        promise 객체를 생성하면 두가지 콜백함수를 인자로 가지는 executor라는 콜백함수를 전달해야하는데,

        resolve - 해결, 이행, 완료시 결과를 표현하는 객체로서  .then()으로 처리결과 받음

        reject - 거부, 실패시 결과를 표현하는 객체로서 .catch()로 에러정보 받음

         

         

        결과 반환 전까지 3개의 상태를 거치는데, promise의 3개의 상태로는 아래와 같음

         

        - pending 대기 - 객체 생성 초기단계 / 비동기 작업 중 / 결과 값은 아직 없는 상태 

        - fulfilled 이행 - 비동기 작업 성공적 완료 / 결과 값이 있으며 사용 가능한 상태  →  resolve 메소드 호출

        - rejected 거부 - 비동기 작업 실패 / 에러정보 등 추가정보를 제공함

                       (TypeErr와 reject에 관한 내용만 표현, 400, 500은 catch대상이 아님 )  →  reject메소드 호출

         

         

         

        fetch() 함수는 첫번째 인자로 URL, 두번째 인자로 옵션 객체(get, post, put, delete ..)를 받고,

        promise 타입의 객체를 반환함

        	fetch(url, options)
        	.then((response) => console.log("response:", response))
        	.catch((error) => console.log("error:", error));

         

        반환된 객체는 API 호출이 성공했을 경우에는 .then 으로 resolve객체를 리턴받고, 실패했을 경우에는 .catch로 reject 객체를 리턴받음

         


         

        GET 요청

            fetch("https://jsonplaceholder.typicode.com/posts/1", { method: "GET" }).then(
              (response) => console.log(response)
            ); // 상태코드 및 Header에 대한 정보
        
            fetch("https://jsonplaceholder.typicode.com/posts/1")
              .then((response) => response.json())
              .then((data) => console.log(data)); //자바스크립트 객체 형식으로 변환된다.

         

        fetch()함수는 디폴트로 get방식으로 작동함

        대부분의 rest api 들은 json 형태의 데이터를 응답하기 때문에, 응답받은 response객체는 역시 json()메서드로 변형할 수 있다.

         

         

        POST 요청

            fetch("https://jsonplaceholder.typicode.com/posts", {
              method: "POST",
              headers: {
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                title: "Test",
                body: "I am testing!",
                userId: 1,
              }),
            })
              .then((response) => response.json())
              .then((data) => console.log(data))

         

        headers에는 부가적인 정보가, body에는 post로 보내는 데이터가 들어감

        headers에 json 형식을 사용한다고 알려주고, 그에 맞게 body의 본문 전체를 json 형식으로 바꿔줌

         

         

         

        PUT 요청

            fetch("https://jsonplaceholder.typicode.com/posts", {
              method: "PUT",
              headers: {
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                title: "Test",
                body: "I am testing!",
                userId: 1,
              }),
            })
              .then((response) => response.json())
              .then((data) => console.log(data))

         

        해당 url의 데이터를 수정하는 요청

        전체 데이터를 교체해버리기 때문에 부분만 수정하려면 update사용. 

         

         

         

        DELETE 요청

            fetch("https://jsonplaceholder.typicode.com/posts/1", {
              method: "DELETE",
            })
              .then((response) => response.json())
              .then((data) => console.log(data))

         

        해당 url의 데이터를 지워버리라는 요청

        보낼 데이터가 없으니 메소드만 명시해주면 됨

         

         


        • endpoint는 fetch에 넣는 url중 중복되는 부분을 변수에다 할당해서 중복을 줄이는 방법으로, endpoint를 위한 변수를 만들어서 주소를 할당하는 방식으로 쓰임

         

        • then, catch보다 async/await, try/catch를 사용하는 것이 최신 문법
        728x90

        'js' 카테고리의 다른 글

        async / await  (0) 2024.09.18
        XMLHttpRequest  (0) 2024.09.18
        setTimeout을 이용한 랜덤색상변경 예제  (0) 2024.08.29
        setTimeout(), setInterval()  (0) 2024.08.29
        팝업  (0) 2024.08.28
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바