virtual DOM 가 무엇이고 작동원리
virtual DOM(가상 DOM)은 웹 개발에서 사용되는 개념으로, 사용자 인터페이스의 성능을 향상시키기 위해 사용되며, 웹 페이지의 HTML 구조를 나타낸다.
작동원리는
React를 사용하는 이유
제어 컴포넌트와 비제어 컴포넌트의 차이
제어 컴포넌트(Controlled Component)와 비제어 컴포넌트(Uncontrolled Component)는 React에서 폼(form) 관련 컴포넌트를 다룰 때 사용되는 두 가지 패턴이다.
제어 컴포넌트는 폼 관련 데이터를 React의 state로 관리하며, 입력 데이터를 처리하는 로직을 직접 구현한다. 이 방식은 React의 상태 관리 기능을 활용하여 데이터의 변화를 실시간으로 감지하고, UI를 업데이트할 수 있다.
비제어 컴포넌트는 폼 관련 데이터를 state로 관리하지 않고, DOM에서 직접 관리한다. 이 방식은 코드가 더 짧고 간단해질 수 있으며, 다른 라이브러리와 함께 사용할 때 유용하다.
'key' prop을 사용하는 이유
React에서 리스트를 렌더링할 때 'key' prop을 사용한다. 'key' prop은 각 요소의 고유한 식별자를 지정하는데 사용한다.
'key' prop을 사용하는 이유는 각 리스트를 고유하게 식별하여 추가, 삭제 또는 이동되었는지 감지하고, 이에 따라 효율적으로 업데이트 할 수 있다. 또한 'key' prop이 있는 경우, React는 변경된 아이템만 렌더링 하므로 성능이 향상된다.
props와 state의 차이
props와 state는 컴포넌트의 데이터를 다루는데 사용되는 두 가지 개념이다.
props는 컴포넌트의 속성을 나타내는 객체이다. 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용된다. props는 컴포넌트 외부에서 설정되어 내부에서 변경할 수 없으며, 컴포넌트가 렌더링될 때마다 동일한 props를 가지고 렌더링된다.
state는 컴포넌트의 상태를 나타내는 객체이다. state는 컴포넌트 내부에서 관리되며, 컴포넌트 내부에서 변경할 수 있다. 컴포넌트가 렌더링될 때마다 state가 변경되면, React는 변경된 state를 기반으로 새 UI를 생성한다.
props는 컴포넌트의 데이터를 읽기 전용으로 유지하며, state는 데이터를 변경할 수 있는 상태를 나타내는 데 사용된다.
클래스형 컴포넌트와 함수형 컴포넌트의 차이
useState를 사용하는 이유
useState는 React에서 컴포넌트 내부에서 상태를 관리하는 Hook 중 하나이다.
useMemo와 useCallback에 대해 설명
useMemo와 useCallback은 React에서 성능 최적화를 위해 사용되는 두 가지 Hook이다.
useMemo는 계산 비용이 많이 드는 함수의 결과를 캐시하여 성능을 최적화하는 데 사용된다. 이 Hook을 사용하면 함수가 실행될 때마다 계산하지 않고 이전에 계산한 결과를 재사용할 수 있다.
useMemo는 복잡한 계산을 수행하는 함수가 자주 호출될 때와 컴포넌트가 다시 렌더링될 때마다 계산이 반복되는 경우에 유용하다.
useCallback은 함수를 메모이제이션하여 새로운 함수 인스턴스를 생성하는 것을 방지하고 성능을 최적화하는 데 사용된다. 이 Hook을 사용하면 함수가 실행될 때마다 새 함수를 생성하는 것이 아닌 생성된 함수를 재사용할 수 있다.
useCallback은 자식 컴포넌트에 함수를 전달할 때와 useEffect의 의존성 배열에 함수를 전달할 때 유용하다.
react-query란?
react-query는 React 애플리케이션에서 데이터 가져오기(fetching data)를 간편하게 해주는 라이브러리이다. react-query는 데이터 가져오기에 필요한 상태관리, 캐싱, 오류처리, 재시도, 중복 요청 방지 등의 기능을 제공한다.
react-query의 가장 큰 특징은 데이터 가져오기를 비동기적으로 처리하고 결과를 캐싱하여 같은 요청이 반복되지 않도록 함으로써 성능을 향상시킨다는 것이다. 캐시된 데이터는 시간이 지나면 자동으로 만료되고, 필요에 따라 재시도를 할 수 있다.
또한 react-query는 데이터 가져오기와 관련된 상태를 관리할 때 유용한 Hook을 제공한다.
react-query는 REST API 뿐 아니라 다양한 데이터 소스에 대해 사용할 수 있다.
Context API?
Context API는 React에서 전역 상태를 관리하기 위해 제공하는 API이다. Context API를 사용하면 컴포넌트 트리에서 매개변수로 상태를 전달하지 않고도 상태 값을 공유할 수 있다.
Context API는 다수의 하위 컴포넌트가 동일한 상태를 공유해야 하는 경우나 전역적으로 접근 가능한 설정 정보 등을 제공해야 하는 경우에 사용된다.
Context API는 두 가지 주요 구성 요소가 있는데
Redux를 사용하는 이유 및 단점
단점
Context API와 Redux 비교
관리하는 상태의 양
⭐️ Context API: 컴포넌트 계층 구조에서 상태를 전달하기 위해 사용되기 때문에 작은 규모의 애플리케이션에서 사용된다.
⭐️ Redux: 중앙 상태 저장소를 사용하여 상태를 관리하기 때문에 대규모 애플리케이션에서 사용된다.
구현 방법
⭐️ Context API: React의 내장 기능으로 제공되는 Context API를 사용한다. Provider와 Consumer 컴포넌트를 이용해 상태를 전달하고 받는다.
⭐️ Redux: 별도의 라이브러리로 설치하여 사용한다. 스토어, 액션, 리듀서 등을 이용해 상태를 관리한다.
성능
⭐️ Context API: 상태가 변경될 때마다 모든 하위 컴포넌트가 다시 렌더링된다. 컴포넌트의 수가 많거나 상태가 변경되는 빈도가 높은 경우 성능에 영향을 미칠 수 있다.
⭐️ Redux: 스토어의 상태가 변경될 때마다 연관된 컴포넌트만 렌더링된다. 불필요한 렌더링을 최소화해 성능을 향상시킬 수 있다.
Redux와 Recoil
Next.js의 장점
Next.js는 React 기반의 서버 사이드 렌더링 프레임워크
CSR과 SSR의 차이
CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)은 모두 프론트엔드 프레임워크에서 사용되는 렌더링 방식이다.
CSR은 브라우저에서 JavaScript를 이용하여 화면을 그리는 방식이다. 즉, 서버는 HTML 파일 하나와 JavaScript 파일 하나만 보내주고, JavaScript 파일을 이용하여 브라우저에서 화면을 그린다. 이 방식은 초기 로딩 시간이 길어질 수 있으나, 한 번 로딩되면 이후에는 빠른 페이지 이동이 가능하다.
SSR은 서버에서 화면을 그려서 브라우저로 보내주는 방식이다. 즉, 브라우저는 이미 그려진 HTML 파일을 받아서 바로 화면을 보여줄 수 있다. 이 방식은 초기 로딩 시간이 짧아지며, 검색 엔진 최적화(SEO)가 용이하다는 장점이 있지만 서버 부하가 증가할 수 있고, 다양한 브라우저에 대한 호환성 이슈가 발생할 수 있다.
null 과 undefined의 차이
둘 다 의미 있는 값이 없음을 나타내는 특수 값이다.
하지만 null은 객체 값이 의도적으로 없음을 나타내는 값인데 변수 또는 객체 속성에 값이 없거나 어떤 객체를 참조하지 않음을 나타내는 데 자주 사용된다.
undefined는 객체든 숫자든 어떤 값도 없음을 나타내는 값인데 변수나 객체 속성에 값이 할당되지 않았음을 나타내는 데 자주 사용된다.
null과 undefined는 type을 확인해보면 null은 object값이 나오고 undefined는 undefined라고 나온다.
null == undefined는 true로 나오는데 그 이유는 타입을 판단하지 않고 두 값을 비교했을 때 true로 나오는 것이고 null === undefined는 타입까지 비교하기 때문에 false로 나온다.