본문 바로가기
카테고리 없음

시간대 불일치로 인한 데이터 신뢰성 문제 해결

by 영진학생 2025. 4. 15.

문제 상황

약속 관리 서비스를 개발하는 과정에서 약속 리스트에 D-day 기능을 구현하던 중 심각한 문제가 발생했다. 약속 날짜를 당일로 변경했을 때 해당 약속이 리스트에서 완전히 사라지는 현상이 생겼었고 원인을 파악하기 위해 Supabase에 저장된 데이터를 확인한 결과, 시간대 처리 방식에 문제가 있었다.

예를 들어, 4월 14일 약속의 경우에는

  • 내가 예상한 시작 날짜 데이터: 2025-04-14 00:00:00+00
  • 실제로 DB에 저장된 데이터: 2025-04-13 15:00:00+00 (UTC 기준, -9시간 차이)

이 문제는 한국 시간(KST)과 국제 표준시(UTC) 간의 9시간 차이를 생각을 못했던 것에서 시작됐다.

핵심 문제점

기능 구현을 위해 DB에 있는 데이터를 변형해서 기능을 구현하는 게 아니라, 기능 구현을 위해 DB에 있는 데이터를 변형시키고 저장시켜 DB 데이터가 특정 기능에 종속되어 있다는 것이 가장 큰 문제였다. 이런 데이터를 사용해 다른 캘린더와 약속리스트 뿐만 아니라 나중에 개발할 어떤 기능에서도 항상 이 변형된 데이터를 사용해야 한다는 점이 반드시 개선이 필요하다고 판단했다.

 

이러한 접근 방식은 여러가지 문제를 만드는데 그 중에 몇 가지를 고르면

  1. 데이터 신뢰성 저하: 데이터베이스의 데이터가 실제 의도와 다르게 저장되고 있다.
  2. 기능 간 의존성 증가: 특정 기능을 위해 변형된 데이터를 다른 모든 기능에서도 고려해야 해야한다.
  3. 유지보수 어려움: 새로운 기능 추가 시 기존에 변형된 데이터 로직을 항상 고려해야 한다.
  4. 버그 발생 가능성 증가: 여러 컴포넌트에서 각각 시간대 변환 로직을 구현하면 일관성 문제 발생한다.

해결 과정

  1. 문제 인식: 일정이 당일 날짜로 변경되었을 때 리스트에서 사라지는 현상을 발견
  2. 원인 분석:
  • Supabase에 저장된 데이터 확인
  • 시간대 차이로 인해 날짜가 하루 앞당겨져 저장되는 문제 발견
  • 다른 팀원들의 구현 방식 검토(Calendar 컴포넌트 등)
  1. 대안 검토:
  • 기존 방식: 약속 추가 기능을 구현하기 위해 변형된 데이터를 DB에 저장하고 모두가 변형된 데이터를 사용
  • 개선 방식: 데이터베이스에 의도한 정확한 날짜/시간 저장(KST 기준)하고 필요한 곳에서 데이터를 변형시켜 사용
  1. 해결책 제안:
  • 팀원들에게 문제점 설명 및 개선 방향 제시
  • 데이터베이스에 저장 시 정확한 시간(한국 시간 기준 00:00:00부터 23:59:59)으로 저장하도록 수정

배운 점

이번 경험을 통해 데이터 모델링의 중요성을 다시 한번 깨달았다.

  1. 데이터 무결성 유지: 데이터베이스에는 항상 정확하고 신뢰할 수 있는 데이터를 저장해야 함
  2. 기능 독립성 확보: 데이터는 특정 기능에 종속되지 않고 여러 기능에서 활용 가능해야 함
  3. 시간대 처리의 중요성: 국제적 서비스에서 시간대 처리는 초기부터 신중하게 설계해야 함

결과적으로 데이터 구조와 저장 방식을 개선함으로써 더 안정적이고 확장 가능한 서비스를 구현할 수 있었다.