Skip to content

refactor(afternote): 현재 JSON 계약을 유지하며 FE 상세 모델 표현을 정리한다 #1958

Closed

Description

@1hyok

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

afternote — 애프터노트

개요

현재 JSON 계약을 유지하는 FE 상세 모델의 명명·타입·도메인 표현 정리만 담당한다. BE #288의 계약 반영과 최종 통합 검증은 #1959로 분리했다. 이 이슈는 BE #288 또는 #1959의 완료를 기다리지 않고 독립적으로 착수·검증·완료할 수 있다.

서버 playlist에 붙인 FE memorial 이름과 상세 모델의 표현을 정리하되, 현재 서버 필드·중첩·종류별 미작성 허용 및 발행 필수값 계약을 유지한다. 아래 BE·FE 책임 판정은 완료된 근거로 보존한다.

판정 결과 — 2026-09-08

구분 확인된 코드 책임·결론
추억 노트의 전용 데이터 중첩 BE는 playlist 객체 안에 songs·memorialPhotoUrl·memorialVideo·memorialAudioUrl 등을 둔다. 중첩 구조의 출처는 BE다. JSON 구조를 바꾸는 작업은 BE 계약 변경이다.
발행 추억 노트의 별도 응답 타입 BE는 Draft / Published / PublishedPlaylist로 나누고, 발행 PLAYLIST에서는 playlist 및 최소 1곡을 검사한다. 종류별 응답 타입이 비대칭인 것은 BE 설계다. 별도 타입에는 발행 필수값을 표현하는 실제 근거가 있다.
다른 종류의 중첩 데이터 SOCIAL·BUSINESS도 credentials 객체를 사용한다. «추억 노트만 중첩 객체가 있다»는 최초 전제는 잘못됐다. 중첩 자체를 결함으로 취급하지 않는다.
FE의 memorial 이름 AfternoteDetailDto는 @SerialName("playlist") val memorial: AfternotePlaylistDto?로 받는다. 서버 JSON 키는 playlist이며 memorial이라는 프로퍼티 이름은 FE의 선택이다. 이름만 바꾸는 정리는 FE 책임이다.
FE의 단일 상세 DTO FE develop의 AfternoteDetailDto는 category와 nullable credentials·memorial 등을 한 클래스에 둔다. BE 응답 변형을 하나의 nullable DTO로 표현하는 것은 FE 선택이다. FE 타입 분리는 JSON 구조 변경 없이도 가능하다.
도메인의 MemorialDetail 래퍼 #1746이 DetailContent.Memorial의 래퍼 제거를 별도로 추적한다. 도메인 표현 정리는 FE 책임이며, 서버 중첩 구조와 별개다.

결론: 종류별 상세 응답의 구조를 일관되게 바꾸려는 개선은 BE 계약 설계가 중심이다. FE는 JSON 변경의 반영을 담당하고, FE 내부 이름·타입·도메인 래퍼는 독립적으로 정리할 수 있다. 현재 중첩이 있다는 사실만으로 런타임 결함이나 BE 버그가 입증된 것은 아니다.

위 결과는 아래 커밋의 응답 선언·생성 분기·직렬화 이름을 직접 대조한 것이다. 배포 서버의 응답을 호출해 검증한 결과는 아니다. 최초 중첩 도입자의 의도까지 확인했다는 뜻도 아니다.

이 이슈의 작업 범위

  • 현재 JSON playlist, FE 종류명 Memorial, 곡·미디어 데이터 묶음의 의미를 구분해 DTO·매퍼·도메인에서 혼동되는 명명과 불필요한 래퍼를 정리한다.
  • 현재 계약 안에서 종류별 데이터 조합과 소비처를 명확하게 표현한다. BE #288의 미래 JSON을 가정하지 않는다.
  • #1746과 feat(afternote): 임시저장 조회·도메인·요청 payload 계약을 분리한다 #1762 / PR #1763의 최신 반영 상태를 확인하고, 이미 구현되거나 진행 중인 동일 범위를 중복 작업하지 않는다. 겹치는 변경을 필수 선행으로 만들지 않고 이 이슈의 잔여 범위를 좁힌다.
  • 이 FE 변경에 대한 상세 매핑·에디터 프리필 회귀만 검증한다.

완료 조건

  • BE·FE 책임과 현재 중첩 구조의 근거를 확인했다.
  • BE 결과를 기다리는 계약 반영·통합 검증을 #1959로 옮겼다.
  • 현재 계약을 보존하는 FE 내부 정리 중 기존 이슈와 중복되지 않는 잔여 범위를 확정하고 구현한다.
  • 관련 상세 매핑·에디터 프리필 회귀와 적절한 컴파일·정적 검증이 통과한다. JSON 직렬화 이름·구조와 기존 종류별·상태별 동작이 유지됨을 확인한다.
  • 중복 제외 후 잔여 변경이 없다면 해당 근거를 기록하고 이 이슈를 완료한다. BE build: 공용 debug keystore 도입 (신규 팀원 OAuth 동작 단순화) #288 및 #1959를 기다리지 않는다.

분리된 범위

참고

직접 확인한 코드:

관련: #1746(도메인 래퍼 제거), #1762 / PR #1763(임시저장·발행 상세), #1956(생성 payload sealed 모델링; 상세 응답과 별개).

BE 계약 반영 후속: #1959. 그 선행 구현은 Afternote/Afternote-BE#288이다.

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:afternote애프터노트 기능 영역
    on Sep 8, 2026
  2. changed the title [-]refactor(afternote): 상세 memorial 중첩 구조의 근거와 BE·FE 수정 책임을 판정한다[/-] [+]refactor(afternote): BE 상세 응답의 종류별 비대칭과 FE 표현을 책임별로 정리한다[/+] on Sep 8, 2026
  3. changed the title [-]refactor(afternote): BE 상세 응답의 종류별 비대칭과 FE 표현을 책임별로 정리한다[/-] [+]refactor(afternote): 현재 JSON 계약을 유지하며 FE 상세 모델 표현을 정리한다[/+] on Sep 8, 2026
  4. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 8, 2026
  5. github-actions commented on Sep 8, 2026

    @github-actions
    Contributor

    이 이슈를 맡은 PR 은 #1960 다 (base refactor/1746-memorial-content-flatten).

    base 가 기본 브랜치(develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에
    아무것도 표시하지 않는다. 본문에 Closes #N 이 있어도 마찬가지다 — 그 링크는 기본 브랜치를
    target 하는 PR 에서만 만들어진다.

    PR 이 닫히거나 머지되면 이 이슈의 pr-open 라벨은 다음 리컨사일에서 떨어진다.

  6. added a commit that references this issue on Sep 8, 2026
  7. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    and removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 8, 2026
  8. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:afternote애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions