07 · 시스템 소개

네이밍 원칙Naming

컴포넌트 · 토큰 · props · 파일의 이름은 디자인 시스템의 얼굴입니다. 잘 지은 이름은 문서를 읽지 않아도 짐작이 가능하고, 잘못된 이름은 쓸 때마다 확인이 필요합니다.

왜 이름에 공을 들이는가

디자인 시스템을 쓸 때 사람들은 문서를 거의 읽지 않습니다. 자동완성에 뜬 이름 · 동료 코드에 쓰인 이름만 보고 판단합니다. 즉 이름이 문서의 요약이 되어야 합니다.

이 디자인 시스템은 네이밍에서 두 가지 원칙을 지킵니다. 첫째, 업계 통용어가 있으면 새로 만들지 않는다. 둘째, 역할을 먼저, 모양은 나중에. 두 원칙이 충돌하면 역할 우선입니다.

컴포넌트 이름

규칙

  • PascalCase · 단수형 · 약어 금지.
  • HTML · 업계 통용어를 먼저 고려. 필요하면 역할 접두사(Confirm·Select·Form)를 앞에 둡니다.
  • 파일명은 컴포넌트명과 동일. Button.tsx에 Button 컴포넌트만 export.

예시 비교

종류권장지양비고
기본 요소Button · Input · CheckboxBtn · TextField2 · CBoxHTML 요소와 동일한 명칭을 먼저 고려. 축약하지 않습니다.
조합 컴포넌트DatePicker · Combobox · DropdownDateSelector · AutoCompleteInput · SelectMenu기능이 명확한 업계 통용어를 씁니다. 새로 만들지 않습니다.
레이아웃Stack · Grid · DividerVerticalBox · MainGrid · Line레이아웃 원시 개념을 그대로 이름으로 씁니다.
상태 · 피드백Alert · Toast · SkeletonWarning · Popup · LoadingBox역할을 드러내는 명사. “Warning”은 variant 이름이지 컴포넌트 이름이 아닙니다.

토큰 이름

규칙

  • CSS 변수는 --{category}-{role|scale} 패턴. 케밥케이스.
  • 색은 시맨틱(text·accent·danger)을 원시(red-500)보다 앞.
  • 크기는 숫자 스케일. 용도로 이름 짓지 않습니다(공간은 gap-small이 아니라 space-2).

예시 비교

종류권장지양비고
시맨틱 색--color-text · --color-accent · --color-danger--color-black · --color-red-500 · --red원시(raw) 이름 대신 역할(semantic) 이름. 테마 교체가 가능해집니다.
팔레트 스케일--color-gray-50 … --color-gray-900--color-light-gray · --color-dark-gray숫자 스케일로 연속성을 표현. 중간값을 나중에 끼워 넣기도 쉽습니다.
공간--space-2 · --space-4 · --space-8--gap-small · --padding-md용도가 아닌 크기로 명명. 같은 8px을 gap · padding · margin 모두에서 씁니다.
타이포--text-body · --text-heading-lg · --text-caption--font-14 · --font-h1 · --small-text역할 기반. 실제 크기는 토큰 값으로만 바꿉니다.

Props 이름

규칙

  • 불리언에 is/has 접두사를 붙이지 않습니다. 이미 이름 자체가 불리언 의미를 담습니다.
  • 변형은 variant · size · tone 세 슬롯을 기본으로 씁니다.
  • 이벤트는 on + 이벤트명. React의 네이티브 이벤트 명명을 따릅니다.

예시 비교

종류권장지양비고
불리언disabled · loading · requiredisDisabled · hasLoader · isRequiredis/has 접두사를 붙이지 않습니다. 이미 충분히 불리언처럼 읽힙니다.
변형variant="primary" · size="sm" · tone="danger"type="primary" · btnSize="small" · color="red"variant · size · tone 세 슬롯에 담습니다. HTML의 type과 충돌하지 않게.
이벤트onChange · onSelect · onOpenhandleChange · onValueChanged · openHandlerReact 규약(on + 이벤트명)을 따릅니다. 콜백은 수동태로 짓지 않습니다.
제어 · 비제어value / defaultValue · open / defaultOpeninputValue / initialValue · isOpen / startOpenReact의 form 요소 규약과 동일한 쌍. 학습 비용을 줄입니다.

파일 · 폴더 이름

Do
  • 컴포넌트 파일은 PascalCase: Button.tsx · DatePicker.tsx.
  • 페이지 · 유틸 · 훅은 kebab-case: use-toast.ts · format-date.ts.
  • 테스트는 원본 파일명 + .test: Button.test.tsx.
  • Index 재노출은 필요한 경우에만. 깊은 재노출은 피합니다.
Don't
  • 한 파일에 두 개 이상의 기본 export를 두지 않습니다.
  • 폴더명에 대문자(Components/)와 소문자(utils/)를 섞지 않습니다.
  • 버전 번호를 파일명에 붙이지 않습니다(Button2.tsx).
  • index.tsx로만 식별되게 두지 않습니다. 탭에 열렸을 때 구분이 어렵습니다.
Need Help

도움이 필요하신가요?

주님의교회 PCL 디자인 시스템을 적용하시다가 막히는 부분이 있다면, 다음 경로로 직접 문의하실 수 있습니다.