useEffect의 두 번째 배열이 비었으면, 컴포넌트가 마운트될 때 딱 한 번만 함수가 호출됩니다.
데이터를 불러와서 상태를 업데이트하는 코드를 작성할 때는 꼭 기존의 todos를 저장하는 useEffect보다 상단 위치에 코드를 작성해주세요. 저장하는 useEffect가 먼저 있으면 불러오기 기능이 제대로 작동하지 않습니다. useEffect는 등록된 순서대로 작동하는데, 저장하는 useEffect가 먼저 호출되면 todos의 초깃값을 저장해버린 다음에 불러오기가 진행되므로 초깃값만 불러오기 때문입니다.
코드를 저장하고 할일 목록에 변화를 준 다음, 리로드해 데이터가 잘 보존됐는지 확인해보세요.