feat(design-token): XML 디자인 토큰 리소스를 추가한다

This commit is contained in:
2026-05-15 19:50:44 +09:00
parent bf2a5c7489
commit 7f0e7b0ff7
4 changed files with 303 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
# XML 디자인 토큰 리소스 추가
## 작업 목표
- XML 레이아웃에서 재사용할 수 있는 색상, Spacing, Radius 디자인 토큰 리소스를 추가한다.
- 구현 범위는 XML 리소스 추가로만 한정한다.
## 구현 계획
### Task 1: Color 토큰 리소스 추가
**Files:**
- Modify: `app/src/main/res/values/colors.xml`
- [x] **Step 1: RED - 신규 color 토큰 부재 확인**
Run: `rg -n '<color name="(soda_400|red_400|green_400|gray_900)">' app/src/main/res/values/colors.xml`
Expected: 토큰 추가 전에는 매칭 결과가 없어 실패한다.
- [x] **Step 2: Primary, Semantic, Gray color 토큰 추가**
`colors.xml`의 기존 리소스 하단에 요청된 `soda_*`, `red_*`, `green_*`, `gray_*` color 리소스를 추가한다.
- [x] **Step 3: GREEN - 대표 color 토큰 확인**
Run: `rg -n '<color name="(soda_400|red_400|green_400|gray_900)">' app/src/main/res/values/colors.xml`
Expected: `soda_400`, `red_400`, `green_400`, `gray_900`이 모두 조회된다.
### Task 2: Spacing/Radius dimen 리소스 추가
**Files:**
- Create: `app/src/main/res/values/dimens.xml`
- [x] **Step 1: RED - 신규 dimen 토큰 부재 확인**
Run: `rg -n '<dimen name="(spacing_16|spacing_48|radius_8|radius_14)">' app/src/main/res/values`
Expected: 토큰 추가 전에는 매칭 결과가 없어 실패한다.
- [x] **Step 2: Spacing과 Radius dimen 토큰 추가**
`dimens.xml`을 생성하고 요청된 spacing 11개와 radius 3개를 `dp` 값으로 추가한다.
- [x] **Step 3: GREEN - 대표 dimen 토큰 확인**
Run: `rg -n '<dimen name="(spacing_16|spacing_48|radius_8|radius_14)">' app/src/main/res/values/dimens.xml`
Expected: `spacing_16`, `spacing_48`, `radius_8`, `radius_14`가 모두 조회된다.
### Task 3: 리소스 검증 및 문서 기록
**Files:**
- Modify: `docs/plan-task/20260515_XML디자인토큰리소스추가.md`
- [x] **Step 1: XML LSP 진단 실행**
Run: `lsp_diagnostics(app/src/main/res/values/colors.xml)``lsp_diagnostics(app/src/main/res/values/dimens.xml)`
Expected: 새 XML 리소스에 새 오류가 없다. XML LSP가 환경에 없으면 그 사실을 검증 기록에 남긴다.
- [x] **Step 2: 디버그 빌드 실행**
Run: `./gradlew :app:assembleDebug`
Expected: `BUILD SUCCESSFUL`
- [x] **Step 3: 검증 기록 누적**
문서 하단 `검증 기록`에 실행한 명령, 결과, 빌드 성공 여부를 한국어로 기록한다.
## 체크리스트
- [x] AC1: `soda_50`부터 `soda_900`까지 10개 Primary Color 토큰이 존재한다.
- QA: `colors.xml`에서 이름과 hex 값 확인
- [x] AC2: `red_50`부터 `red_400`, `green_50`부터 `green_400`까지 Semantic Color 토큰이 존재한다.
- QA: `colors.xml`에서 이름과 hex 값 확인
- [x] AC3: `gray_50`부터 `gray_900`까지 10개 Gray Color 토큰이 존재한다.
- QA: `colors.xml`에서 이름과 hex 값 확인
- [x] AC4: spacing 11개와 radius 3개 dimen 토큰이 존재한다.
- QA: `dimens.xml`에서 이름과 dp 값 확인
- [x] AC5: 기존 XML 레이아웃, Kotlin 코드, Compose 파일은 변경하지 않는다.
- QA: 변경 파일 목록에서 리소스/문서 외 변경이 없는지 확인
- [x] AC6: 리소스 빌드 검증을 수행한다.
- QA: `./gradlew :app:assembleDebug`
## 검증 기록
- 2026-05-15
- 무엇/왜/어떻게: 구현 전 PRD와 계획 문서를 작성했다. 사용자 지시에 따라 범위는 XML 리소스 추가로만 제한했다.
- 실행 명령/도구:
- `read(app/src/main/res/values/colors.xml)`
- `read(app/src/main/res/values/themes.xml)`
- `rg --files app/src/main/res/values | rg 'dimens|spacing|radius|shape'`
- 결과:
- 기존 프로젝트는 XML 리소스 중심이며 Compose 사용 흔적이 확인되지 않았다.
- 기존 `dimens.xml`은 없어 새 파일 생성 대상으로 정리했다.
- 2026-05-15
- 무엇/왜/어떻게: TDD 방식으로 토큰 추가 전 대표 color/dimen 조회가 실패함을 확인한 뒤, XML 리소스만 추가했다.
- 실행 명령/도구:
- `rg -n '<color name="(soda_400|red_400|green_400|gray_900)">' app/src/main/res/values/colors.xml`
- `rg -n '<dimen name="(spacing_16|spacing_48|radius_8|radius_14)">' app/src/main/res/values`
- `apply_patch`
- 결과:
- 토큰 추가 전에는 대표 color/dimen 토큰 조회 결과가 없었다.
- `colors.xml`에는 요청된 color 토큰 30개를 추가했다.
- `dimens.xml`에는 요청된 spacing 토큰 11개와 radius 토큰 3개를 추가했다.
- 2026-05-15
- 무엇/왜/어떻게: 추가된 XML 리소스가 조회되고 Android 리소스 빌드가 가능한지 검증했다.
- 실행 명령/도구:
- `rg -n '<color name="(soda_[0-9]+|red_[0-9]+|green_[0-9]+|gray_[0-9]+)">' app/src/main/res/values/colors.xml`
- `rg -n '<dimen name="(spacing_[0-9]+|radius_[0-9]+)">' app/src/main/res/values/dimens.xml`
- `lsp_diagnostics(app/src/main/res/values/colors.xml)`
- `lsp_diagnostics(app/src/main/res/values/dimens.xml)`
- `./gradlew :app:assembleDebug`
- 결과:
- 요청된 color 토큰 30개와 dimen 토큰 14개가 모두 조회됐다.
- XML LSP는 현재 환경에 설정되어 있지 않아 실행 불가(`No LSP server configured for extension: .xml`)였다.
- `./gradlew :app:assembleDebug``BUILD SUCCESSFUL`로 완료됐다.
- 빌드 중 기존 Kotlin deprecation/unchecked cast warning은 출력됐지만 이번 XML 리소스 추가와 무관하며 빌드는 성공했다.