일상이 개발

React 컴포넌트 구조와 실전 패턴: 유지보수가 쉬운 코드 작성법

디어노미 2025. 4. 4. 19:06
반응형

⚛️ React 컴포넌트 구조와 실전 패턴: 유지보수가 쉬운 코드 작성법

React를 어느 정도 사용하다 보면 생기는 고민이 있어요.

"컴포넌트가 점점 커지는데, 어떻게 나눠야 하지?"
"파일 구조를 어떻게 잡는 게 좋을까?"

오늘은 초보자도 따라 할 수 있는 React 컴포넌트 구조화 팁
실무에서 자주 사용하는 컴포넌트 설계 패턴을 예시와 함께 소개할게요.


📁 1. React 컴포넌트를 왜 나눠야 할까?

처음에는 App.js 하나로 시작하지만, 기능이 늘어나면 코드가 1000줄 넘는 괴물이 되기 쉽습니다.

컴포넌트를 잘게 나누면:

  • 재사용 가능성 ↑
  • 유지보수 쉬움
  • 기능 단위로 코드 분리

즉, 컴포넌트 구조를 잘 잡아두면 프로젝트가 커져도 흔들리지 않는 React 앱이 됩니다!


🧱 2. 컴포넌트 나누는 기준

가장 흔한 기준은 다음과 같아요:

  • 화면 단위: 페이지(views) → 컴포넌트
  • 기능 단위: 버튼, 리스트, 입력창 등
  • 역할 단위: 로직 담당 vs UI 담당

예를 들어 쇼핑몰이라면?

  • Page: ProductPage.js
  • Components: ProductCard, AddToCartButton

 


📌 3. 파일 구조, 이렇게 짜보세요

src/
├── pages/
│   └── HomePage.js
├── components/
│   ├── Header.js
│   ├── Footer.js
│   └── ProductCard/
│       ├── index.js
│       ├── ProductCard.css
│       └── ProductCard.test.js
├── hooks/
├── utils/
└── App.js

💡 팁: 컴포넌트 폴더 단위로 관리하면 스타일, 테스트 파일도 함께 묶을 수 있어요!


💡 4. 실전에서 자주 쓰는 컴포넌트 패턴

이제 실무에서 자주 보는 패턴 3가지를 소개할게요.

① 프레젠테이셔널 vs 컨테이너 패턴

  • 프레젠테이셔널(Presentational): UI 중심 (스타일, 레이아웃)
  • 컨테이너(Container): 데이터 중심 (API, 상태 관리)
// ProductList.js (Container)
function ProductList() {
  const [products, setProducts] = useState([]);

  useEffect(() => {
    fetchProducts().then(setProducts);
  }, []);

  return <ProductListView items={products} />;
}
// ProductListView.js (Presentational)
function ProductListView({ items }) {
  return (
    <ul>
      {items.map(item => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
}

② Atomic Design

디자인 시스템 관점에서 구성하는 방법입니다.

  • Atoms: 버튼, 텍스트 등 가장 작은 단위
  • Molecules: 입력창 + 버튼 조합
  • Organisms: 헤더, 카드 리스트 등 큰 조합

→ 디자인/기획과 협업할 때 강력한 구조예요.

③ Layout 패턴

공통되는 구조 (헤더 + 본문 + 푸터)를 재사용하는 방식입니다.

// Layout.js
function Layout({ children }) {
  return (
    <div>
      <Header />
      <main>{children}</main>
      <Footer />
    </div>
  );
}
// App.js
<Layout>
  <HomePage />
</Layout>

→ 페이지마다 공통 레이아웃을 반복하지 않아도 됨


🧩 5. 상태 관리도 구조화 포인트!

컴포넌트를 나누다 보면 상태(state)도 복잡해져요.

  • 부모 → 자식으로 전달 (props)
  • 전역 상태 관리 사용 (Context, Redux, Zustand 등)

상태가 얽히기 시작하면 컴포넌트 구조 + 상태 흐름을 함께 설계해야 해요.


📚 6. 참고 리소스


📝 마무리

React에서 컴포넌트 구조를 잘 잡는 건 유지보수와 협업에 큰 차이를 만들어냅니다.

지금은 하나의 버튼을 만들더라도, 나중엔 여러 화면과 기능을 유기적으로 구성하는 프로젝트를 만들게 될 거예요.

처음엔 단순하게,
하지만 원칙을 가지고 구조를 설계해보세요!

다음 글에서는 props와 state를 실제로 어떻게 활용하는지에 대해 더 깊게 들어가볼게요! 😄

반응형