Skip to content

chore(build): 리소스 네이밍 규칙 정본 + resourcePrefix 도입 1단계 — 설정된 2개 모듈은 199개 전량 준수, 미설정 모듈은 제각각 #1071

Closed
3 of 3 issues completed

Description

@OnlyReadOneBook

리소스 이름 규칙이 모듈마다 다르다. 강제 수단(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 으로 기존분을 덮을지, 아니면 해당 모듈은 리네임이 끝난 뒤에 설정을 걸지 결정.

완료 조건

Activity

  1. changed the title [-]chore(build): 리소스 네이밍을 resourcePrefix 로 강제 — 설정된 2개 모듈은 199개 전량 준수, 미설정 5개는 제각각 + 이름 충돌 3건[/-] [+]chore(build): 리소스 네이밍 규칙 정본 + resourcePrefix 도입 1단계 — 설정된 2개 모듈은 199개 전량 준수, 미설정 모듈은 제각각[/+] on Aug 24, 2026
  2. OnlyReadOneBook commented on Aug 25, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    착수 조건 실측 — resourcePrefix 위반은 경고가 아니라 오류다

    이슈가 실행분(#1077 · #1078 · #1079)의 착수 조건으로 남긴 물음의 답입니다. 이미 준수 중인 core/common 에 일부러 어긋나는 프리픽스(zz_)를 걸고 :core:common:lintDebug 를 돌렸습니다.

    core/common/src/main/res/values/strings.xml:3: Error: Resource named
    'core_common_notification_daily_title' does not start with the project's
    resource prefix 'zz_' … [ResourceName]
    
    4 errors
    BUILD FAILED
    

    경고가 아니라 오류이고 빌드를 실패시킵니다. 따라오는 결론 둘:

    프리픽스 표 정본은 문서로 옮겼습니다

    실행 이슈들이 참조할 표는 PR #1185 가 신설하는 docs/convention/resource-naming.md 에 있습니다 — 이 코멘트가 아니라 그쪽이 정본입니다(모듈이 늘 때 갱신할 자리가 하나여야 하므로).

    모듈 프리픽스 도입
    core/ui core_ui_ 완료
    core/common core_common_ #1071 (PR #1185)
    feature/home/presentation home_ #1071 (PR #1185)
    feature/receiver/presentation receiver_ #1071 (PR #1185)
    feature/mindrecord/presentation mindrecord_ 완료
    feature/setting/presentation setting_ #1077
    feature/onboarding/presentation onboarding_ #1078 (PR #1187)
    feature/afternote/presentation afternote_ #1079
    feature/timeletter/presentation timeletter_ #635

    core/* 는 core_<모듈>_, feature/* 는 <기능>_ 입니다. app 모듈은 제외합니다(미준수 5건이 전부 매니페스트·adaptive icon 규약 이름이라 바꾸면 안 되는 것들).

    이름은 기존 화면 토큰을 지우지 않고 앞에 프리픽스만 붙이는 방식으로 통일했습니다(#1078 에서 signup_title → onboarding_signup_title). 화면 구분 정보를 잃지 않고 diff 도 읽기 쉽습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions