시맨틱 색상 토큰을 사용하는 방법
브랜드 색상이 초록색이라고 해 봅시다. 기본 버튼도 초록색이고, 성공 메시지도 초록색이며, 선택된 내비게이션 항목도 초록색입니다. 브랜드 색상을 보라색으로 바꾸기 전까지는 모든 것이 조화로워 보입니다. 그렇다면 업로드 성공 표시도 보라색으로 바뀌어야 할까요? 포커스 윤곽선이나 만료 예정인 계정 옆의 경고는 어떨까요?
시맨틱 색상 토큰은 이런 결정을 명확하게 만듭니다. 기본 토큰은 green-700처럼 색상 값에 이름을 붙입니다. 시맨틱 토큰은 action-primary-background나 status-success-text처럼 색상의 역할에 이름을 붙입니다. 컴포넌트가 역할을 참조하면 브랜드를 변경할 때 비슷한 색조를 쓰는 모든 곳을 뜻하지 않게 바꾸지 않고, 의도한 역할만 변경할 수 있습니다.
예방하려는 실수부터 살펴보세요
“Create project”(프로젝트 만들기) 버튼, “Saved”(저장됨) 확인, 오류 메시지, 선택된 사이드바 링크가 있는 작업 공간을 상상해 보세요. 원래 디자이너는 버튼과 확인 메시지, 선택된 링크에 같은 짙은 초록색을 골랐습니다. 개발자는 합리적으로 그 값을 한 번 저장해 재사용했습니다. 그런데 새로운 브랜드 방향에 따라 다른 기본 색상을 사용해야 합니다.
공유 초록색 변수를 바꾸면 세 요소가 모두 바뀝니다. 구현은 원래 코드에 충실하지만 결정은 잘못되었습니다. 확인 메시지가 초록색인 이유는 브랜드의 주요 동작을 나타내서가 아니라 성공을 전달하기 때문이었습니다. 이 구분은 디자이너의 머릿속에만 있었고 재사용 가능한 규칙에는 담기지 않았습니다.
토큰을 추가하기 전에 이 구분을 쉬운 말로 적어 보세요. “주요 동작은 제품 브랜드를 따른다. 성공 피드백은 상태의 의미를 유지한다. 선택 상태는 명확하게 구분되어야 한다.” 이런 문장은 어떤 값들을 함께 바꿔도 되는지 알려 주므로 이름 규칙부터 정하는 것보다 가치가 있습니다.
Atlassian이 인터페이스에서 색상의 역할을 보여 주는 방법
Atlassian의 색상 가이드는 Jira 보드의 선택 상태, 텍스트, 브랜드 버튼 배경을 토큰에 연결해 보여 줍니다. 그 용어 체계는 색상의 역할을 강조 수준 및 상호작용 상태와 구분합니다. 선택과 키보드 포커스도 별도로 취급합니다. 선택된 요소는 포커스 표시가 추가되어도 선택 상태의 표현을 유지해야 합니다.
설명을 덧붙인 인터페이스가 팔레트만 있는 것보다 왜 유용한지 살펴보세요. 색상 견본은 값을 알려 줄 수 있습니다. 보드는 경험의 어느 부분이 그 값을 사용해야 하고 그 이유는 무엇인지 보여 줍니다. 색상의 채도만 보고 용도를 추측하는 대신, 라벨이 텍스트를 가리키는지, 표면을 가리키는지, 아이콘을 가리키는지 확인할 수 있습니다.
작은 시스템이라면 전체 이름 목록을 가져오기 전에 이런 습관부터 도입하세요. 제안한 토큰을 실제 사용 사례 옆에 배치하고, 어떤 변화가 그 토큰을 바꾸게 되는지 설명하며, 그 토큰이 제어해서는 안 되는 사례도 하나 보여 주세요. “브랜드 동작”과 “작업 성공”은 처음에 같은 초록색이어도 서로 독립된 결정일 수 있습니다. 매핑에 이 차이를 표현할 수 없다면 인터페이스의 의미가 아니라 팔레트를 저장하고 있는 것입니다.
의존성 테스트를 구체적으로 만드세요
작은 별칭 매핑만으로도 실수를 드러낼 수 있습니다. 다음 예시 매핑에서는 성공과 기본 동작이 처음에는 같은 값을 사용하지만 서로 다른 역할을 참조합니다.
:root {
--palette-green-700: #236646;
--palette-purple-700: #6439a8;
--action-primary-bg: var(--palette-green-700);
--action-primary-fg: #fff;
--status-success-text: var(--palette-green-700);
}
[data-brand="purple"] {
--action-primary-bg: var(--palette-purple-700);
}
브랜드 속성을 바꾸면 --action-primary-bg를 사용하는 요소들이 바뀌어야 합니다. --status-success-text를 사용하는 성공 라벨은 바뀌면 안 됩니다. 둘 다 바뀐다면 새 색조를 고르기 전에 실제 컴포넌트가 무엇을 참조하는지 살펴보세요. 어느 쪽도 바뀌지 않는다면 직접 지정된 색상 값이나 우선순위가 더 높은 덮어쓰기 규칙을 확인하세요. 이는 의존성 테스트입니다. 예시로 사용한 값은 실제 맥락에서 별도의 대비 검사가 필요합니다.
다음으로 전경색과 배경색을 함께 시험하세요. 동작의 표면과 그 위의 라벨은 한 쌍입니다. 표면만 바꾸면 이전에는 읽기 쉬웠던 라벨이 기준에 미달할 수 있습니다. 어두운 브랜드 색상을 밝은 색상으로 바꿀 때 특히 그렇습니다. 이 역할들이 한 쌍이라는 점을 매핑에 기록해, 검토자가 기억해 내기를 기대하는 대신 하나를 바꾸면 다른 하나도 검토하도록 하세요.
마이그레이션은 세 단계로 확인하세요.
- 값은 그대로 유지하세요. 별칭을 도입하고 기존 시각적 기준과 비교합니다. 예상하지 못한 차이는 매핑 오류일 수 있습니다.
- 한 가지 역할만 일시적으로 바꾸세요. 바뀌지 않아야 하는 요소를 포함해 의도한 모든 사용처를 확인합니다.
- 승인된 테마로 복원하세요. 호버, 포커스, 비활성, 선택 상태의 조합을 검토합니다. 의도적으로 직접 지정한 값은 아직 끝내지 못한 마이그레이션 작업과 구분해 기록합니다.
두 사용처가 지금 같은 값을 쓰더라도 서로 다른 역할이 필요할 수 있습니다. 하나를 바꾸면 다른 하나도 의도적으로 바뀌어야 할 때만 합치세요.
값, 역할, 컴포넌트의 결정을 구분하세요
작은 시스템은 두 계층으로 시작할 수 있습니다. 값 계층에는 실제 색상을 두고, 역할 계층에서는 그 값을 인터페이스의 용도에 연결합니다. 개별 컴포넌트가 독립적으로 바뀌어야 한다면 세 번째인 컴포넌트 전용 계층이 유용하지만, 모든 작은 프로젝트에 반드시 필요한 것은 아닙니다.
예를 들어 neutral-950에 가장 어두운 중성색을 저장할 수 있습니다. text-primary와 border-strong이 처음에는 모두 이 값을 가리켜도 됩니다. 그래도 두 역할은 다릅니다. 본문 가독성을 개선한다고 모든 강한 테두리까지 반드시 어두워져야 하는 것은 아니기 때문입니다. 지금 값이 같다는 사실은 두 결정을 영원히 같은 이름으로 묶어야 한다는 근거가 되지 않습니다.
반대의 실수는 눈에 보이는 모든 요소마다 고유한 토큰을 만드는 것입니다. 일반 본문 문단이 모두 같은 역할을 한다면 문단마다 별도 텍스트 토큰을 주는 것은 의미를 더하지 않은 채 유지보수만 늘립니다. “둘 중 하나만 의도적으로 바꿀 일이 있을까?”라고 물어보면 유용합니다. 그렇다면 역할을 나눌지 고려하고, 그렇지 않다면 기존 역할을 재사용하세요.
| 계층 | 예시 | 답하는 질문 |
|---|---|---|
| 기본 값 | green-700 |
어떤 값을 사용할 수 있는가? |
| 시맨틱 | status-success-text |
이 색상은 어떤 역할을 하는가? |
| 필요에 따른 컴포넌트 계층 | toast-success-icon |
어느 부분을 독립적으로 제어해야 하는가? |
이름은 모든 컴포넌트를 열어 보지 않고도 올바르게 선택할 수 있도록 도와야 합니다. 입력 오류 테두리를 찾는 개발자가 accent-strong, special-red, brand-secondary 중 무엇이 위험 상태를 뜻하는지 추측하게 해서는 안 됩니다. 특히 같은 맥락을 코딩 에이전트에도 제공한다면, 재치 있는 약어보다 이해하기 쉬운 역할 이름을 우선하세요.
시맨틱 색상을 인터페이스의 역할에 연결하세요
여러 상태를 포함한 대표 페이지를 살펴보는 것부터 시작하세요. 대시보드의 기본 상태를 찍은 정적 스크린샷에는 비활성 동작, 유효성 검사 피드백, 키보드 포커스, 선택된 메뉴 항목이 드러나지 않습니다. 대규모 조직이 언젠가 지원할 수 있는 이론상의 모든 상태가 필요한 것은 아닙니다. 실제 색상 역할을 발견할 만큼 충분한 상태가 필요합니다.
가상의 작업 공간이라면 첫 매핑에 페이지 배경, 떠 있는 표면, 기본 텍스트, 보조 텍스트, 일반 테두리, 기본 동작, 그 동작 위의 텍스트, 선택, 포커스, 성공, 경고, 오류를 포함할 수 있습니다. 어떤 역할에는 전경색과 배경색의 쌍이 필요합니다. 연한 성공 표면과 그 위의 어두운 텍스트는 서로 다른 값이지만 공통된 목적을 가집니다.
첫 검토는 매핑을 확인하는 과정입니다. 예시 페이지에서 보이는 색상을 하나씩 표시하고 무엇을 전달하는지 물어보세요. 연한 초록색 패널이 관련 컨트롤을 묶기만 한다면 표면이나 그룹화 역할에 속합니다. 성공한 작업을 알린다면 피드백에 속합니다. 겉보기에는 비슷해도 앞으로의 변경은 서로 다른 규칙을 따라야 합니다.
토큰 이름 옆에 설명을 함께 두세요. “기본 동작 배경: 섹션에서 사용할 수 있는 가장 중요한 동작”은 단순히 “초록색”이라고 쓰는 것보다 유용합니다. 혼동할 가능성이 있다면 반대 예시도 넣으세요. 이 토큰이 “사람들의 주의를 끌고 싶은 모든 요소”를 뜻하는 것은 아닙니다. 중요한 오류 메시지에도 적절한 피드백 표현을 적용해야 합니다.
확정하기 전에 브랜드 변경을 한 번 적용해 보세요
의도적으로 작은 예시를 보겠습니다. 작업 공간은 초록색 브랜드 동작과 초록색 성공 피드백으로 시작합니다. 이후 동작 색상이 다른 브랜드 색조로 바뀝니다. 버튼과 선택된 내비게이션 표현은 새 방향을 따르게 하되, “Saved”는 알아보기 쉬운 성공 역할을 유지하게 하려는 것입니다.
먼저 브랜드 결정의 영향을 받는 역할을 확인하세요. 버튼 배경과 전경 텍스트는 함께 검토해야 합니다. 선택 상태에는 브랜드에서 파생된 별도 표면이나 표시를 사용할 수 있습니다. 로고는 일반 버튼 토큰이 아니라 브랜드 자산입니다. 로고 자체의 자산 요구사항을 고려하지 않은 채 일반 인터페이스 규칙으로 다시 색칠하지 마세요.
다음으로 페이지 사본에서 역할 매핑을 바꾸세요. 이전 16진수 값이 나타나는 곳을 모두 찾아 무차별적으로 치환하지 마세요. 원시 값 검색은 후보를 찾는 데 유용하지만, 특정 위치의 값이 링크인지, 성공 상태인지, 일러스트의 일부인지는 알려 주지 못합니다.
마지막으로 바뀐 역할의 모든 사용처를 살펴보세요. 기본 동작은 흰 페이지, 연한 패널, 대화상자 안에 나타날 수 있습니다. 한 맥락에서는 선명한 새 채우기 색상이 다른 맥락에서는 주변에 묻힐 수 있습니다. 의도한 사용처에서 계속 올바른 동작을 전달하고 읽을 수 있어야 매핑 변경이 완료된 것입니다.
| 인터페이스 요소 | 예시의 브랜드 변경에서 의도한 동작 |
|---|---|
| 프로젝트 만들기 버튼 | 동작의 배경색과 전경색을 한 쌍으로 검토 |
| 선택된 사이드바 항목 | 선택 상태의 표현을 독립적으로 검토 |
| 저장됨 확인 메시지 | 피드백 자체도 재설계하는 경우가 아니라면 성공 역할 유지 |
| 올바르지 않은 이메일 메시지 | 오류 역할과 설명 문구 유지 |
| 로고 이미지 | 일반 인터페이스 치환 대신 승인된 브랜드 자산 기준 적용 |
모든 것에 색상을 새로 만들지 않으면서 상태를 명세하세요
동작의 기본 외형은 그 동작을 구성하는 일부일 뿐입니다. 호버, 누름, 포커스, 선택, 비활성은 서로 다른 것을 표현할 수 있습니다. 내비게이션 항목은 선택된 상태를 유지하면서 키보드 포커스도 받을 수 있습니다. 버튼은 눌리지 않은 채 포커스만 받을 수 있습니다. 이런 조건을 모두 하나의 “active” 색상으로 합치지 마세요.
각 상태가 전달해야 하는 정보부터 살펴보세요. 호버는 포인터와의 관계를 나타냅니다. 포커스는 키보드 사용자에게 어디에서 상호작용이 일어날지 알려 줍니다. 선택 상태는 유지되는 선택을 나타냅니다. 시각적 표현에 같은 재료를 쓸 수는 있지만, 상태가 함께 나타날 때도 서로 구분할 수 있어야 합니다. 테두리, 밑줄, 아이콘, 모양이 메시지의 일부를 전달할 수 있습니다.
예시 사이드바에는 은은한 선택 배경과 명확한 포커스 윤곽선을 함께 사용할 수 있습니다. 항목이 이미 선택되었다는 이유로 윤곽선이 사라져서는 안 됩니다. 이 결합 상태를 직접 검토하세요. 개별 색상 견본만으로는 실제 컴포넌트에서 두 표현이 서로 방해하는지 알 수 없습니다.
비활성 스타일도 똑같이 신중히 다뤄야 합니다. 사용자가 사용할 수 없는 이유를 추론할 수 없다면 비활성 동작에는 설명이 필요합니다. 버튼을 회색으로 만드는 것만으로는 필수 필드가 빠졌는지, 권한이 없는지, 작업이 이미 실행 중인지 알 수 없습니다. 토큰은 시각적 역할에 이름을 붙일 뿐, 상호작용 로직이나 설명 문구를 대신할 수 없습니다.
컴포넌트별 예외는 드러나게 관리하세요. 삭제처럼 되돌리기 어려운 동작의 확인에 별도 버튼 표현이 필요하다면, 대화상자 하나 안에서 기본 동작 토큰을 조용히 바꾸는 대신 그 목적을 기록하세요. 예외 자체는 타당할 수 있습니다. 의도적인 것인지 일회성 구현 편의인지 아무도 구분할 수 없을 때 문제가 시작됩니다.
색상에 읽을 수 있는 의미를 함께 제공하세요
색상은 인터페이스를 훑어보기 쉽게 하지만, 색조를 구분하기 어려운 상황에서도 의미가 전달되어야 합니다. 빨간 테두리만 있으면 사용자는 무엇이 잘못되었는지 추측해야 합니다. 오류 라벨과 유용한 수정 안내가 있으면 상태를 이해할 수 있습니다. 마찬가지로 “Changes saved”(변경 사항이 저장됨)라는 문구와 함께 있는 성공 아이콘은 라벨 없는 초록색 점보다 더 많은 것을 전달합니다.
W3C의 색상 사용 지침은 정보를 전달하거나 동작을 식별하는 데 색상에만 의존하지 않아야 한다는 요구사항을 설명합니다. 이 원칙을 각 역할의 맥락에 적용하세요. 이 작업 공간에서는 상태 메시지에 읽을 수 있는 텍스트를 제공하고, 선택된 항목에는 눈에 보이는 선택 표현을 유지하며, 링크는 미묘한 색조 차이 외의 방법으로도 알아볼 수 있게 합니다.
대비는 별도로 검사해야 합니다. 색상이 올바른 의미를 전달하더라도 너무 흐려서 읽기 어려울 수 있습니다. 브랜드 색상 견본 전체에 일괄적으로 “접근성 충족”이라는 표시를 붙이지 말고 전경색과 배경색의 쌍을 평가하세요. 연한 성공 표면 위의 어두운 전경색과, 채도가 높은 성공 버튼 위의 흰색 텍스트는 서로 다른 조합입니다.
일반 텍스트에 WCAG의 최소 대비 기준은 보통 4.5:1이며, 조건을 충족하는 큰 텍스트에는 3:1과 정해진 예외가 적용됩니다. W3C의 대비 설명에서 범위와 세부 사항을 확인할 수 있습니다. 실제 색상 쌍과 렌더링된 사용 방식을 측정하세요. 한 쌍이 통과했다고 컴포넌트, 테마, 사이트 전체가 인증되는 것은 아닙니다.
앞에서 쓴 예시 값으로 이를 구체적으로 확인할 수 있습니다. 초록색 #236646과 보라색 #6439a8의 상대 휘도를 계산하면 흰색과의 대비는 각각 6.86:1, 7.80:1입니다. 검정색과의 대비는 같은 채우기 색상에서 각각 3.06:1, 2.69:1입니다. 따라서 두 색상 모두 흰색 라벨로는 일반 텍스트 기준을 충족하지만, 검정색으로는 둘 다 그 기준을 충족하지 못합니다. 이 결과를 결정하는 것은 시맨틱 이름이 아니라 구체적인 전경색과 배경색 값입니다. 계산 결과를 해당 쌍에 연결해 기록하여, 나중에 더 밝은 브랜드 색상을 적용하면 다시 검사하도록 하세요.
모든 실패를 인터페이스 전체를 어둡게 만드는 방식으로 해결하지 마세요. 어느 역할이 어떤 표면과 어떤 상태에서 실패했는지 살펴보세요. 보조 텍스트도 읽혀야 할 역할이 있습니다. 지나치게 흐린 도움말을 “은은하다”라고 부른다고 좋아지지는 않습니다. 반대로 모든 구분선을 짙고 굵게 만들면 시스템이 만들려던 위계가 사라질 수 있습니다.
다크 테마를 새로운 매핑으로 검토하세요
다크 테마는 목적과 외형을 분리하므로 유용한 스트레스 테스트가 됩니다. 기본 텍스트는 여전히 기본 텍스트여야 하지만 값은 바뀝니다. 떠 있는 표면은 여전히 페이지와 구분되어야 합니다. 성공 피드백은 배경색과 전경색 값이 라이트 테마와 달라도 이해할 수 있어야 합니다.
각 기본 색상을 단순히 반전하거나 라이트 테마 값을 어두운 페이지에 그대로 사용하지 마세요. 요소 간 관계를 다시 살펴보세요. 흰색 위에서 균형 잡혀 보이던 밝은 동작 색상이 어두운 표면에서는 지나치게 강해질 수 있습니다. 연한 패널 위에서 부드럽게 보이던 테두리가 사라질 수도 있습니다. 이미지, 로고, 차트에도 시맨틱 색상 매핑 밖의 결정이 필요할 수 있습니다.
두 테마 프리뷰에는 같은 콘텐츠를 사용하세요. 그렇지 않으면 밀도나 이미지 차이 때문에 색상 결정을 판단하기 어려워질 수 있습니다. 폼 오류, 성공 메시지, 선택된 내비게이션 항목, 포커스를 받은 컨트롤, 보조 텍스트를 포함하세요. 이런 상태는 매력적인 기본 버튼을 모아 놓는 것보다 더 유용한 비교를 만듭니다.
비교하는 동안 역할 이름은 안정적으로 유지해야 합니다. 다크 테마에서 text-primary를 white-text로 바꾸고 있다면 역할을 설명하려던 이름에 다시 값을 집어넣는 셈입니다. 의미는 일정하게 유지하고 그 의미를 구현하는 매핑을 바꾸세요.
코딩 에이전트에게 팔레트뿐 아니라 매핑을 제공하세요
에이전트에게 페이지를 다듬어 달라고 할 때는 시각적 참고 자료와 함께 역할에 관한 결정을 제공하세요. 스크린샷은 현재 색상을 보여 주지만 브랜드 변경 중 어떤 색상이 계속 함께 움직여야 하는지, 어떤 상태 조합이 유지되어야 하는지는 설명하지 않습니다. 짧은 매핑 표와 대표 컴포넌트가 있으면 이런 의도를 훨씬 쉽게 확인할 수 있습니다.
지원되는 OpenDesign HTML 프리뷰에서는 렌더링 결과를 검토하고, 제공되는 수동 스타일 편집 기능을 사용하며, 관련 영역에 댓글을 붙여 대화에 활용할 수 있습니다. 이 기능으로 기본 동작 표현을 쓰고 있는 성공 알림처럼 구체적인 불일치를 지적하세요. 피드백에는 화면상의 위치뿐 아니라 의도한 역할도 명시해야 합니다.
예를 들어 성공과 오류 역할은 유지하면서 기본 동작의 매핑을 바꾸고, 영향을 받는 버튼의 여러 상태를 보여 달라고 요청하세요. 기존 프로젝트에 이미 토큰 규칙이 있다면 해당 파일이나 디자인 맥락을 제공하세요. 작은 색상 수정을 하면서 완전히 새로운 이름 체계까지 요구하지 마세요.
시각적인 수정을 한 뒤에는 생성된 파일에서 컴포넌트 참조를 확인하세요. 버튼이 올바르게 보여도 여전히 성공 토큰을 사용하고 있을 수 있습니다. 그러면 다음 테마 변경에서 같은 의존성 오류가 다시 드러납니다.
먼저 대표 컴포넌트 하나를 마이그레이션하세요
사이트 전체를 한 번에 바꾸지 않고도 시맨틱 역할을 도입할 수 있습니다. 프로젝트 생성 폼처럼 의미 있는 상태가 여러 개인 컴포넌트를 고르세요. 현재 값을 나열하고 각각의 역할을 정한 다음 그 역할을 기존 팔레트에 연결합니다. 처음에는 눈에 보이는 디자인을 거의 그대로 유지할 수 있습니다.
그런 다음 통제된 테스트로 역할 매핑 하나를 바꾸세요. 기본 동작들이 함께 바뀌어야 한다면 의도한 버튼들이 실제로 바뀌는지 확인합니다. 상태 메시지가 독립적이어야 한다면 동작 색상에 따라 함께 바뀌지 않는지 확인합니다. 이 테스트는 의존성에 관한 것이며, 임시 시험 색상이 최종 브랜드 색상으로 좋은 선택인지 판단하는 것이 아닙니다.
아직 직접 지정된 값을 사용하는 곳을 기록하세요. 일러스트, 파트너 로고, 데이터 시각화처럼 같은 인터페이스 역할에 속하지 않는 의도적인 사용처도 있을 것입니다. 다른 곳은 마이그레이션이 남아 있는 작업입니다. 다음 사람이 미완료 변환을 승인된 예외로 오해하지 않도록 둘을 구분해 표시하세요.
대표 컴포넌트가 올바르게 동작하면 관련 컴포넌트로 확장하세요. 전체 치환을 신뢰하는 대신 의미 있는 묶음마다 렌더링된 페이지를 검토하세요. 공유 규칙은 열어 두지 않았던 맥락에도 영향을 줄 수 있습니다. 작은 마이그레이션은 인터페이스 전체를 비교하기 어려워지기 전에 그런 맥락을 찾을 기회를 줍니다.
유용한 토큰 검토가 남겨야 하는 것
최종 검토에서는 다른 사람도 사용할 수 있는 매핑을 남겨야 합니다. 역할 이름과 의도한 목적, 지원되는 테마별 현재 값, 동작 방식을 보여 주는 대표 컴포넌트 몇 가지를 포함하세요. 동작 배경 위의 텍스트처럼 다른 역할과 함께 다뤄야 하는 곳에는 메모를 추가하세요. 의미 있는 예외는 기록하되, 모든 픽셀마다 별도 정책을 만들지는 마세요.
팀원에게 이 매핑을 보고 새로운 성공 메시지와 새로운 기본 동작에 쓸 토큰을 고르도록 해 보세요. 색상 견본을 보고 추측하지 않고도 올바르게 고른다면 시스템이 유용하게 작동하는 것입니다. 두 선택이 여전히 모두 “브랜드 초록색을 쓰자”로 이어진다면 토큰을 더 추가하기 전에 역할 설명을 명확히 하세요.