[React] 리액트에 대한 이해

서동경·2023년 6월 22일
0
post-thumbnail

🌳 리액트란?

리액트는 선언적 프로그래밍, 컴포넌트 기반 아키텍처, 단방향 데이터 흐름, 가상 돔, 상태 관리, react-router를 통한 라우팅, 그리고 클라이언트 사이드 렌더링과 같은 특성들을 결합하여 사용자 경험을 개선하고 개발 생산성을 향상시키는 동시에 유지보수가 용이한 애플리케이션을 구축하는 데 도움을 준다. 또한 효율적인 사용자 인터페이스 개발이 가능하게 한다.

🌱 선언적 프로그래밍

리액트는 선언적 프로그래밍 스타일을 채택하여 UI 개발을 간편하게 만든다. 선언적 프로그래밍은 개발자가 원하는 결과를 명시하고, 시스템이 그 결과를 달성하기 위해 필요한 단계를 자동으로 처리하는 방식으로, 리액트에서는 UI를 컴포넌트로 선언하고 이 컴포넌트가 어떻게 보여져야 하는지를 명시한다. 리액트는 컴포넌트의 상태 변화를 감지하고 자동으로 UI를 업데이트하여 선언된 결과를 유지한다.

📌 선언적 프로그래밍 vs 명령형 프로그래밍

선언적 프로그래밍은 개발자가 원하는 결과를 명시하고, 시스템이 그 결과를 달성하기 위해 필요한 단계를 자동으로 처리하는 방식으로, 개발자는 "무엇(What)"을 수행해야 하는지에 초점을 맞추며, 내부적인 구현과 단계를 상세히 명시하지는 않는다. 선언적 프로그래밍에서 코드는 더 간결하고 추상화되며, 개발자는 세부 사항에 집중하기보다는 문제 해결과 로직 흐름에 집중할 수 있다. 다만 추상화 수준이 높아 개발자가 세부적인 제어를 하기 어려울 수 있다는 단점이 있다.

반면에 명령형 프로그래밍은 개발자가 명시적으로 단계와 상태를 제어하는 방식으로, 개발자는 "어떻게(How)" 문제를 해결할지를 세부적으로 작성하며, 코드는 순차적이고 절차적인 특징을 가지게 된다. 명령형 프로그래밍에서는 개발자가 상태와 동작을 명시적으로 변경하고 제어해야 하므로 코드가 더 복잡해질 수 있지만, 이 복잡한 코드로 인해 세부적인 조작이 가능하다는 장점이 있다.

🌱 컴포넌트 기반

리액트는 컴포넌트 기반 라이브러리이다. 컴포넌트는 독립적이고 재사용 가능한 UI 조각으로, 작고 독립적인 부분으로 UI를 구성함으로써 전체 애플리케이션을 구축한다. 또한, 컴포넌트 간의 계층 구조를 통해 복잡한 UI를 쉽게 구성할 수 있다. 이러한 컴포넌트 기반 접근 방식은 개발자들에게 모듈화와 재사용성을 제공하므로 개발 생산성을 향상시키고, 유지보수와 테스트를 용이하게 해준다.

🌱 가상 DOM

리액트의 핵심 개념 중 하나인 가상 DOM(Virtual DOM)은 높은 성능과 효율성을 제공하는데 중요한 역할을 한다. 가상 DOM은 리액트가 UI의 변경 사항을 효율적으로 감지하고 관리하기 위해 사용되는 메커니즘이다. 리액트는 가상 돔을 통해 UI 변경을 실제 DOM에 적용하기 전에 가상 DOM 트리에서 변경 사항을 비교하고 최소한의 변경만을 DOM에 적용함으로써 성능을 향상시킨다.

🌱 생명 주기

리액트 컴포넌트는 생명 주기(Lifecycle)라고 불리는 다양한 단계를 거치며 동작한다. 생명 주기 메서드를 활용하여 컴포넌트의 생성, 업데이트, 제거 등의 특정 시점에서 필요한 작업을 수행할 수 있다. 생명 주기 메서드는 컴포넌트가 마운트(Mount), 업데이트(Update), 언마운트(Unmount)되는 시점에서 호출되는 메서드이다.

🌱 단방향 데이터 흐름

리액트는 상위 컴포넌트에서 하위 컴포넌트로 데이터가 전달되는 단방향 데이터 흐름 특성를 가진다. 이러한 데이터 흐름은 "props"를 통해 이루어진다. 하위 컴포넌트에서는 이 props 데이터를 읽기만 할 수 있고 변경할 수는 없다. props 데이터의 변경은 상위 컴포넌트에서 이루어지며, 변경된 데이터는 다시 하위 컴포넌트로 전달되어 UI를 업데이트한다. 이러한 특성은 애플리케이션의 상태 변화를 추적하기 쉽게 만들어 줌으로써, 예측 가능하고 디버깅이 용이한 코드를 작성할 수 있게 해준다.

🌱 상태 관리

리액트에서 애플리케이션의 데이터와 상태를 효율적으로 관리하기 위해 다양한 패턴과 라이브러리를 사용할 수 있다. 리액트에서 제공하는 useState를 이용한 로컬 상태 관리가 가능하고, Context API, Redux, Recoil, React-Query 등 다양한 상태 관리 도구를 이용해 전역으로 상태를 관리하는 것도 가능하다.

🌱 SPA

SPA(Single Page Application)는 페이지 전체를 새롭게 로드하지 않고 동적으로 콘텐츠를 업데이트하는 애플리케이션으로, 초기 로딩 시 필요한 리소스를 한번 가져오고 이후에는 서버와의 통신을 통해 데이터를 한번씩 가져와 업데이트한다. react-router는 리액트 애플리케이션에서 라우팅을 관리하기 위한 라이브러리로, SPA 구현에 핵심적인 라이브러리이다. react-router를 사용하면 URL 경로에 따라 다른 컴포넌트를 렌더링할 수 있고, 이를 통해 다양한 경로를 가진 SPA 구현이 가능해진다.

🌱 CSR + SSR

리액트는 기본적으로 자바스크립트와 마찬가지로 클라이언트 사이드 렌더링(Client-Side Rendering / CSR)로 동작한다. 그러나 리액트를 Next.js 등과 같은 프레임워크와 함께 사용한다면, 리액트에서 서버 사이드 렌더링(Server-Side Rendering / SSR) 방식을 사용하여 CSR의 단점을 보완할 수 있다. 즉, 초기 로딩 속도를 향상시키고 검색 엔진 최적화에 유리한 렌더링이 가능해진다.

profile
개발 공부💪🏼

0개의 댓글