brunch

매거진 데이터 101

You can make anything
by writing

C.S.Lewis

by 져니박 Apr 19. 2023

똑똑하게 데이터 7탄 : 타임스탬프

세계 공통의 시간 도장, 사용자 관점의 시간 도장 둘 다 생각해야

데이터를 잘 정의하는 것도 중요하지만, 그것만큼 아니면 그보다 더 중요한 것이 바로 이력 관리입니다. 콘텐츠 또는 데이터가 언제 추가되었고, 언제 삭제되었는지를 꼬리표처럼 달고 있어야 합니다. 예를 들어 매장에서 커피를 주문하고, 선물 받은 기프티콘을 딱~ 찍었는데 결제가 불가능한 경우가 발생했습니다. 아마 다음 이유 중 하나일 가능성이 높습니다.


기프티콘 결제가 실패했다. 왜 그랬을까?

1. 해당 기프티콘의 유효기간이 지나서 자동으로 삭제가 되었다. (고지된 기간 지나고 삭제되었는가?)
2. 해당 기프티콘을 사용 가능한 매장이 아니다. (이 매장도 가능한 사용처로 등록되어 있는가?)

3. 해당 기프티콘은 할인이 적용된 음료는 구매가 불가능하다. (해당 음료에 할인 정보가 등록되었는가?)



만약을 대비하여 평소에
timestamp 도장을 항상 찍어야 한다


기대한 바가 실현되지 않았을 때, 제일 먼저 보는 것은 해당 데이터의 등록과 수정, 삭제까지의 기록입니다. 일상에서 뿐 아니라 서비스를 만들고 운영하다 보면, 불편이나 오류에 대한 문의가 들어옵니다. 그럼 해당 상황을 파악하기 위해, 문제가 되는 데이터뿐 아니라 사용자의 접속 및 행동에 따른 기록(로그 데이터)까지도 확인해야 합니다.


어떠한 데이터이든지 - 그것이 콘텐츠이든지, 시스템에 남은 로그이든지 - 등록되고 수정, 삭제될 때 그 로직에 매번 그 사용자의 아이디, 그리고 해당 시간을 함께 기록하도록 개발하는 방향이 권고됩니다. 여기서 timestamp 즉 타임스탬프, 시간 도장 개념이 등장합니다.  이때 해당 시간은 timestamp 타임스탬프라 불립니다. 말 그대로 특정 이벤트가 있을 때마다 시간 정보도 도장으로 쾅쾅 찍힌다는 것입니다. 다음은 위키피디아에서 검색한 타임스탬프의 뜻입니다.


타임스탬프(timestamp)

특정한 시각을 나타내거나 기록하는 문자열이다. 둘 이상의 시각을 비교하거나 기간을 계산할 때 편리하게 사용하기 위해 고안되었으며, 일관성 있는 형식으로 표현된다. 실제 정보를 타임스탬프 형식에 따라 기록하는 행위를 타임스탬핑(timestamping)이라 한다. 파일시스템에서 타임스탬프는 저장된 파일이 생성되거나 변경된 시각을 뜻하기도 한다.



시스템에 기록되는 날짜와 시간은
세계 공통의 약속 ISO 8601을 따라야


중요한 것은 일관성 있는 형식이어야 한다는 것입니다. 각각의 사건에 대한 타임스탬프 자체도 정확해야겠지만, 이 사건에서 저 사건이 발생하기까지 소요된 시간 정보도 타임스탬프를 이용해 계산되기 때문입니다. 특히 서비스의 오류나, 사용자가 연달아 클릭을 하면서 똑같은 정보가 두 번 등록되는 경우도 있습니다. 이 때도 타임스탬프를 기준으로 내용이 같은 경우, 나중 것은 저장하지 않도록 프로그래밍을 하기도 합니다.


세계 표준으로 권고되는 것은 ISO 8601이라는 표준입니다. 연/월/일, 연/월/주, 연/월/일/시/분/초 등 날짜와 시간에 대한 정보를 그레고리력과 24시간 체계에 기반해서 표기합니다.
 

ISO 8601 표기의 예

YYYYMMDD    예시) 20230401 (2023년 4월 1일)
hh:mm:ss          예시) 15:10:10  (15시 10분 10초)
YYYY-MM-DDThh:mm:ssZ     
예시) 2023-04-01T15:10:10Z
          (2023년 4월 1일 15시 10분 10초)
          세계 표준으로 협의된 시간대, UTC에서는
          T를 시간정보 구분, Z를 UTC 기준이란 뜻으로 사용

UTC 시간 표기 등 일부를 제외하고는, 숫자와 "-"로만 이루어져 있고 명확하게 무엇이 먼저고 나중인지 알 수 있습니다. 


세계 공통으로 사용되는 표준이면 그대로 사용하면 될 텐데, 왜 '똑똑하게 데이터 정의하기' 시리즈에서 소개하고자 할까요? 시스템 내 이력 관리 측면에서는 저런 형식으로 데이터를 기록하고 있어도, 실제로 사용자가 콘텐츠를 등록하거나, 조회할 때 보이는 것은 다르게 변환해서 표기하는 경우가 많기 때문입니다.



화면에 보여줄 날짜와 시간은

사용자가 서비스 왜, 어떻게 쓰냐에 따라야


왼쪽 위키피디아, 오른쪽 카카오톡 | 출처 본인


정보의 성격과 등록 빈도에 따라 어떻게 날짜와 시간 정보를 표기할 지 다른 판단을 내렸습니다. 왼쪽은 위키피디아 'ISO 8601' 검색결과입니다. 실제로 뉴스 섹션이나 사전 등 커뮤니티에서는 콘텐츠 등록과 수정 이력에 요일 "(목)" 과 같이 일자와 시간 사이에 괄호 안에 넣어 표기하는 경우가 많습니다.

한편, 오른쪽의 카카오톡 같은 경우는 최근성에 따라 다르게 표기합니다. ISO 8601에 따라 YYYY-MM-DD hh:mm 모든 정보를 제공하지 않고, 생략해도 가능한 정보는 생략합니다. 현재 기준에서 얼마나 시간이 경과된 콘텐츠냐에 따라 표시 정보를 시/분(초)만 표기할 수도 있고, 연/월/일만 표기할 수도 있는 것입니다. 특히 앱에서 사용하는 서비스는, PC에서 웹으로 접속한 경우와 달리 제한된 영역에서 데이터가 바로 눈에 들어와야 합니다.


카카오톡 채널의 표기의 예

hh:mm          예시 ) 오전 8:02 (20:02 아님)
M월 D일        예시 ) 1월 23일 (2023-01-03 아님)
YYYY.M.D   예시) 2021.2.2. (2021-02-02 아님)


그런데 일부 서비스의 경우 경과 시간에 따라 ISO 8601의 여러 표기 중 1가지를 결정할 뿐 아니라, 아예 그 약속을 생략해 버리는 의사결정을 내리기도 합니다. 정말 최근에 올라온 콘텐츠라면 숫자 표기를 아예 하지 않는 경우인데요. 바로 '방금 전'이라는 세 글자입니다.



'방금 전' 3글자를 사용하기 전에 

사용자 관점, 시스템 관점 질문 3가지


'방금'은 1초 전인가요? 10초 전인가요? 아니면 몇 분 전인가요? 시간 정보를 과감하게 생략하고, '방금 전'이라고 표기하는 것에는 사용자와 시스템 관점에서 의사결정이 필요합니다.


사용자 관점

1. 우리 서비스에서는 콘텐츠가 어떤 주기로 쌓이나요?
2. 사용자는 얼마나 자주 접속하며, 그리고 한 번 접속할 때 평균 접속시간이 어떻게 되나요?
3. 사용자가 새로고침 하지 않고 현재 화면을 보고 있는 상황에서도 새로운 콘텐츠는 등록됩니다.
    새로운 콘텐츠는 몇 초 주기로 업데이트해서 보여줘야 할까요?


시스템 관점

1. 우리 서비스에서 콘텐츠가 등록 또는 수정 빈도가 어떻게 되나요?
    혹시 바로 게재되지 않고 중간에 계정을 검증하거나, 관리자의 주기적인 승인절차 후에 등록되나요?

2. 하나의 콘텐츠를 등록하고 표시하는 데 소요되는 시간이 있나요?
    텍스트로만 이루어져 있나요? 사진이나 숏폼 콘텐츠가 포함되어 있나요?

3. 사용자가 직접 새로고침이나 버튼을 누르지 않고도, 자동으로 시스템에서 다량 업데이트를 하려면
    어떤 주기로 최대 몇 개씩 동기화시킬 때 안정적으로 끊김 없이 불러올 수 있나요?


질문 몇 가지만 가져왔는데, 사용자 관점과 시스템 관점은 다르지만 본질은 동일합니다. 해당 콘텐츠가 어떤 성격이며, 얼마나 자주 등록이나 변경이 되고, 어떠한 빈도로 조회되는지 (이에 맞춰 계속 콘텐츠를 화면에 불러와야 하는지) 결국 해당 서비스의 사용자가 보이는 행동에 대한 이해가 있어야 합니다.


그리고 그 서비스 내에서는 여전히 일관된 약속으로 오해가 없어야 하겠습니다.



시간 도장이 제때에 잘 찍히는 것도 중요하지만,
사용자에게 맞는 시간 도장을 제공하기 위해 세심한 관찰이 필요합니다.

사진: Unsplash의Jon Tyson


매거진의 이전글 똑똑하게 데이터 6탄 : 평균값
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari