Skip to content

fix(afternote): 목록 아이콘이 category 대신 서비스명 문자열로 결정 — 직접 입력 서비스는 전부 소셜네트워크 아이콘 #622

Closed

Description

@OnlyReadOneBook

📜 Overview (Required)

애프터노트 목록 카드의 아이콘이 서버가 주는 category 를 쓰지 않고 서비스명 문자열 매칭으로 결정된다. 그래서 화이트리스트에 없는 이름 — 특히 "직접 추가하기" 로 입력한 서비스 — 은 카테고리와 무관하게 전부 소셜네트워크 아이콘이 붙는다.

결정 경로

앱은 등록 시 title 자리에 서비스명을 싣는다 (AfternoteEditorFormMapper.kt:166,185,220).

CreateGalleryPayload(title = payload.serviceName, …)
CreatePlaylistPayload(title = payload.serviceName, …)
CreateAccountPayload(title = payload.serviceName, …)

목록 매퍼는 그 title 을 다시 serviceName 으로 되돌린다 (AfternoteListItemDtoToDomain.kt:10-16).

fun AfternoteListItemDto.toDomain() =
    ListItem(
        id = afternoteId.toString(),
        serviceName = title,
        date = formatDateFromServer(createdAt),
        type = categoryToServiceType(category),   // ← category 기반 타입이 여기 이미 있다
    )

그런데 아이콘은 type 이 아니라 serviceName 으로 조회한다 (AfternoteHomeViewModel:59).

iconResId = getIconResForServiceName(serviceName),

getIconResForServiceName 은 화이트리스트 매칭에 실패하면 AfternoteServiceCatalog.serviceTypeFor() 로 넘기는데, 여기 기본값이 소셜네트워크다 (AfternoteServiceCatalog.kt:56-62).

galleryServices.contains(serviceName) -> GALLERY_AND_FILES
businessServices.contains(serviceName) -> BUSINESS
serviceName == MEMORIAL_SERVICE_NAME  -> MEMORIAL
else -> AfternoteServiceType.SOCIAL_NETWORK      // ← 직접 입력한 이름은 전부 여기

영향 범위

  • 정상 동작 — 목록에서 고른 서비스(인스타그램·네이버 메일·갤러리 등)는 이름이 화이트리스트에 걸려 제 아이콘이 나온다. 추억 노트도 MEMORIAL_SERVICE_NAME 상수와 일치해 정상이다.
  • 오표시 — "직접 추가하기" 로 넣은 이름은 어떤 카테고리로 등록했든 소셜네트워크 아이콘이 붙는다. 갤러리 카테고리에 직접 입력한 서비스를 담아도 갤러리 아이콘이 아니다.
  • 2026-07-30 실기기에서 제목이 자유 문장인 데이터 6건(PLAYLIST·GALLERY·SOCIAL 혼재)이 전부 ic_social_pattern 으로 뜨는 것을 확인했다.

type 이 같은 객체 안에 이미 들어 있으므로 getIconResForServiceType(type) 로 바꾸면 해소된다. 서비스별 아이콘을 유지하려면 서비스명 매칭을 먼저 시도하고 실패 시 소셜이 아니라 type 의 카테고리 아이콘으로 떨어지게 하면 된다.

시안 기준값 — 카테고리별 아이콘 보드:

Image

📌 Child Issue(Optional)

No response

