github action cache



[github action cache hit error](https://texonom.com/github-action-cache-hit-error-d38fe406d909456d83845475cf5c7adc)

```type- name: Cache node modules      uses: actions/cache@v1      with:        path: node_modules        key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }}        restore-keys: |          ${{ runner.OS }}-build-          ${{ runner.OS }}-```

- path: 저장하고 불러올 캐시 대상 폴더
- key: 저장 하고 불러올 때 식별할 수 있는 키 값
- restore-keys(optional): 캐시 key가 일치하는 것이 없을때, 차선택으로 캐싱 폴더를 찾는 key



1. 이미 캐싱이 된 key 값이 존재하면 해당 폴더를 path 폴더에 불러옵니다.
2. 만약 캐싱이 된 key가 없다면 다음과 같은 작업을 수행합니다.
> 1. restore-keys가 존재하면 순서대로 restore-key와 `match`되는 key 값을 찾습니다.
> 2. 일치하는 key값이 있다면 path 폴더에 불러옵니다.
> 3. 만약 여기서도 일치하는 key가 없다면 종료하고 다음 단계를 수행합니다.
3. 해당 job을 성공적으로 마치면, path 폴더에 key 값을 부여하고 캐싱 후 저장합니다.



- `path: node_modules`: node_modules 폴더를 캐싱합니다.
- `key: ${{ runner.OS }}-build-${{ hashFiles('**/package-lock.json') }}`: `runner.OS`는 가상환경을 의미하며 여기서는 "Linux"를 의미합니다. `hashFiles('**/package-lock.json')`는 package-lock.json 파일을 해시화한다는 것인데, 이는 같은 의존성 파일이면 같은 해시값이 나오게 되어 새로운 key를 만들지 않습니다. 하지만 새로운 모듈이 추가되면 lock 파일도 변경이 일어나고, 이어서 해시값도 바뀌므로 key도 변경이 되어 새롭게 캐싱을 하게 되는 것입니다.
- `restore-keys: | ${{ runner.OS }}-build- ${{ runner.OS }}-`: 만약 key값이 없으면 그 이전에 캐시했던 폴더중 가장 최근의 key값을 가져와 불러옵니다.

> [[Github Action] React 빌드하기](https://velog.io/@loakick/Github-Action-React-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0)







