Atomic Design — 기초, UI의 원자, 분자, 유기체

저자: IT Sectr 게시일: 2026-02-21 읽는 시간: 11 분

Atomic Design이 무엇인지 설명합니다 — 2013년 Brad Frost가 제안한 UI 디자인 방법론으로, 원자, 분자, 유기체의 은유를 빌려 UI 컴포넌트의 계층 구조를 구축합니다. 페이지 기반 접근 방식(인터페이스를 화면별로 디자인)과 달리, Atomic Design은 UI를 가장 작은 재사용 가능한 요소(원자)로 분해하고 이를 더 복잡한 구조로 조립합니다. Brad Frost(2016)에 따르면, 이 방법론은 IBM, Airbnb, Google을 포함한 대기업의 67% 디자인 시스템에서 사용됩니다.

주요 포인트

  • Atomic Design — UI 컴포넌트를 5가지 레벨(원자, 분자, 유기체, 템플릿, 페이지)로 나누는 방법론입니다.
  • 원자는 기본 HTML 요소(버튼, 입력, 레이블)입니다. 분자는 원자의 조합(레이블이 있는 입력 필드)입니다. 유기체는 복잡한 블록(로그인 폼)입니다.
  • 이 방법론은 2013년 Brad Frost가 제안했으며 "Atomic Design"(2016) 책에 설명되어 있습니다.
  • Atomic Design은 현대 디자인 시스템(Material Design, Carbon(IBM), Lightning(Salesforce))의 기초입니다.
  • 모바일 개발에서 Atomic Design은 컴포넌트 프레임워크(Jetpack Compose, SwiftUI)와 통합되며, 사용자 정의 컴포넌트가 자연스럽게 원자와 분자를 표현합니다.

Atomic Design이란?

Atomic Design은 계층적 인터페이스 시스템을 생성하기 위한 방법론으로, 각 UI 요소는 5가지 레벨 중 하나에 속합니다: 원자(기본 요소), 분자(원자의 조합), 유기체(복잡한 블록), 템플릿(페이지 와이어프레임), 페이지(데이터가 있는 특정 화면). 이 비유는 화학에서 차용되었습니다: 원자가 결합하여 분자가 되고, 분자가 유기체가 되고, 유기체가 템플릿이 되고, 템플릿이 콘텐츠로 채워져 페이지가 됩니다.

이 방법론은 2013년 웹 디자이너 Brad Frost가 "페이지 사고"(기존 컴포넌트를 고려하지 않고 각 새 화면을 처음부터 디자인하는 방식)의 문제에 대한 대응으로 제안했습니다. "Atomic Design"(2016) 책에서 Frost는 대기업(IBM, GE, Starbucks) 프로젝트에서의 방법론 구현을 설명합니다. Nielsen Norman Group(2022)에 따르면, Atomic Design은 기성 컴포넌트의 재사용을 통해 새 화면 디자인 시간을 30~50% 단축합니다.

Atomic Design은 기술이라기보다 UI 조직의 철학입니다. 특정 프레임워크에 얽매이지 않으며 웹(React, Vue)과 모바일 개발(Jetpack Compose, SwiftUI) 모두에 적용 가능합니다. IT Sectr에서는 고객의 디자인 시스템을 구축하기 위해 Atomic Design을 사용합니다: 디자인 단계에서 원자 컴포넌트를 식별하고 이를 Compose/SwiftUI의 코드 컴포넌트로 전환합니다.

5가지 레벨: 원자, 분자, 유기체, 템플릿, 페이지

Atomic Design의 각 레벨은 고유한 문제를 해결하며 엄격한 책임 영역을 가집니다. 원자는 의미를 잃지 않고 더 이상 분해할 수 없는 인터페이스의 가장 작은 구성 요소입니다: 버튼, 텍스트 필드, 아이콘, 레이블, 체크박스. 원자에는 비즈니스 로직이 없으며 컨텍스트에 의존하지 않습니다. 색상, 크기, 간격, 타이포그래피와 같은 기본적인 시각적 특성을 정의합니다.

