December 10, 2022 • ☕️ 7 min read
올해 아직 남았다
react-query에서 별 다른 설정이 없으면, 캐시된 데이터는 바로 stale(=신선하지 않다고)하다고 판단한다. 그래서 1초 전에 fetching한 데이터라도 devtools에서는 해당 쿼리가 stale한 상태라고 판단하게 된다.
데이터를 불러오자마자 stale 상태가 되지만, 곧바로 refetch를 수행하는 것은 아니다. 여전히 캐시에서 데이터를 불러올 수 있으며, 특정 상황에서만 백그라운드에서 refetch가 수행된다.
staleTime
config를 추가하면, 데이터를 fetching하자마자 해당 시간동안 fresh한 상태가 된다.
Ref
invalidateQueries
vs removeQueries
invalidateQueries
: 쿼리를 무효화한다.
removeQueries
: 캐시 삭제 + 쿼리 자체를 삭제
invalidateQueries
와는 달리, stale한 캐시 데이터를 저장하지 않는다.keepPreviousData
옵션이 false라면, UI에서 데이터가 즉각적으로 사라진다.
keepPreviousData
옵션
- 이전 fetch 데이터를 화면에 유지시킬 것인지를 결정한다.
- true라면
invalidateQueries
혹은removeQueries
를 호출하더라도, refetch 전까지는 기존의 데이터가 보일 수 있다.
npm에서 yarn으로 넘어가고 싶은데… 넘어가는 것에 대한 타당한 근거를 마련해보자.
1️⃣ packages 병렬 설치
npm에서는 여러 패키지를 설치할 때, 패키지가 완전히 설치 될 때까지 기다린 후 다른 패키지를 설치한다. 즉, 작업은 패키지별로 순차적으로 실행된다.
하지만 yarn은 이러한 작업을 병렬로 설치하므로 퍼포먼스와 속도가 증가한다.
ex) React를 설치했을 때, npm은 3.572초, yarn은 1.44초가 소요된다.
추가로,` caret(^)이 붙은 패키지 버전을 관리하는 방식의 차이?
2️⃣ 자동 lock 파일 생성
npm과 yarn 모두 패키지에서 프로젝트의 종속성과 버전 번호를 추적한다.
종속성이 추가되면 yarn은 yarn.lock 파일을 자동으로 추가한다.
npm은 npm shrinkwrap
명령어로 lock 파일을 생성한다.
차이점은 npm이 기본적으로 lock 파일을 생성하지 않을 때, yarn은 항상 yarn.lock 파일을 생성하고 업데이트한다는 것이다.
yarn install
명령어를 실행하면 lockfile에 명시된 패키지의 정확한 버전을 설치하기 때문에 프로젝트를 개발하는 모든 구성원이 동일한 패키지 버전을 사용할 수 있다.
하지만 npm은 lockfile을 자동으로 생성하지 않기 때문에, ^
(caret)이 붙은 패키지의 경우 서로 다른 버전이 설치돼버릴 수도 있다.
예) ^3.1.4
는 >= 3.1.4 ~ < 4.0.0
을 의미한다.
npm v5.0은 lock.json 파일로 명명된 새로운 패키지와 함께 제공되며 npm-lapwrap 시스템을 완전히 폐기했다. 이것은 설치 과정과 성능을 효율적으로 향상시켰지만, 아직 yarn의 속도 수준에는 도달하지 못했다.
3️⃣ 보안
npm은 다른 패키지를 즉시 포함시킬 수 있는 코드를 자동으로 실행하므로, 보안 시스템에 여러 가지 취약성이 발생한다. 반면에, yarn은 yarn.lock 또는 package.json 파일에 있는 파일만 설치한다. 따라서 yarn이 npm 패키지보다 보안이 강화된 것으로 간주된다.
음~ yarn을 안 쓸 이유가 없잖아?
Ref
kbd
<p>Please press <kbd>Ctrl</kbd></p>
onChange
는 undefined
값을 허용하지 않는다. undefined
를 넣으면 자동으로 defaultValues
값이 반영된다.shallow
옵션을 켜도 마찬가지)useSearchParams
에서 functional update를 지원한다 (Ref) - 이는 queryParam을 set하는 동작이 하나의 사이클에서 두 번이상 동작할 때, 서로의 변경점을 기반으로 반영할 수 없었던 문제를 해결해준다.withConfig
메서드로 해당 prop만 빼고 자식 컴포넌트에 넘기거나 props 앞에 $
prefix를 붙여서 해결할 수 있다. (cf. ver 5.1부터 도입된 transient props)vscode 익스텐션인데, 스크롤을 내려도 상단의 클래스 이름이나 함수명을 sticky하게 고정시켜준다. 이런 게 있었으면 좋겠다고 생각은 했는데, 막상 모든 것들이 sticky하게 걸리면 더 혼란스러울 것 같기도? 🤔
Ref
eslint가 2013년에 첫 릴리즈 된 후 개발 환경이 계속 고수되어 유지보수가 되어 왔는데, 향후 10년을 위해서는 환경의 변경이 필요할 것이라는 내용과 그 것을 위한 목표 10가지에 대해 설명 하는 글이다.
Ref https://github.com/eslint/eslint/discussions/16557
오… 개인적으로 연속 스크롤을 아주 선호하지는 않는 입장으로서 맞는 선택지인진 모르겠다 🤔 연속 스크롤에 대한 니즈가 그렇게 컸다니
Ref https://www.itworld.co.kr/news/268185#csidxc049eca5dfbf1e3a77f06c7b719d839
@vitejs/plugin-react-swc
)이 나왔다.?
인라인 쿼리 suffix를 사용하여 css 스타일의 중복 로드를 방지한다. (ex. import stuff from './global.css?inline'
))dotenv
16 버전과 dotenv-expand
9 버전을 사용한다.등의 변화가 있다!
Ref https://vitejs.dev/blog/announcing-vite4.html
어떻게 시간 가는지 모르고 보내는 날들이다. 짐 한가득 들고 이리저리 뛰어다녔던 날들이 많았다 😵💫
우테코 4기의 우형 최종 합격이 발표되었다. 잠깐 이야기 나누고 도움 줬던 크루가 같은 팀에 합류하게 돼서 기쁘다 🤩