Virtual DOM(가상 DOM)은 React와 같은 일부 프론트엔드 라이브러리 및 프레임워크에서 사용되는 개념입니다. 가상 DOM은 실제 DOM에 대한 가벼운 복제본이며, 이를 통해 성능을 향상시킬 수 있습니다.
<Virtual DOM의 동작 방식>
<가상 DOM과 실제 DOM의 차이>
가상 DOM은 프론트엔드 라이브러리와 프레임워크에서 성능 향상과 코드의 간편성을 제공하는 중요한 요소 중 하나입니다. React, Vue.js 등이 이러한 가상 DOM을 활용하여 빠르고 효율적인 UI 업데이트를 가능케 합니다.
중앙 집중화된 상태 관리: Redux는 애플리케이션의 상태를 하나의 중앙 저장소에서 관리합니다. 이는 전체 애플리케이션에서 일관된 상태를 유지하고 중앙에서 상태를 조절할 수 있게 해줍니다.
컴포넌트 간 데이터 공유: 대규모 애플리케이션에서는 여러 컴포넌트 간에 데이터를 효과적으로 공유하고 전달해야 합니다. Redux는 상태를 전역으로 관리하기 때문에 여러 컴포넌트 간에 데이터를 쉽게 전달할 수 있습니다.
예측 가능한 상태 변경: Redux는 액션(Action)을 통해 상태 변경을 관리합니다. 이로써 상태 변경이 예측 가능하며, 개발자는 디버깅 및 유지보수를 쉽게 수행할 수 있습니다.
시간 여행 디버깅 (Time Travel Debugging): Redux는 미들웨어를 통해 액션을 기록하고, 이를 통해 어떻게 상태가 변경되었는지를 쉽게 확인할 수 있는 시간 여행 디버깅 기능을 제공합니다.
상태의 불변성: Redux는 상태의 불변성을 강제하고, 이를 통해 상태 변화를 추적하고 성능을 최적화할 수 있습니다.
미들웨어의 확장성: Redux는 미들웨어를 사용하여 액션 처리 과정을 확장할 수 있습니다. 이를 통해 비동기 작업, 로깅, 라우팅 등 다양한 기능을 통합할 수 있습니다.
테스트 용이성: Redux는 순수 함수로 상태 변화를 다루기 때문에 테스트하기 용이합니다. 테스트 코드를 작성하고 상태의 예상 동작을 검증하는 데 용이합니다.
커뮤니티와 에코시스템: Redux는 큰 개발 커뮤니티와 다양한 에코시스템을 가지고 있습니다. 많은 개발자들이 Redux를 사용하고, 관련된 도구 및 라이브러리가 풍부합니다.
Single Page Application (SPA):
한 페이지 구조: SPA는 하나의 HTML 페이지를 가지고 있고, 동적으로 콘텐츠를 업데이트하며 사용자와 상호 작용합니다.
Ajax와 DOM 조작: 페이지 이동 없이 Ajax를 사용하여 서버로부터 데이터를 비동기적으로 로드하고, DOM 조작을 통해 화면을 업데이트합니다.
빠른 사용자 경험: 초기 로딩 이후에는 페이지 간 전환 없이 새로운 데이터를 로드하므로 빠른 사용자 경험을 제공할 수 있습니다.
라우팅: 주로 클라이언트 측 라우팅을 사용하여 URL의 일부를 변경하면 페이지가 다시 로드되지 않고도 해당 컴포넌트를 업데이트합니다.
Multi Page Application (MPA):
여러 페이지 구조: MPA는 여러 HTML 페이지로 이루어져 있고, 각 페이지는 새로운 HTML을 로드하여 전체 페이지를 갱신합니다.
전통적인 요청-응답: 사용자가 링크를 클릭하면 서버로부터 새로운 HTML을 받아와 전체 페이지를 로드합니다.
페이지 이동에 따른 로딩: 새로운 페이지로 이동할 때마다 전체 페이지를 서버로부터 다시 받아오기 때문에 초기 로딩 시간이 필요하며 사용자 경험이 상대적으로 느릴 수 있습니다.
서버 측 라우팅: 주로 서버 측 라우팅을 사용하며, 사용자가 새로운 페이지로 이동할 때 서버에 새로운 요청을 보냅니다.
언제 어떤 것을 선택해야 할까?
SPA: 빠른 사용자 경험이 필요하며, 웹 애플리케이션이 복잡한 상태 및 상호 작용을 가지고 있는 경우.
MPA: 전통적인 웹 사이트 구조를 유지하면서 검색 엔진 최적화(SEO)가 중요한 경우 또는 단순한 웹 페이지를 구축하는 경우.
사용자가 웹 브라우저 주소창에 웹사이트 주소를 입력합니다. 브라우저는 입력된 주소의 호스트 명을 가져와서 DNS(도메인 네임 시스템) 서버에 해당 호스트명에 대한 IP 주소를 조회합니다. DNS는 호스트 명을 IP 주소로 변환합니다. 브라우저는 얻어진 IP 주소를 사용하여 TCP/IP 연결을 시도합니다. 브라우저는 HTTP 요청 메시지를 전송합니다. 서버는 요청을 받고 해당하는 리소스를 브라우저에게 응답합니다. 응답은 HTTP 상태코드와 함께 전송됩니다. (ex. 200, 404) 브라우저는 서버로부터 받은 HTML문서를 해석하고, 다른 리소스를 다운로드 합니다. 모든 리소스가 다운로드 되면 브라우저는 html 문서를 화면에 렌더링하고, 사용자가 볼 수 있는 웹페이지가 표시됩니다.