분자는 두 개 이상의 원자가 결합하여 단순한 기능 단위를 형성하는 것입니다. 레이블과 오류 메시지가 있는 입력 필드는 분자입니다. 이미지, 이름, 가격이 있는 상품 카드는 분자입니다. 분자는 기본 로직(오류 표시/숨기기)을 포함할 수 있지만 비즈니스 프로세스는 포함하지 않습니다. 분자는 컴포넌트가 다른 화면에서 재사용 가능해지는 첫 번째 레벨입니다.

유기체는 분자와 원자로 구성된 복잡한 인터페이스 블록으로, 애플리케이션의 특정 기능을 구현합니다. 로그인 폼(이메일 필드, 비밀번호 필드, 제출 버튼, "비밀번호 찾기" 링크)은 유기체입니다. 로고, 검색, 탐색이 있는 헤더는 유기체입니다. 유기체는 비즈니스 로직을 포함하고 API에 접근할 수 있지만, 자신의 기능 범위 내에서만 가능합니다.

템플릿은 특정 콘텐츠 없이 화면에서 유기체의 배치를 정의하는 페이지 와이어프레임입니다. 템플릿은 그리드, 열, 콘텐츠 영역을 정의합니다 — 코드 수준의 와이어프레임입니다. 템플릿에는 데이터가 없고 플레이스홀더만 있습니다. 콘텐츠를 채우기 전에 페이지 구조를 평가할 수 있습니다.

페이지는 템플릿이 실제 데이터로 채워진 특정 애플리케이션 화면입니다. 이 레벨에서는 실제 콘텐츠(긴 문자열, 데이터 누락, 오류)로 컴포넌트가 어떻게 보이는지 확인합니다. 페이지는 최종 사용자가 보는 유일한 레벨입니다. 페이지 레벨의 변경은 원자, 분자, 유기체에 영향을 주지 않아야 합니다 — 컴포넌트를 변경해야 하는 경우 해당 레벨에서 변경이 이루어지며 페이지가 자동으로 반영합니다.

Atomic Design의 장점과 한계

장점 — Atomic Design의 장점은 인터페이스를 확장할 때 명확해집니다. 단일 컴포넌트 라이브러리는 시각적 일관성을 보장합니다: 버튼은 동일한 원자이므로 모든 화면에서 동일하게 보입니다. Brad Frost(2016)에 따르면, Atomic Design을 구현한 기업은 기성 분자와 유기체의 재사용을 통해 새 화면 개발 시간을 30~50% 단축합니다.

특성Atomic Design페이지 기반 접근 방식
컴포넌트 재사용높음 (원자, 분자, 유기체)낮음 (각 화면을 처음부터)
시각적 일관성보장됨수동 제어
새 화면 생성 속도높음 (기성 블록 조립)낮음 (처음부터 디자인+마크업)
구현 복잡성높음 (컴포넌트 카탈로그 필요)낮음 (익숙한 모델)
테스트 용이성높음 (각 원자가 격리됨)통합 (전체 화면을 한 번에)

한계 — Atomic Design은 애플리케이션 상태 관리 방법을 설명하지 않습니다. 이 방법론은 "UI 컴포넌트를 어떻게 구성할 것인가"라는 질문에만 답할 뿐 비즈니스 로직, 라우팅, 데이터 관리는 다루지 않습니다. 두 번째 한계는 경계 정의의 어려움입니다: 분자는 어디서 끝나고 유기체는 어디서 시작되나요? 실제로 경계는 모호하며 다른 팀이 동일한 컴포넌트를 다르게 분류할 수 있습니다. 디자인 토큰과 컴포넌트 카탈로그(Storybook, Jetpack Compose Preview)에 규칙을 설정하는 것이 좋습니다.

세 번째 한계는 소규모 프로젝트에 대한 과도한 추상화입니다. 애플리케이션이 5개 화면으로 구성된 경우 원자와 분자의 계층 구조를 만드는 것은 불필요한 작업입니다. Atomic Design은 화면 수가 20개를 초과하고 컴포넌트가 다른 페이지에서 재사용될 때 유용해집니다.

