Repository navigation
chore(build): 리소스 네이밍 규칙 정본 + resourcePrefix 도입 1단계 — 설정된 2개 모듈은 199개 전량 준수, 미설정 모듈은 제각각 #1071
Description
리소스 이름 규칙이 모듈마다 다르다. 강제 수단(android.resourcePrefix)은 이미 이 레포에서 쓰이고 있고 준수율 100%인데, 두 모듈에만 걸려 있다.
실측 기준 리비전: 6b381db8 (origin/develop) · 대상: 각 모듈 src/main/res 의 <string> + drawable*
현황 — 걸어 둔 곳은 지켜지고, 안 건 곳은 제각각
| 모듈 | resourcePrefix |
리소스 | 미준수 |
|---|---|---|---|
core/ui |
core_ui_ |
47 | 0 |
feature/mindrecord/presentation |
mindrecord_ |
152 | 0 |
feature/afternote/presentation |
없음 | 347 | 268 (77%) |
feature/setting/presentation |
없음 | 120 | 119 (99%) |
feature/onboarding/presentation |
없음 | 85 | 83 (98%) |
feature/timeletter/presentation |
없음 | 22 | 13 |
app |
없음 | 6 | 5 |
feature/receiver/presentation · feature/home/presentation · core/common |
없음 | 22 · 7 · 4 | 0 (우연히 일치) |
설정한 두 모듈은 199개 전량이 프리픽스를 지킨다. 규칙을 문서로 합의한 게 아니라 빌드 설정 한 줄이 강제한 결과다.
미설정 모듈에서는 한 모듈 안에 프리픽스가 여러 종류로 갈린다. 가장 큰 feature/afternote/presentation 의 문자열 285개:
receiver_* 118 afternote_* 79 feature_* 26
home_* 9 content_* 8 biometric_* 8 (그 외)
부재의 대가
1. 다른 모듈 몫이 남의 모듈에 눌러앉는다. feature/afternote 에 있는 receiver_* 118개가 그것이다 — 이름이 이미 receiver_ 인데 애프터노트 모듈 strings.xml 에 들어 있고, 이걸 되돌리는 게 #1066 이다. resourcePrefix 가 걸려 있었다면 receiver_verify_* 를 애프터노트 모듈에 만드는 순간 lint 가 지적했다.
2. 모듈 간 같은 이름 3건 — 전부 값까지 같은 중복이다.
| 리소스 | 어디 | 실태 |
|---|---|---|
string/app_name "Afternote" |
app · feature/afternote |
앱 모듈 값이 라이브러리 값을 덮으므로 애프터노트 쪽은 무효한 정의 |
string/login_kakao_failed "카카오 로그인에 실패했습니다." |
feature/afternote · feature/onboarding |
실사용은 onboarding(LoginEntry.kt:54). 애프터노트 쪽은 사용 0건, 죽은 중복 |
drawable/ic_list (54줄) |
feature/setting · feature/timeletter |
각자 사본. 아이콘 사본 문제는 #635 가 같은 모듈에서 ic_image·ic_file 로 다루는 중 |
3. 화면별 프리픽스는 모듈 경계를 표시하지 못한다. setting·onboarding 처럼 화면 단위 프리픽스(withdraw_*·signup_*)를 쓰는 모듈은 한 모듈 안에서는 일관돼 보이지만, 첫 토큰이 여러 모듈에 걸친 것이 9종이다.
| 첫 토큰 | 걸친 모듈 |
|---|---|
receiver_* |
afternote 118 · receiver 22 · setting 3 |
login_* |
onboarding 15 · afternote 4 · setting 4 |
home_* |
home 7 · afternote 9 |
afternote_* · timeletter_* · setting_* · content_* · app_* · core_* |
각 2모듈 |
위 2번의 login_kakao_failed 충돌이 바로 이 면에서 터진 것이고, login_* 은 3개 모듈에 23개가 흩어져 있어 다음 후보다. 특히 setting 은 남의 도메인 토큰을 9개 쓰고 있다(receiver_ 3 · login_ 4 · afternote_ 1 · timeletter_ 1) — #1066 이 고치는 병(수신자 리소스가 애프터노트 모듈에 눌러앉음)의 축소판이다.
4. CI 에 태울 자리가 이미 있다. lint.yml 에 Android Lint job(reviewdog)이 돌고 있다. resourcePrefix 위반은 lint ResourceName 으로 보고되므로, 설정만 하면 신규 유입은 PR 에서 잡힌다.
이 이슈의 범위 — 규칙 정본 + 리네임 0건인 1단계
일괄 리네임은 규모가 커서(setting 119 · afternote 268 · onboarding 83) 한 이슈로 묶을 수 없고, 모듈마다 담당자가 다르다. 규칙은 여기서 정하고 실행은 모듈별로 쪼갠다.
이 이슈가 하는 것 — 프리픽스 확정 + 이미 지켜지는 3개 모듈에 설정 추가. 리네임 0건이라 즉시 착수 가능하다.
| 모듈 | 프리픽스 | 리네임 |
|---|---|---|
feature/receiver/presentation |
receiver_ |
0 (22개 전량 이미 receiver_home_*) |
feature/home/presentation |
home_ |
0 |
core/common |
core_common_ |
0 |
모듈별 실행분
| 이슈 | 모듈 | 규모 | 담당 | 대기 |
|---|---|---|---|---|
| #1077 | setting |
문자열 104 · 그림 15 | 박경민 | 드로어블은 #635 뒤 |
| #1078 | onboarding |
문자열 82 · 그림 1 | 정일혁 | 없음 |
| #1079 | afternote |
268 → #1066 이 118 가져간 뒤 재측정 | 정일혁 | #1066 |
리소스를 옮기는 이슈는 옮기면서 최종 이름까지 맞춘다 — #1066 이 수신자 리소스 87개를 receiver_ 규칙으로, #1069 가 "인증번호 받기" 중복 정의를 하나로. 같은 리소스를 두 번 만지지 않기 위해서다.
이 이슈에서 하지 않는 것 — 근거
timeletter— 문자열 9개는 이미 전량 준수고, 미준수는 드로어블 13개뿐이다. 그중ic_image·ic_file·default_profile·ic_list를 refactor(core): 동일 화살표 렌더링을 기존 ArrowIcon에 위임한다 #635 가 core:ui 사본 정리로 이미 다루고 있어 치환되면 리네임 대상에서 사라진다. 남는 9개(container·down_vector·setting·ic_align_*3 ·ic_block·ic_mic·ic_text)도 담당이 같아 refactor(core): 동일 화살표 렌더링을 기존 ArrowIcon에 위임한다 #635 에 얹었다.app— 미준수 5건이 전부 리네임하면 안 되는 것이다.app_name은 매니페스트android:label이 참조하는 관례 이름,fcm_*3개는@string/fcm_notification_channel_id로 매니페스트 메타데이터가 참조,ic_launcher_background/_foreground는 adaptive icon 규약 이름이다. 앱 모듈은 R 병합의 최종 목적지라 프리픽스 필요성도 낮다. 대상에서 제외한다.
착수 전 확인할 것
resourcePrefix위반이 경고인지 오류인지 — 기존 위반이 남은 모듈에 설정을 걸면 CI reviewdog 이 대량 지적을 쏟을 수 있다. 1단계(미준수 0건 모듈)부터 하는 이유이기도 하다.- lint baseline 으로 기존분을 덮을지, 아니면 해당 모듈은 리네임이 끝난 뒤에 설정을 걸지 결정.
완료 조건
-
receiver·home·core/common에resourcePrefix추가 (리네임 0건) - 모듈별 프리픽스 표를 이 이슈에 확정 기록 — 실행 이슈들이 이걸 참조한다
-
resourcePrefix위반이 경고인지 오류인지, 기존 위반이 남은 모듈에 걸었을 때 CI reviewdog 이 어떻게 반응하는지 실측해 기록 (실행 이슈들의 착수 조건) - 실행분 refactor(setting): 문자열 114개·그림 15개에 setting_ 접두사를 적용한다 #1077 · chore(onboarding): 리소스 네이밍을 onboarding_ 프리픽스로 통일 — 문자열 82 미준수, login_* 3모듈 충돌면 해소 (#1071 실행분) #1078 · 리소스 네이밍을 afternote_ 프리픽스로 통일 — #1066 착륙 후 잔여 (#1071 실행분) #1079 완료 후, 첫 토큰이 2개 이상 모듈에 걸친 경우가 0인지 재측정
Activity
[-]chore(build): 리소스 네이밍을 resourcePrefix 로 강제 — 설정된 2개 모듈은 199개 전량 준수, 미설정 5개는 제각각 + 이름 충돌 3건[/-][+]chore(build): 리소스 네이밍 규칙 정본 + resourcePrefix 도입 1단계 — 설정된 2개 모듈은 199개 전량 준수, 미설정 모듈은 제각각[/+]OnlyReadOneBook commentedon Aug 25, 2026
착수 조건 실측 —
resourcePrefix위반은 경고가 아니라 오류다이슈가 실행분(#1077 · #1078 · #1079)의 착수 조건으로 남긴 물음의 답입니다. 이미 준수 중인
core/common에 일부러 어긋나는 프리픽스(zz_)를 걸고:core:common:lintDebug를 돌렸습니다.경고가 아니라 오류이고 빌드를 실패시킵니다. 따라오는 결론 둘:
resourcePrefix설정을 같은 PR 에 담아야 합니다.lintDebug자체가 실패하므로pr-validation.yml의 Android Lint job 이 그대로 게이트입니다.프리픽스 표 정본은 문서로 옮겼습니다
실행 이슈들이 참조할 표는 PR #1185 가 신설하는
docs/convention/resource-naming.md에 있습니다 — 이 코멘트가 아니라 그쪽이 정본입니다(모듈이 늘 때 갱신할 자리가 하나여야 하므로).core/uicore_ui_core/commoncore_common_feature/home/presentationhome_feature/receiver/presentationreceiver_feature/mindrecord/presentationmindrecord_feature/setting/presentationsetting_feature/onboarding/presentationonboarding_feature/afternote/presentationafternote_feature/timeletter/presentationtimeletter_core/*는core_<모듈>_,feature/*는<기능>_입니다.app모듈은 제외합니다(미준수 5건이 전부 매니페스트·adaptive icon 규약 이름이라 바꾸면 안 되는 것들).이름은 기존 화면 토큰을 지우지 않고 앞에 프리픽스만 붙이는 방식으로 통일했습니다(#1078 에서
signup_title→onboarding_signup_title). 화면 구분 정보를 잃지 않고 diff 도 읽기 쉽습니다.