SVG에서 타입이 있는 React 컴포넌트 만들기

원시 SVG 마크업을 재사용 가능한 TSX 아이콘으로 바꾸고 색상, 크기, 접근성 동작을 일관되게 유지합니다.

SVG를 그대로 코드에 붙여 넣으면 props가 제각각이고 하드코딩 값이 남기 쉽습니다. 이 가이드는 더 정돈된 React + TypeScript 아이콘 워크플로를 제공합니다.

1) SVG 입력 정규화

  • 변환 전에 불필요한 그룹, 메타데이터, 인라인 스타일을 정리합니다.
  • 컴포넌트의 크기 동작이 예측 가능하도록 viewBox를 보존합니다.
  • 한 화면에 여러 아이콘이 렌더링될 때 충돌을 피하려고 ID와 mask 이름을 정리합니다.

2) 타입 안전 컴포넌트 생성

  • 완전한 IntelliSense를 위해 SVG props를 확장하는 TypeScript props를 사용합니다.
  • 기본 width/height를 제공하되 부모에서 쉽게 override할 수 있게 둡니다.
  • 아이콘이 텍스트 색을 따라야 하면 고정 fill 대신 currentColor를 사용합니다.

3) 디자인 시스템에 통합

  • 아이콘을 예측 가능한 폴더에 두고 하나의 barrel 파일에서 export합니다.
  • CI에서 잘못된 SVG 속성이 들어오지 않도록 lint 규칙이나 테스트를 둡니다.
  • aria-label과 의미 있는 크기 토큰 사용 예시를 문서화합니다.

SVG to React TypeScript FAQ

아이콘 컴포넌트는 고정 색상을 써야 하나요, currentColor를 써야 하나요?
디자인 시스템 아이콘이라면 보통 currentColor가 더 좋습니다. 부모 텍스트나 테마 토큰에서 색상을 제어할 수 있기 때문입니다.
아이콘 props는 어떻게 타입을 잡아야 하나요?
기본은 React.SVGProps<SVGSVGElement>를 사용하고, 정말 필요할 때만 선택적 커스텀 props를 추가하면 됩니다.
접근성 라벨은 유연하게 유지할 수 있나요?
가능합니다. title이나 aria-label props를 노출하고, 장식용 아이콘은 기본적으로 aria-hidden 처리하는 방식이 일반적입니다.
React 변환 전에 먼저 최적화해야 하나요?
네. 먼저 최적화하면 불필요한 노이즈를 줄일 수 있고 TSX 파일에 쓸데없는 속성이 따라오는 것을 막을 수 있습니다.