Ref 커밋을 참조하는 ref에 대해 알아보자. Hash 커밋을 참조하는 가장 직접적인 방식으로, SHA-1 해시를 통해 참조할 수 있다. 이는 각 커밋의 고유한 id이며, git log 명령을 통해 각 커밋의 해시를 확인할 수 있다. Refs 커밋을 참조하는 간접적인 방식이다. 커밋 해시에 붙이는 alias 같은 것이라고 생각하면 된다. .git 폴더에 보면 refs라는 폴더가 있다. 그 안에 보면 heads, remotes, tags 등 또 하위 폴더가 존재한다. heads는 레포의 로컬에 있는 모든 브랜치를 정의하고 있는 폴더이다. heads의 내부를 보면 로컬에 있는 브랜치들이 폴더로 존재하고, 그 안에는 해당 브랜치의 가장 끝에 있는 커밋 해시를 저장하고 있다. cat .git/refs/head..
detached HEAD 브랜치가 아닌 커밋에 체크아웃했을 때 'detached HEAD' 상태에 있다고 한다. 예를 들어 git checkout 이렇게 브랜치로 체크아웃하는 것이 아닌 git checkout 이렇게 특정 커밋으로 체크아웃할 수 있다. git checkout git checkout HEAD~3 // 현재 헤드에서 3번째 전 커밋 HEAD는 해당 브랜치의 가장 최신 버전을 가리키는데, 커밋으로 체크아웃한 상태인 detached HEAD(분리된 HEAD)는 레포의 HEAD를 보고 있지 않다는 뜻이다. detached HEAD 상태에서는 안전하게 해당 커밋에 여러가지 변경을 가할 수 있다. 이 변경을 저장할 수도 있고, 버릴 수도 있는데, 저장하기 위해서는 새로운 브랜치를 만들어야 한다. gi..
문제 현상 vscode에서 쉬프트 커맨드 p로 shell command: Install code command in PATH 를 실행해서 code . 로 프로그램을 실행하면 맥을 재부팅했을 때 사라진다. 그러면 또 vscode를 켜서 uninstall 해주고 install을 다시 해주는게 너무 귀찮다. 그러므로 .zshrc 파일에 저장해서 재부팅에 관계없이 계속 커맨드를 사용할 수 있도록 한다. How vs code docs 에 보면 터미널에서 하는 방법이 나와 있는데, .bash_profile이나 .zshrc 파일을 켜서 path에 추가해주면 된다. 추가한 후 echo $PATH로 확인해보면 vscode path가 추가돼있다. 다만 여기서 주의할 점이 있다. vscode가 Applications(응용 ..
일반적으로 mutate를 하고나서는 쿼리를 invalidate해서 refetch해오게 되는데, 이때 사용하는 것이 invalidateQuries이다. // return이 있을 때 onSuccess: () => { return queryClient.invalidateQueries(['posts', id, 'comments']) } // return이 없을 때 onSuccess: () => { queryClient.invalidateQueries(['posts', id, 'comments']) } invalidateQuries는 프로미스를 리턴하기 때문에 return을 시켜주면 해당 state가 업데이트 될떄까지 loading state가 유지된다. ..
useState, useReducer 모두 상태를 관리하는 훅이기 때문에 어떤 상황에서 어떤 것을 쓰는게 나을지 궁금했다. useState는 관리할 상태가 간단할 때 일반적으로 사용하면 좋다. useReducer는 간단하게 만들더라도 useState보다는 보일러플레이트가 길어서 verbose해보인다. 반면 관리할 상태가 여러개이고, 서로가 의존하고 있으며, 상태를 조작할 동작이 여러개일 때는 useReducer를 사용하는 것이 낫다. 상태가 변하는 로직을 reducer 한 군데 몰아넣음으로써 상태 간의 관계를 한 번에 파악하기 용이하고, reducer에 로직을 몰아넣음으로써 훅을 깔끔하게 유지할 수 있다. 액션이 여러 개일 때 위 이유와 마찬가지로 리듀서 한 군데에서 액션을 관리할 수 있다. 액션을 us..
현상 로컬 빌드 시 Module not found 에러가 나면서 깨지는데, 동료들은 깨지지 않았음. 시도해본 것 yarn cache clean & yarn yarn npm login node_modules 삭제 해결 .next 디렉토리를 날리고 yarn 하니까 node_modules가 새로 생성되면서 정상적으로 돌아옴. 해결이 좀 느려진 원인에는 .next 파일이 vscode 디렉토리에서 보이지 않았기 때문. .vscode의 settings.json을 확인해보니, files.exclude 설정에 .next가 포함돼있었다. 팀 전체가 사용하는 설정이라서 별로 들여다보지 않았었다. Toggle Excluded Files라는 vscode 익스텐션을 설치해서 혹시나 안보이는 파일들을 확인하고 싶을 때 쉽게 할 ..
react의 에러 바운더리는 렌더링 도중 생기는 에러가 UI 전체를 깨뜨리는 것을 막기 위한 용도이다. 그래서 처음에는 막연하게 try catch 대신 선언적으로 에러 핸들링을 도와주는 컴포넌트로 인식하고 있었다. 그런데 어느날 onClick에서 에러를 던지는데 에러 바운더리에서 핸들링이 되지 않았다. 찾아보니 에러 바운더리는 다음과 같은 에러를 잡지 않는다. 이벤트 핸들러 비동기적 코드 서버 사이드 렌더링 자식이 아닌 에러 바운더리 자체에서 발생하는 에러 이벤트 핸들러에서 발생하는 에러는 렌더링 도중에 발생하는 것이 아니므로, UI가 깨지지 않기 때문에 에러 바운더리에서 잡지 않는다고 한다. 대신 try catch를 써주라고 문서에 쓰여있다. 그리고 또 하나 의아했던 점은 비동기 코드의 에러 또한 잡지..
Blob Blob 객체는 파일류의 불변하는 미가공 데이터를 나타낸다. 텍스트와 이진 데이터 형태로 읽을 수 있으며, ReadableStream으로 변환해서 스트림 메서드를 사용할 수도 있다. File이 Blob에 기반한 인터페이스로, Blob 인터페이스를 상속해 확장한 것이다. File File 인터페이스는 파일에 대한 정보를 제공하고 자바스크립트가 접근할 수 있는 메서드를 제공한다. 서버에서 파일을 다운로드하려면 단순히 파일을 응답으로 보내주는 것뿐만 아니라, 헤더에 Content-Disposition 필드가 필요하다. Content-Disposition 헤더의 타입에는 inline, attachment 2가지 종류가 있는데, inline은 컨텐츠를 display하는 것이고 attachment는 다운로..
- Total
- Today
- Yesterday
- 자바
- jQuery
- 포인터 변수
- c언어
- this
- CSS
- 개발 공부
- linkedlist
- rxjs
- Java
- getter
- youtube data api
- Data Structure
- package.json
- Prefix Sums
- til
- Conflict
- useEffect
- GIT
- 깃
- oracle
- Redux
- 알고리즘
- react
- 인스턴스
- SQL
- JavaScript
- 리덕스
- 제네릭스
- Session
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |