2023. 5. 30. 14:16ㆍ개발/토막난 상식
Vite는 JavaScript 기반의 웹 개발 도구입니다. Vite에서 저장(또는 변경 사항 저장)을 수행하면 다음과 같은 기능이 수행될 수 있습니다:
자동 새로 고침: Vite는 개발 중인 애플리케이션을 자동으로 새로 고쳐서 변경 사항을 즉시 반영할 수 있습니다. 파일을 저장하면 Vite가 변경된 내용을 감지하고 브라우저에서 페이지를 새로 고칩니다. 이를 통해 빠른 개발 속도와 실시간 반응을 얻을 수 있습니다.
빠른 번들링: Vite는 개발 서버를 사용하여 빠른 속도로 애플리케이션을 번들링합니다. 저장할 때마다 Vite는 필요한 파일만 다시 번들링하므로 전체 애플리케이션을 다시 빌드할 필요가 없습니다. 이는 개발 시간을 단축하고 변경 사항을 빠르게 확인할 수 있게 해줍니다.
핫 모듈 교체: Vite는 핫 모듈 교체(HMR, Hot Module Replacement)를 지원합니다. 이는 변경된 모듈만 교체하여 애플리케이션의 상태를 유지한 채로 새로고침 없이 변경 사항을 적용할 수 있는 기능입니다. 저장하면 변경된 모듈이 빠르게 교체되어 애플리케이션을 다시 빌드하지 않고도 즉시 변경 사항을 확인할 수 있습니다.
개발자 도구 통합: Vite는 개발자 도구와의 통합을 제공하여 디버깅 및 개발 경험을 향상시킵니다. 저장할 때마다 변경 사항이 개발자 도구에 자동으로 반영되어 코드의 동작을 확인하고 문제를 해결할 수 있습니다.
요약하면, Vite에서 저장하면 변경 사항을 실시간으로 적용하고 애플리케이션을 빠르게 다시 빌드하여 개발 시간을 단축합니다. 자동 새로 고침, 빠른 번들링, 핫 모듈 교체, 개발자 도구 통합 등의 기능을 활용하여 개발 프로세스를 더욱 효율적으로 만들 수 있습니다.
Vite에서 파일을 저장했을 때 새로고침과는 다른 동작이 발생하는 이유는 Vite의 동작 방식과 캐싱 메커니즘에 기인합니다.
일반적인 개발 서버와 달리 Vite는 변경된 파일만 다시 번들링하여 필요한 부분만 수정된 모듈을 로딩하고 적용합니다. 이를 통해 빠른 개발 속도와 실시간 반응성을 제공합니다.
Vite의 동작 방식은 다음과 같습니다:
Vite 개발 서버가 실행됩니다.
브라우저에서 애플리케이션을 요청합니다.
Vite 서버는 필요한 파일을 번들링하여 브라우저에 전달합니다. 이때, 필요한 파일만 번들링하고, 이들 간의 의존성 관계를 유지합니다.
브라우저는 애플리케이션을 렌더링하고, 변경 사항이 발생하면 필요한 모듈만 다시 로딩하여 적용합니다.
파일을 저장하면 Vite는 변경된 모듈을 다시 번들링하고, 브라우저에 변경된 모듈을 전송합니다.
변경된 모듈은 HMR (Hot Module Replacement)을 통해 실시간으로 교체되어 새로고침 없이 변경 사항이 즉시 반영됩니다.
따라서 저장을 눌렀을 때 새로고침과 다른 결과가 나타나는 이유는 Vite가 변경된 모듈을 즉시 교체하고 HMR을 통해 변경 사항을 적용하기 때문입니다. 이에 반해 일반적인 새로고침은 전체 페이지를 다시 로드하여 초기 상태에서 다시 시작합니다.
또한, Vite는 개발 과정에서 파일 변경을 실시간으로 감지하여 필요한 모듈만 다시 로드하므로, 새로고침보다 빠르게 변경 사항을 확인할 수 있습니다.
useLayoutEffect는 Vite와는 별개의 React의 기능이기 때문에 Vite 자체와는 직접적인 관련이 없습니다. 저장 후 useLayoutEffect가 작동하지 않는 문제는 React 자체나 컴포넌트 구성에 의한 것입니다.
보통 useLayoutEffect는 컴포넌트가 처음 마운트될 때와 업데이트될 때 동기적으로 실행되는 특성 때문에, 렌더링 사이클 중 커밋(commit) 단계 이후에 작업을 수행합니다. 저장 후에는 파일이 변경되었으므로 Vite는 변경된 모듈을 즉시 교체하고, React는 다시 렌더링 사이클을 시작합니다. 이 때문에 useLayoutEffect가 작동하려면 컴포넌트가 다시 렌더링되어야 합니다.
새로고침을 통해 정상적으로 작동하는 이유는, 새로고침은 전체 페이지를 다시 로드하여 React 애플리케이션을 초기 상태에서 다시 시작하기 때문입니다. 따라서 저장 후 새로고침을 하면 React 애플리케이션이 처음부터 다시 마운트되며, 이때 useLayoutEffect도 컴포넌트의 처음 마운트 시점에 작동하게 됩니다.
만약 Vite의 빠른 개발 서버와 함께 실시간으로 변경 사항을 확인하고 싶은데 useLayoutEffect가 작동하지 않는다면, 해당 컴포넌트가 다시 렌더링되도록 해야 합니다. 이를 위해 컴포넌트 내부의 상태나 속성을 변경하거나, 부모 컴포넌트로부터 속성을 전달받는 경우 해당 속성이 변경되도록 설정하는 등의 방법을 사용할 수 있습니다. 이렇게 하면 React는 컴포넌트를 업데이트하고 useLayoutEffect가 동작할 수 있게 됩니다.
'개발 > 토막난 상식' 카테고리의 다른 글
배열 문법 선호도 (0) | 2023.06.02 |
---|---|
react-dom.development.js:11340 Uncaught DOMException: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node. (0) | 2023.05.30 |
useLayoutEffect > DOM > 생명주기 (1) | 2023.05.30 |
코드 개선obj가 api에선 달달혀 (0) | 2023.05.25 |
if문 가시성 _ 삼항연산자 (0) | 2023.05.19 |