Skip to content

fix(afternote): 수정 요청이 명시적 null 을 못 싣는다 — BE 삭제 계약이 열렸는데 FE 가 표현할 수단이 없다 #1596

Closed

Description

@OnlyReadOneBook

작업 유형

bug — 버그·오동작

주 담당 모듈

afternote — 애프터노트

개요

추억 노트 수정(PATCH) 요청에 「이 미디어를 지워라」를 실을 수단이 없다. BE 는 2026-08-30 에 계약을 넓혀 «필드 생략 = 유지» 와 «JSON null = 삭제» 를 갈랐는데(Afternote-BE origin/main 72fee63, BE#259), FE 직렬화 설정에서는 JSON null 이 애초에 나가지 않는다.

원인: AfternotePlaylistRequestDto 의 미디어 필드가 전부 기본값 null 을 들고 있고, core/network NetworkModule.provideJson() 은 encodeDefaults 를 켜지 않는다(기본값 false). 기본값과 같은 값은 키째 빠지므로, 값이 null 이면 필드가 통째로 사라진다.

// feature/afternote/data/.../dto/AfternoteDto.kt
data class AfternotePlaylistRequestDto(
    @SerialName("memorialPhotoUrl") val memorialPhotoUrl: String? = null,  // null → 키 없음
    @SerialName("memorialVideo") val memorialVideo: AfternoteMemorialVideoDto? = null,  // null → 키 없음
    ...
)

BE 가 두 상태를 가르는 지점은 PlaylistRequestDeserializer 의 node.has(...) 이므로, 키가 없으면 specified = false 가 되고 AfternotePlaylist.update 는 그 슬롯을 건드리지 않는다. FE 가 무엇을 하든 서버 미디어는 유지된다.

완료 조건:

  • 수정 요청 바디가 영정사진·추모 영상 슬롯에 대해 명시적 null 을 실을 수 있다.
  • 값이 있을 때는 종전과 같은 키·값이 나간다(회귀 없음).
  • FE 가 모델링하지 않는 슬롯(atmosphere, memorialAudioUrl)은 계속 생략된다 — 말하지 않는 것에 대해 삭제를 지시하지 않는다.
  • 와이어 모양을 실제 앱 Json 설정으로 고정하는 회귀 테스트를 둔다.

자식 이슈

No response

참고

Activity

  1. github-actions commented on Aug 30, 2026

    @github-actions
    Contributor

    bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:

    • Urgent: 치명 — 크래시·데이터 소실·보안 무력화·핵심 경로 차단·가짜 성공
    • High: 심각 — 실패·틀린 값의 정상 위장, 핵심 기능 무동작
    • Medium: 불편 — 우회로가 있는 오동작·틀린 표시, 핵심 흐름은 유지
    • Low: 경미 — 문구·정렬·마감 품질 흠, 기능 영향 없음

    값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.

  2. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Aug 30, 2026
  3. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:afternote애프터노트 기능 영역bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions