2월 12일 (금)

api 호출 횟수 1000회를 순식간에 써버리는 방법

Posted by Yan on February 12, 2021

렌더링지옥. 영원회귀

1
2
3
4
5
6
7
8
9
10
11
const [data, setData] = useState([]);

useEffect(() => {
  const fetchData = () => {
    axios.get({ url }).then((response) => {
      setData(response.data.items);
      console.log(data);
    });
  };
  fetchData();
}, [data]);

오늘 새벽에 악몽 속에서 몸부림 치다 깨버렸다. 꿈의 내용은 콘솔 창에 무한히 찍히는 렌더링 데이터를 보고 있는 것. 어제의 상황이 그랬고, 나는 순식간에 api에서 감당하는 하루 트래픽 1000건을 다 쓴 것도 모른 채 뭔지도 모를 에러를 막느라 하루를 써버렸다. 영원회귀란 영원한 렌더링이 아닐까. 무의식중에 그런 생각을 하면서 게보린을 먹고 겨우 다시 잠에 들었다.

위는 내가 쓴 정말 바보같은 코드다. useState에 왜 빈 배열이 있어…? useEffect에 왜 [data]가 들어가…? 나는 useState와 useEffect를 다시 배우고 와야 한다. 이건 일종의 반성문이다…

1
2
3
4
5
6
7
8
9
10
11
const [data, setData] = useState(null);

useEffect(() => {
  const fetchData = () => {
    axios.get({ url }).then((response) => {
      setData(response.data.items);
      console.log(data);
    });
  };
  fetchData();
}, []);

고친 코드는 이것이다. null은 왜 null이고 data는 왜 그 자리에 있으면 안 되는지 반성문을 쓰자.