티스토리 뷰

Dev/Slack_clone

[Slack-Clone] SWR

j.y.eunseo 2023. 3. 6. 14:11

# SWR

## SWR vs Context API

회원가입/로그인 페이지에서 클라이언트에서 Axios를 통해 Request를 보내고 Response를 받아왔다.

그런데 회원가입/로그인을 한 정보를 어디서 관리해야 할까?

전역에서 사용해야 하기 때문에 리덕스와 같이 전역 상태 관리 도구를 사용해야 할 필요가 있다.

 

Context API

  • Context API는 React에서만 사용이 가능하다.
  • Root에서 Provider를 제공하여 하위 컴포넌트들이 useContext를 통해 state 값에 접근할 수 있다.

 

SWR

  • 요청을 하고 데이터를 받아와 저장하는 방식
  • SWR API가 계속해서 호출되어 로그인 정보를 알 수 있었다.
  • 그러나 사용자가 로그인을 성공하고 API가 재호출 되는 시기를 알 수 없기 때문에 SWR 설정에서 수동으로 요청을 보내어 정보를 얻을 수 있다.
  • SWR는 반응속도가 빠르다는 장점이 있다.
  • Next 개발자들이 만든 라이브러리로 Next와 호환성이 좋다.

 

## SWR 사용

SWR 설치

$ npm install swr

 

import useSWR from 'swr';

const {} = useSWR('http://localhost:3095/api/users');

 

  • useSWR( 서버 주소, fetcher, revalidate )
    • useSWR은 직접적인 역할 없이 서버 주소를 fetcher로 넘겨주는 역할
    • fetcher: 첫 번째 인자인 서버 주소를 어떻게 처리할지에 대한 함수
    • revalidate: 주기적으로 호출하지만 dedupingInterval 기간 내에서는 캐시에서 불러온다.

출처 SWR 공식 문서

 fetcher 파일 생성

< utils/fetcher.ts >

import axios, { AxiosResponse } from 'axios';

const fetcher = (url: string) => {
  axios.get(url).then((response: AxiosResponse) => response.data);
};

export default fetcher;

useSWR에서 넘겨받은 URL을 Axios를 통해 get 요청을 하고 response의 data를 리턴해주겠다.

리턴한 data는 useSWR의 변수에 들어간다. → {data}

const {data} = useSWR('http://localhost:3095/api/users', fetcher);

 

쿠키 생성 feat withCredentials

로그인 성공 시 쿠키가 생성되지 않는 이유는 백엔드와 프론트엔드의 도메인이 동일하지 않기 때문이며, 백엔드에서 프론트엔드의 쿠키 생성 직접적으로 할 수 없고, 프론트엔드에서 백엔드로 쿠키를 전달할 수도 없다.

이러한 문제를 해결해주는 방법이 바로 withCredentials이다.

 

GET method에서는 두 번째 인자로, POST method에서는 세 번째 인자로 

// GET
axios.get(url, { withCredentials: true }).then((response: AxiosResponse) => response.data);

// POST
axios.post('/api/users', requestData, { withCredentials: true }).then(() => {});

 

revalidate

회원가입/로그인 요청 후 users에 대한 GET 요청 보내기

dedupingInterval은 setInterval처럼 주기마다 요청을 보낼 수 있는 옵션

const { data, error, revalidate } = useSWR(
	'http://localhost:3095/api/users', 
	fetcher, 
	{dedupingInterval: 1000}
);

 

자세한 API 옵션들은 SWR 공식 페이지에서 확인하기.

https://swr.vercel.app/ko/docs/api


SWR는 React Query랑 경쟁상대로 SWR를 공부하면 React Query도 같이 공부할 수 있으니 꼼꼼하게 기록하고 학습해 보자 :)

댓글
«   2025/05   »
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
최근에 올라온 글