📍 Note (Optional)

  • 시안 기준값 — Screen Design 페이지의 애프터노트 카테고리별 아이콘 보드 (34:3342) 가 카테고리별로 아이콘을 둘 서비스를 명시한다.

    카테고리 시안이 정의한 서비스
    소셜 네트워크 (34:3346) 인스타그램·페이스북·X·스레드·틱톡·유튜브·카카오톡·카카오스토리·네이버 블로그·네이버 카페·네이버 밴드·디스코드
    비즈니스 (34:3347) 네이버 메일·다음 메일·구글 메일·outlook
    갤러리 및 파일 (34:3348) 갤러리·구글 포토·네이버 MYBOX·아이클라우드·Onedrive·카카오톡 톡서랍
    재산 처리 (34:3344) "제목만 구현" — 뱅킹(은행)·부동산·증권·유산

    즉 시안이 열거한 서비스 각각에 아이콘이 있고, 그 목록에 없는 임의 서비스명에 무엇을 쓸지는 정의돼 있지 않다. 화면에 뜨는 연필+사각형 그라데이션은 소셜 네트워크 카테고리 아이콘(ic_social_pattern)이 맞고, 잘못된 건 아이콘 자체가 아니라 어느 카드에 붙느냐다. 직접 입력 서비스의 아이콘은 시안에 정의가 없으므로 카테고리 아이콘으로 떨어뜨릴지 별도 기본 아이콘을 둘지는 디자이너 확인이 필요하다.

  • 에디터 서비스 선택 시안 정합 — 직접 추가하기 제거 및 선택 바텀시트 전환 #490 과의 관계 — 직접 추가하기 존폐는 아직 확정이 아니다. 에디터 서비스 선택 시안 정합 — 직접 추가하기 제거 및 선택 바텀시트 전환 #490 은 "제거 확정" 으로 적고 있으나, 근거를 되짚으면 ① 정본 바텀시트에 직접 추가 항목이 없다는 시안 부재와 ② 디자이너 코멘트 트레일 두 가지뿐이다. ②는 2026-04-05 "직접 입력하여 추가시, 해당 종류와 서비스명에 대한 상세페이지 따로 필요"(700:36574, 05-31 04:28:56 resolve) → 7초 뒤 "정해준 리스트만"(2372:23995, 05-31 04:29:03) 인데, 이 다섯 글자를 "직접 추가 폐지" 로 읽는 것은 해석이고 해당 코멘트에 답글이 0건이다. 존폐를 명시적으로 질의한 이력도 없다(파일 코멘트 269건 전수 조회, 2026-07-30). 확인 회신 전까지는 미확정으로 다룬다.

  • 존폐가 어느 쪽으로 결론 나든 이 이슈는 유효하다 — 제거되면 이미 등록된 데이터와 서버로 직접 들어온 자유 제목이 남고, 존치되면 직접 입력 서비스의 아이콘 규칙이 필요하다.

  • 수신자 목록은 반대 증상이다 — 아이콘은 카테고리별로 갈리는데 제목 자리에 enum 원문이 뜬다(fix(afternote): 수신 애프터노트 목록이 제목 대신 카테고리 enum 원문 표시 — MEMORIAL·GALLERY_AND_FILES·SOCIAL_NETWORK 노출 #617). 두 화면이 category 와 title 을 서로 엇갈리게 쓰고 있다.

  • getAfternoteDisplayRes 의 fallback 도 같은 성격 — 매칭 실패 시 stringResId 를 무조건 afternote_category_social_network 로 반환한다(AfternoteDisplayRes.kt:23).

Activity

  1. OnlyReadOneBook commented on Jul 30, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    직접 입력 경로는 현재 앱에서 끝까지 밟을 수 없다 (2026-07-30)

    이슈 본문의 진단을 "직접 입력한 서비스" 로 실제 등록해 확인하려 했으나, #540 때문에 등록 자체가 막힌다. 소셜 에디터에서 수신자 추가 + 버튼이 무동작이고(호출 0건) 수신자는 서버 필수값이라, 앱만으로는 SOCIAL 애프터노트를 만들 수 없다.

    다만 아이콘 결정 경로는 서비스명 문자열 하나만 보므로 직접 입력이든 서버로 직접 들어온 자유 제목이든 같은 분기를 탄다. 실측한 6건(제목이 자유 문장, 카테고리는 PLAYLIST·GALLERY·SOCIAL 혼재)이 전부 ic_social_pattern 으로 뜬 것이 그 분기의 결과다 — 화이트리스트 밖 문자열이면 카테고리와 무관하게 소셜로 떨어진다.

    정리하면 이 이슈의 재현 조건은 "직접 입력" 이 아니라 "서비스명이 AfternoteServiceCatalog 화이트리스트에 없는 애프터노트" 다. #540 이 풀리면 직접 입력으로도 같은 화면을 볼 수 있다.

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

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions