Skip to content

[REFACTOR/#778] 서버 ISO 8601 UTC 날짜 변경 대응#789

Draft
nahy-512 wants to merge 4 commits intodevelopfrom
ref/#778-date-transfer-utc
Draft

[REFACTOR/#778] 서버 ISO 8601 UTC 날짜 변경 대응#789
nahy-512 wants to merge 4 commits intodevelopfrom
ref/#778-date-transfer-utc

Conversation

@nahy-512
Copy link
Copy Markdown
Member

Related issue 🛠

Work Description ✏️

  • 서버에서 날짜를 ISO 8601(UTC) 형태의 Datetime으로 통일해 내려주는 API 변경에 맞춰 클라이언트 날짜 처리 방식을 전면 개선했습니다.

  • 알림: publishedAt String → Instant로 변경, 포맷팅을 UiModel 매핑 시점으로 이동

  • 알림-상세: createdAt String → Instant로 변경

  • 단어장-상세: writtenFrom String → Instant? + fromFeed: Boolean 필드 분리 (API DTO 변경 반영)

  • 일기-확인: writtenDate String → Instant로 변경, 한국어 날짜 문자열 역산 로직(parseKoreanFullDateToIso) 제거

  • DateFormatter: Instant 기반 확장 함수 추가 및 KDoc 정비, 함수 그룹 재정렬

  • 각 레이어 경계에서의 포맷팅 책임 명확화 (Domain Model은 Instant 보유, 표시용 String 변환은 Presentation Layer에서 수행)

  • 날짜 관련 단위 테스트 추가 (DateFormatterTest, NotificationItemUiModelTest, VocaDetailUiModelTest)

[흐름도 예시]

flowchart TD
    DTO["DTO\nString (ISO 8601)"]
    Domain["Domain Model\nInstant (timezone-agnostic)"]
    Mapper["UiModel Mapper / ViewModel\nInstant → 표시용 String\n(시스템 타임존 적용)"]
    UI["Composable\nString 수신 후 렌더링만"]

    DTO -->|"toUtcInstant()"| Domain
    Domain -->|"toKoreanFullDate()\ntoDotDate()\ntoShortYearDotDate()"| Mapper
    Mapper --> UI
Loading

Screenshot 📸

분류 테스트
DateFormatterTest image
VocaDetailUiModelTest image
NotificationItemUiModelTest image

Uncompleted Tasks 😅

  • 캘린더(path), 일기 작성(request body)의 date 처리 방식 미결
    UTC 기준 날짜 직접 전송 vs 헤더 타임존 + Datetime으로 서버 위임 및 날짜 형식 — 별도 논의 필요

To Reviewers 📢

  • 변경 필드에 대해서는 타임존 정리 문서 참고해주시면 될 것 같습니다. 아직 캘린더, 일기 작성 관련 아직 논의 중인 부분이 있어 Draft 걸어두겠습니다! 슬랙 스레드] 참고
  • 반복 작업이 많아 Codex + Claude 작업 진행했습니다. UTC 기준 ISO 문자열은 모두 공통 포맷으로 관리하면 좋을 것 같아 타임존 영향을 받지 않는 Instant를 사용했고, 날짜 포맷 기반 변환 로직을 만들었습니다. 홈 캘린더, 일기 작성 쪽은 아직 서버랑 논의가 덜 끝나 LocalDate 로직을 모두 제거하지는 못했습니다.
  • Domain Model이 Instant를 보유하고 포맷팅은 전부 Presentation Layer에서 발생하도록 UDF 기준으로 책임을 정리했습니다.
  • VocaDetailModelwrittenFrom: Instant? + fromFeed: Boolean으로 분리되어 기존 서버에서 가공해주던 텍스트("26.04.12 일기에서 저장됨")를 클라에서 직접 조합합니다. DTO 구조 변경이 포함되어 있으니 확인 부탁드립니다.
  • fromFeed = false && writtenFrom = null 케이스는 서버 스펙상 정상적으로 발생하지 않아야 하나, 방어 처리(Timber warning + 빈 문자열 반환)가 추가돼 있습니다.
  • 서버에서 변경되는 필드가 많아 UnitTest 코드를 따로 작성했는데 같이 올려보면 좋을지 여쭤보고 싶습니다..! 아직 서버에서 응답 변경이 이루어지지 않은 상태라 확인이 한계가 있네요..

@nahy-512 nahy-512 self-assigned this Apr 17, 2026
@nahy-512 nahy-512 requested a review from a team as a code owner April 17, 2026 07:43
@nahy-512 nahy-512 added the REFACTOR🧽 기능 동작은 유지하되, 앱 로직(프로덕션 코드)의 구조와 품질을 개선 label Apr 17, 2026
@nahy-512 nahy-512 requested review from angryPodo and removed request for a team April 17, 2026 07:43
@nahy-512 nahy-512 added the 🍀작은나현 작은나현 담당 label Apr 17, 2026
@nahy-512 nahy-512 requested a review from nhyeonii April 17, 2026 07:43
@nahy-512 nahy-512 linked an issue Apr 17, 2026 that may be closed by this pull request
1 task
@nahy-512 nahy-512 marked this pull request as draft April 17, 2026 07:43
@angryPodo
Copy link
Copy Markdown
Member

린트 확인해줘요!

@nahy-512
Copy link
Copy Markdown
Member Author

린트 확인해줘요!

수정했습니다!

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

Labels

REFACTOR🧽 기능 동작은 유지하되, 앱 로직(프로덕션 코드)의 구조와 품질을 개선 🍀작은나현 작은나현 담당

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REF] UTC 기반 날짜 변환 로직 추가

2 participants