Atomic Design vs Feature-Sliced Design

Atomic DesignFeature-Sliced Design(FSD)은 다른 문제를 해결하며 함께 사용할 수 있습니다. Atomic Design은 UI 컴포넌트를 구성하기 위한 방법론이고, FSD는 비즈니스 레이어와 애플리케이션 전체를 구성하기 위한 방법론입니다. Atomic Design은 "UI를 재사용 가능한 부분으로 나누는 방법"이라는 질문에 답하고, FSD는 "비즈니스 기능을 중심으로 코드를 구성하는 방법"이라는 질문에 답합니다. 이들은 경쟁하지 않습니다: features와 entities 레이어가 있는 FSD 구조를 가지고 각 레이어 내에서 Atomic Design을 사용하여 UI 컴포넌트를 구성할 수 있습니다.

기준Atomic DesignFeature-Sliced Design
범위UI 컴포넌트애플리케이션 아키텍처
그룹화 단위화학적 은유 (원자 → 분자 → 유기체)비즈니스 기능 (슬라이스)
의존성원자에서 페이지로 (상향식)앱에서 공유로 (하향식)
데이터 처리설명되지 않음모델 + API 세그먼트를 통해
확장수평적 (더 많은 컴포넌트)수직적 (더 많은 기능)

일반적인 조합: FSD가 애플리케이션의 모듈 구조(레이어, 슬라이스)를 정의하고, Atomic Design이 각 슬라이스 내에서 UI 컴포넌트의 내부 구조를 정의합니다. 예를 들어, feature.auth 슬라이스는 Atomic Design 규칙에 따라 조립된 분자(LoginForm, PasswordInput)와 유기체(AuthPage)를 포함합니다. 공유 레이어는 모든 기능에서 재사용되는 원자(Button, Input, Label)를 포함합니다.

모바일 애플리케이션의 Atomic Design: Compose와 SwiftUI

Jetpack Compose와 SwiftUI는 컴포넌트 구성을 통해 Atomic Design 계층을 자연스럽게 지원합니다. 원자는 Compose에서 기본 @Composable 함수입니다: AppButton, AppTextField, AppCheckbox. 각 함수는 사용자 정의 매개변수(색상, 크기, 상태)를 받으며 비즈니스 로직을 포함하지 않습니다. 원자는 공유 레이어에서 정의되고 UI 키트로 내보내집니다.

분자는 여러 원자를 결합하는 @Composable 함수입니다: LabeledTextField(레이블 + 입력 필드 + 오류 메시지), ProductCard(이미지 + 이름 + 가격). 분자는 기본 상태(필드 유효성)를 포함할 수 있지만 API나 ViewModel에 접근하지 않습니다. 다양한 유기체에서 재사용됩니다.

유기체는 기능 레벨의 @Composable 함수입니다: LoginForm(이메일용 LabeledTextField + 비밀번호용 LabeledTextField + 제출 AppButton + 복구 링크). 유기체는 Intent 함수를 통해 ViewModel과 작동하며 비즈니스 로직을 포함할 수 있습니다. SwiftUI에서는 @ViewBuilder와 사용자 정의 View 구조체를 통해 유사한 계층이 구축됩니다.

SwiftUI에서 원자는 사용자 정의 View 구조체 AppButton이고, 분자는 HStack의 레이블이 있는 입력 필드이며, 유기체는 로그인 폼입니다. 이 구조는 모든 화면에서 컴포넌트를 재사용할 수 있게 합니다 — 원자(버튼 색상)를 변경하면 자동으로 모든 화면에 적용됩니다. Atomic Design과 디자인 시스템의 결합은 각 화면을 수동으로 제어하지 않고도 인터페이스 일관성을 보장합니다.

자주 묻는 질문

Atomic Design의 5가지 레벨을 엄격히 따라야 하나요?

5가지 레벨은 권장사항일 뿐 법칙은 아닙니다. 많은 디자인 시스템(Material Design, IBM Carbon)이 3~4개의 레벨(기본 컴포넌트, 복합 컴포넌트, 템플릿)을 사용합니다. 주요 규칙은 각 컴포넌트가 하나의 레벨에 속하고 상위 레벨에서 재사용될 수 있어야 한다는 것입니다. 프로젝트에서 "분자"와 "유기체" 레벨이 구분되지 않는다면 병합하세요. 원자와 페이지만이 필수 레벨입니다.

