티스토리 뷰

IT

리액트 핵심 기술 분석과 최적화 전략

고등어아빠 2024. 4. 1. 22:20

목차



    반응형

    리액트는 개발자의 생태계가 가장 폭넓게 형성된 개발 프레웜워크 중 하나입니다. 개발자들이 리액트를 선택하게 되는 핵심 기술인 가상 DOM과 컴포넌트 기반 아키텍처에 대해서 자세하게 살펴보겠습니다. 또한 상태관리 패턴과 최적화 전략에 대해서도 간단하게 짚어보겠습니다.

    1. 가상 DOM

    1) 리액트의 가상 DOM 개념과 작동 원리 설명

    Virtual Dom 과 Browser Dom
    Virtual Dom 과 Browser Dom

    DOM(돔)이라는 말은 Document Object Model의 줄임말입니다. 또한 DOM은 HTML, XML 또는 XHTML 문서의 구조화된 표현이며, 프로그래밍 언어에서 이를 조작할 수 있는 API를 제공합니다. 각 HTML 요소는 DOM 노드로 표현되며, 이러한 노드들의 계층 구조를 통해 문서를 탐색하고 조작할 수 있습니다.

     

    리액트에서는 이러한 DOM 조작을 보다 효율적으로 처리하기 위해 가상 DOM을 사용합니다. 가상 DOM은 실제 DOM의 가벼운 복제본으로, 메모리에만 존재하는 가상의 트리 구조입니다.

    리액트 애플리케이션은 상태(state)가 변경되면, 가상 DOM을 사용하여 렌더링 작업을 수행합니다. 이때, 리액트는 변경된 부분만을 실제 DOM에 반영하여 UI를 업데이트합니다. 이 과정에서 전체 DOM을 다시 생성하는 것보다 훨씬 빠르고 효율적입니다.

    2) 실제 DOM과의 비교 및 이점

    실제 DOM 조작은 비용이 많이 드는 작업입니다. 예를 들어, DOM 요소를 추가하거나 제거할 때마다 브라우저는 화면을 다시 그리고 레이아웃을 다시 계산해야 합니다. 반면 가상 DOM은 메모리 상에서만 작업하므로, 실제 DOM 조작에 비해 훨씬 빠릅니다.  가상 DOM은 또한 효율적인 업데이트 전략을 사용하여 불필요한 렌더링을 방지하고 성능을 최적화합니다. 이는 애플리케이션의 사용자 경험을 향상하고, 더 많은 동시 사용자를 지원할 수 있게 도와줍니다.

     

    2. 상태 관리

    1) 리액트의 상태 관리 방법과 주요 라이브러리(예: Redux, MobX) 소개

    리액트는 내부 상태 관리를 위한 기능을 제공하지만, 대규모 애플리케이션에서는 복잡성이 증가할 수 있습니다. Redux, MobX 등의 상태 관리 라이브러리를 사용하면 상태를 중앙 집중식으로 관리하고, 상태 변화를 예측 가능하게 만듭니다.

    • Redux : Redux는 JavaScript 애플리케이션의 상태를 관리하기 위한 예측 가능한 상태 컨테이너입니다. Redux는 단방향 데이터 흐름을 따르며, 애플리케이션의 상태를 하나의 객체로 관리합니다. 이러한 단일 상태 트리는 애플리케이션의 상태 변화를 예측 가능하게 만들어줍니다. Redux는 액션(action), 리듀서(reducer), 스토어(store)로 구성되어 있으며, 각각 상태 변화를 위한 이벤트, 이벤트에 따른 상태 변경 로직, 그리고 전체 애플리케이션 상태를 담고 있는 컨테이너 역할을 합니다.
    • MobX : MobX는 리액트 애플리케이션에서 상태를 관리하기 위한 간단하고 강력한 도구입니다. MobX는 관찰 가능한 상태를 정의하고, 이 상태에 연결된 액션을 통해 자동으로 관련된 UI를 업데이트합니다. MobX는 상태 변화를 자동으로 추적하고 필요한 경우 UI를 자동으로 업데이트하기 때문에, 개발자가 상태 관리에 더 많은 시간을 할애할 필요가 없습니다.

    2) 상태 관리 패턴 및 최적화 전략

    Redux에서는 일반적으로 상태를 불변 객체로 관리하고, 순수 함수인 리듀서를 사용하여 상태를 변경합니다. 이를 통해 상태의 예측 가능성과 테스트 용이성을 보장합니다. 또한 Redux에서의 최적화는 주로 성능 최적화와 관련이 있습니다. createSelector를 사용하여 계산된 값을 캐싱하고, 불필요한 렌더링을 방지합니다.

     

    MobX에서는 관찰 가능한 상태를 정의하고, 이를 관련된 컴포넌트와 연결하여 UI를 자동으로 업데이트합니다. 이는 개발자가 코드를 작성할 때 상태 변경을 직접 관리하지 않아도 되기 때문에 생산성을 향상시킵니다. 그리고 MobX에서의 최적화는 주로 상태의 변경 범위를 최소화하여 업데이트를 최적화하는 것입니다. autorun, reaction 등의 메서드를 사용하여 필요한 경우에만 상태 변경을 추적하고, 불필요한 렌더링을 방지합니다.

     

     

    3. 컴포넌트 기반 아키텍처

    1) 리액트의 컴포넌트 기반 아키텍처의 장점

    컴포넌트 기반 아키텍처는 UI를 작은 단위로 분할하여 개발과 유지 보수를 용이하게 합니다. 이러한 아키텍처의 주요 장점은 다음과 같습니다.

    • 재사용성: 컴포넌트 기반 아키텍처는 작고 독립적인 컴포넌트로 UI를 구성하므로, 이러한 컴포넌트들은 다른 프로젝트에서도 재사용할 수 있습니다. 이는 코드의 중복을 줄이고 개발 생산성을 향상시킵니다.
    • 유지 보수 용이성: 각각의 컴포넌트는 개별적으로 관리되므로, 한 컴포넌트의 수정이 다른 컴포넌트에 영향을 미치지 않습니다. 이는 애플리케이션의 유지 보수를 용이하게 만들어줍니다.
    • 확장성: 새로운 기능을 추가하거나 변경할 때 컴포넌트 기반 아키텍처는 확장성이 뛰어납니다. 새로운 기능은 새로운 컴포넌트로 쉽게 추가할 수 있으며, 각 컴포넌트는 독립적으로 개발 및 테스트될 수 있어서 전체 애플리케이션을 효율적으로 관리할 수 있습니다.
    • 코드의 가독성 및 유지 관리: 컴포넌트 기반 아키텍처는 UI를 작은 단위로 나누기 때문에 코드의 가독성이 높아집니다. 각 컴포넌트는 특정 기능이나 역할을 수행하기 때문에, 코드의 의도를 파악하기 쉽습니다. 이는 개발자가 코드를 이해하고 유지 관리하기 쉽게 만들어줍니다.
    • 테스트 용이성: 각각의 컴포넌트는 독립적으로 테스트할 수 있으므로, 컴포넌트 기반 아키텍처는 테스트 용이성이 높습니다. 이는 개발자가 코드의 품질을 유지하고 버그를 더 빨리 발견할 수 있도록 도와줍니다.

    2) 컴포넌트 간 통신 및 재사용성

    컴포넌트 간 통신은 props와 state를 통해 이루어집니다. 부모 컴포넌트는 자식 컴포넌트에 props를 전달하여 데이터를 주입하고, 자식 컴포넌트는 이 props를 사용하여 UI를 렌더링 합니다. 또한 자식 컴포넌트는 이벤트를 발생시켜 부모 컴포넌트에 데이터를 전달할 수도 있습니다.

     

    재사용성을 높이기 위해선 컴포넌트를 작게 나누고, 각각의 컴포넌트가 단일한 책임을 가지도록 설계해야 합니다. 이렇게 하면 각 컴포넌트를 다른 곳에서도 쉽게 재사용할 수 있습니다. 또한 컴포넌트를 추상화하여 다양한 상황에서 유연하게 사용할 수 있도록 만들어야 합니다.

     

    추가 정보 더 보기

    [자마린의 핵심 기술 : 바인딩,UI, 성능]

    [플러터의 3대 핵심 기술 분석]

    반응형