React 16.2 Fragment 적용기

문제 상황

컴포넌트에서 여러 엘리먼트를 반환할 때 불필요한 div로 감싸야 했다. 특히 테이블 구조나 Flexbox 레이아웃에서 예상치 못한 스타일 깨짐이 발생했다.

render() {
  return (
    <div> {/* 불필요한 래퍼 */}
      <td>Name</td>
      <td>Value</td>
    </div>
  );
}

Fragment 적용

React 16.2부터 정식 지원되는 Fragment를 도입했다.

import React, { Fragment } from 'react';

render() {
  return (
    <Fragment>
      <td>Name</td>
      <td>Value</td>
    </Fragment>
  );
}

단축 문법도 사용 가능하지만, Babel 설정이 필요해서 명시적 Fragment를 사용했다.

적용 결과

  • 200여 개 컴포넌트에서 불필요한 div 제거
  • 테이블 렌더링 이슈 해결
  • DOM 노드 수 약 15% 감소
  • CSS 선택자 수정 없이 레이아웃 정상화

특히 리스트 컴포넌트에서 key prop을 Fragment에 직접 전달할 수 있어 map 처리가 깔끔해졌다.

items.map(item => (
  <Fragment key={item.id}>
    <dt>{item.title}</dt>
    <dd>{item.description}</dd>
  </Fragment>
))

간단한 변경이지만 마크업 품질이 확실히 개선됐다.