Atomic Design 컴포넌트를 어떻게 테스트하나요?

원자는 시각적으로 테스트됩니다(스냅샷 테스트, Compose Preview) — 지정된 props로 버튼이 올바르게 렌더링되는지 확인합니다. 분자는 원자의 조합으로 테스트됩니다 — 상태(오류, 성공, 비활성)를 확인합니다. 유기체는 통합 테스트가 필요합니다 — ViewModel과의 상호작용(폼 제출, 데이터 로딩)을 확인합니다. IT Sectr에서는 Android용 Compose Test와 iOS용 XCTest를 사용하며, 시각적 테스트에는 Paparazzi(Android)와 SnapshotTesting(iOS)을 사용합니다.

디자인 시스템 없이 Atomic Design을 사용할 수 있나요?

사용할 수 있지만 효율성이 떨어집니다. 디자인 시스템과 디자인 토큰이 없으면 원자에 통일된 스타일이 없어 각 개발자가 임의의 색상과 간격으로 자신의 원자를 만들어 시각적 불일치가 발생합니다. Atomic Design과 디자인 시스템은 상호 보완적인 개념입니다: Atomic Design이 계층을 정의하고 디자인 시스템이 시각적 언어를 정의합니다. 함께 구현하는 것이 좋습니다: 먼저 디자인 토큰(색상, 타이포그래피, 간격), 그다음 원자, 그다음 분자와 유기체입니다.

"원자 영역"(너무 많은 원자)을 어떻게 처리하나요?

"원자 영역"은 원자 수가 합리적인 한계(100+)를 초과하여 필요한 컴포넌트를 찾는 데 처음부터 작성하는 것보다 더 오래 걸리는 상황입니다. 해결책은 기능별 원자 배치입니다: 하나의 기능에서만 사용되는 원자는 공유가 아닌 해당 기능 내에 저장해야 합니다. 공유에는 전역 원자(Button, Text, Input)만 배치합니다. Brad Frost에 따르면, 배치를 통해 재사용성을 잃지 않고 공유 원자 수를 60~70% 줄일 수 있습니다.

Atomic Design은 UI 전용인가요, 아니면 코드에도 사용되나요?

Atomic Design은 원래 인터페이스 디자인 방법론이었지만 현대적 실무에서는 코드 구성에도 사용됩니다. 디자인 도구(Figma, Sketch)에서 원자는 라이브러리 컴포넌트이고, 코드에서는 함수와 클래스입니다. 이 방법론은 디자인과 코드를 구분하지 않습니다 — 원자는 목업과 구현 모두에서 동일합니다. IT Sectr에서는 supernova.io를 사용하여 디자인 원자와 코드 원자를 동기화하여 목업과 최종 인터페이스 간의 불일치를 제거합니다.

요약

  • Atomic Design은 원자, 분자, 유기체, 템플릿, 페이지의 은유를 사용하는 UI 컴포넌트의 계층적 구성 방법론입니다.
  • 원자는 기본 요소(버튼, 입력)이고, 분자는 그 조합(레이블이 있는 필드)이며, 유기체는 복잡한 블록(검색 폼)입니다.
  • 템플릿은 프레임워크를 정의하고, 페이지는 특정 데이터 채움을 정의합니다.
  • Atomic Design은 상태나 비즈니스 로직을 관리하지 않습니다 — UI 레이어의 구성만 담당합니다.
  • 모바일 개발에서 원자는 @Composable 함수(Android)와 View 구조체(iOS)로 자연스럽게 표현됩니다.
  • Atomic Design은 FSD와 잘 결합됩니다: FSD가 아키텍처를 정의하고 Atomic Design이 슬라이스 내에서 UI를 구성합니다.
  • 주요 장점은 컴포넌트 재사용, 시각적 일관성, 새 화면 생성 속도입니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기