React 컴포넌트 개발: 복잡한 Boolean Prop 대신 컴포지션으로 확장성 및 유지보수성 확보

Composition Is All You Need | Fernando Rojo at React Universe Conf 2025

작성자
Token Ruby
발행일
2025년 09월 08일

핵심 요약

  • 1 복잡한 React 컴포넌트의 유지보수성 문제를 해결하기 위해 Boolean Prop 남용 대신 컴포지션 패턴을 활용하는 방법을 제시합니다.
  • 2 Slack 컴포저 사례를 통해 모놀리식 컴포넌트의 한계를 지적하고, JSX와 Context API 기반의 컴포넌트 분할 및 상태 리프팅 전략을 제안합니다.
  • 3 컴포지션은 코드 가독성을 높이고, 상태 관리 구현을 유연하게 교체하며, AI 기반 개발 환경에서도 생산성을 향상시키는 효과적인 방법입니다.

도입

React 애플리케이션 개발 시, 단일 컴포넌트 내에서 다양한 UI와 로직을 처리하기 위해 `isUpdateUser`, `isEditMessage`와 같은 Boolean Prop을 남용하는 경향이 있습니다. 이는 컴포넌트의 복잡도를 증가시키고 유지보수를 어렵게 만들며, 코드의 가독성을 저해하여 확장성을 제한하는 주요 원인이 됩니다. 본 발표는 이러한 문제점을 지적하고, 복잡한 UI를 효율적으로 관리하며 확장 가능한 React 컴포넌트를 구축하기 위한 '컴포지션(Composition)' 기반의 설계 원칙을 심도 있게 다룹니다.

강연자는 Slack 컴포저와 같은 복잡한 UI를 예시로 들어 Boolean Prop 기반의 개발 방식이 어떻게 코드의 난잡함을 초래하는지 설명합니다. 채널, DM, 스레드, 메시지 편집 및 전달 등 다양한 사용 사례를 하나의 컴포넌트에서 Boolean Prop으로 분기 처리할 경우, 수많은 조건문과 Props가 발생하여 코드가 이해하기 어렵고 버그 발생 가능성이 높아집니다.이러한 문제를 해결하기 위해 다음과 같은 컴포지션 접근 방식을 제안합니다.

1. 모놀리식 컴포넌트 분할

  • Boolean Prop 제거: isEditingMessage와 같은 Boolean Prop 대신, 각 기능(예: DropZone, FooterActions)을 독립적인 컴포넌트로 분리합니다. 특정 기능이 필요 없으면 해당 컴포넌트를 렌더링하지 않음으로써 조건문을 제거합니다.

  • JSX 활용: 조건부 렌더링을 위해 복잡한 Props 배열 대신 JSX를 직접 사용하여 각 액션 버튼(PlusMenu, Emojis, TextFormat)을 명시적으로 선언합니다. 이는 코드의 의도를 명확히 하고 가독성을 높입니다.

  • 재사용 가능한 컴포넌트 묶음: 자주 사용되는 액션 그룹(예: CommonActions)은 여러 개별 컴포넌트를 묶어 재사용 가능한 형태로 만듭니다. 필요시 언제든 개별 컴포넌트로 분리하여 유연하게 커스터마이징할 수 있습니다.

2. Context API를 통한 상태 관리 및 로직 분리

  • ComposerProvider 도입: 컴포저의 공통 인터페이스(상태, 액션)를 정의하는 ComposerProvider를 도입하여, 내부 컴포넌트들이 이 Context를 통해 상태에 접근하고 액션을 호출하도록 합니다.

  • 상태 관리 구현의 유연성: ComposerProvider는 상태 관리의 인터페이스만 정의하고, 구현은 Provider를 렌더링하는 상위 컴포넌트에서 담당합니다. 예를 들어, 임시 상태에는 useState를, 전역 동기화 상태에는 useGlobalChannel과 같은 커스텀 훅을 사용할 수 있습니다. 이를 통해 동일한 UI 컴포넌트라도 사용되는 맥락에 따라 다른 상태 관리 로직을 적용할 수 있습니다.

  • 상태 리프팅(Lifting State): 컴포저 UI 외부에 있는 버튼(예: 메시지 전달 모달의 ‘전달’ 버튼)이 컴포저의 상태와 액션에 접근해야 할 경우, ComposerProvider를 컴포저 UI보다 높은 트리 레벨로 이동시켜 해당 버튼이 Context에 접근할 수 있도록 합니다. 이는 useEffectsrender props와 같은 복잡한 패턴 없이 간결하게 상태 공유를 가능하게 합니다.

이러한 컴포지션 기반 접근 방식은 React 컴포넌트의 복잡성을 줄이고, 유연한 확장성을 제공하며, AI 기반 코드 생성 환경에서도 더 적은 버그와 높은 생산성을 기대할 수 있게 합니다.

결론

결론적으로, 본 강연은 React 컴포넌트 개발 시 Boolean Prop의 과도한 사용이 초래하는 문제점을 명확히 지적하고, 그 대안으로 컴포지션 패턴을 강력히 제안합니다. JSX를 활용한 명시적인 컴포넌트 구성과 Context API를 통한 유연한 상태 관리, 그리고 상태 리프팅 전략은 컴포넌트의 가독성, 유지보수성, 확장성을 극대화하는 핵심 원칙입니다. 이러한 접근 방식은 인간 개발자뿐만 아니라 AI 에이전트의 생산성까지 향상시키며, 복잡한 애플리케이션의 코드베이스를 효과적으로 관리할 수 있는 모범적인 개발 방법론을 제시합니다. 15개의 Boolean Prop에 갇히기보다, 컴포지션이 모든 해답임을 강조합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!