LumoMate
LumoMate/용어집/SurfaceWeb

컴포넌트

컴포넌트는 화면을 구성하는 재사용 가능한 한 조각입니다. 버튼·입력칸·카드처럼 비슷한 모양과 동작이 여러 곳에 등장하는 부분을 한 번 만들어 두고 필요한 곳마다 가져다 씁니다.
컴포넌트의 개념을 표현한 편집형 일러스트.

쉬운 설명

UI 코드를 처음 보면 한 페이지에 모든 게 다 들어 있는 것처럼 보이지만, 실제로는 작은 부품들의 조립체입니다. 버튼 하나가 컴포넌트이고, 검색창·댓글 카드·메뉴 바도 각각 컴포넌트입니다. 페이지는 이 부품들을 조합해서 만듭니다.

컴포넌트로 쪼개는 이유는 두 가지입니다. 첫째, 같은 모양을 여러 군데서 일관되게 쓰기 위해서. 둘째, 한 군데 고치면 모든 곳에 자동으로 반영되도록 하기 위해서. 디자인 팀이 버튼의 둥근 정도를 바꿨을 때, 사이트 전체의 버튼이 한꺼번에 바뀌는 마법은 컴포넌트 덕분에 가능합니다.

컴포넌트는 보통 세 가지 단위로 자랍니다. ① 원소(원자적 부품: 버튼·아이콘), ② 분자(여러 원자를 묶은 부품: 검색 폼은 입력칸 + 버튼), ③ 페이지 섹션(여러 분자를 묶은 영역: 헤더·푸터). 이 사고방식을 정형화한 것이 '아토믹 디자인'이고, 디자인 시스템의 기본 어휘가 됩니다.

동작 방식은 두 가지 입력으로 단순화됩니다. ① props(부모가 넘기는 설정값 — 버튼이라면 '색·크기·라벨'), ② state(컴포넌트 자체의 상태 — '눌렸나·로딩 중인가'). props가 바뀌거나 state가 바뀌면 컴포넌트가 자기 화면을 다시 그립니다. React·Vue·Svelte 같은 프레임워크가 이 사고를 코드로 표준화했습니다.

좋은 컴포넌트를 만드는 일은 의외로 어렵습니다. 너무 일반적이면 어떤 상황에도 맞춰야 해서 옵션이 폭발하고, 너무 구체적이면 비슷한 컴포넌트가 여러 개로 늘어납니다. 보통 '같은 컴포넌트가 세 번 이상 비슷하게 쓰일 때' 추출하기 시작하는 것이 권장됩니다. 그리고 디자인 토큰을 함께 묶어 두면, 색·간격·글꼴 변경이 컴포넌트를 거쳐 전 화면에 자연스럽게 반영됩니다.

컴포넌트의 개념을 본문 안에서 다른 각도로 비춰 보는 편집형 일러스트.
FIG. 1컴포넌트를 다른 각도에서 다시 봅니다.

비유로 보면

컴포넌트는 레고 블록과 비슷합니다. 한 종류의 블록을 잘 만들어 두면, 그것을 모아 자동차도 만들고 집도 만들고 우주선도 만듭니다. 블록의 모양이 통일돼 있어야 끼우기 쉽고, 한 블록의 색을 바꾸면 그 블록을 쓴 모든 모형이 함께 바뀝니다.

어디에서 만나나

React·Vue·Svelte 같은 프런트엔드 프레임워크의 기본 단위, 모바일 앱의 SwiftUI·Jetpack Compose 위젯, 디자인 도구 Figma의 컴포넌트·variants 기능. 회사가 화면 수가 늘기 시작하면 자체 컴포넌트 라이브러리(디자인 시스템)를 운영하는 것이 표준이 됐습니다.

작은 예시

쇼핑몰의 '상품 카드'를 떠올려 보세요. 이미지·상품명·가격·'장바구니' 버튼이 한 묶음입니다. 이 카드 한 종류를 컴포넌트로 만들어 두면, 메인 화면·검색 결과·추천 영역에 똑같이 깔끔하게 나타나고, 가격 표시 형식을 바꾸고 싶으면 컴포넌트 한 곳만 고치면 모든 화면에 반영됩니다.

자주 하는 오해

오해
자주 보이는 오해 둘. ① '컴포넌트는 작을수록 좋다' — 너무 잘게 쪼개면 화면을 만들 때 조립이 무거워집니다. 적절한 크기가 중요합니다. ② '컴포넌트는 디자이너 영역' — 코드와 디자인 양쪽이 같은 컴포넌트 단위로 일해야 진짜 효과가 납니다.

한 줄 정리

컴포넌트의 진짜 가치는 '재사용'보다 '일관성과 변경의 한 곳'입니다. 한 번 잘 추출한 컴포넌트는 그 후의 모든 변경을 단순하게 만들어 줍니다.
매주 월요일 오전 8시

한 주에 한 통,
오래 남는 이해를 보냅니다.

흘려보내지 않는 글만 골라 보내드립니다. 광고와 추적, 외부로 빠지는 미끼 링크 없이 메일 안에서 끝나는 한 통입니다.

언제든 한 번의 클릭으로 해지할 수 있습니다. 스팸은 보내지 않습니다.