티스토리 뷰

작년 12월부터 DB 스터디를 하고 있는데, 오늘 흥미로운 주제가 나와서 (사실 매주 나오긴 한다 ^^;;) 찾아봤다.
바로 제목처럼 is_deleted 의 boolean 값을 저장할 건지, deleted_at 의 timestamp 값을 저장할지다.

사건의 발단(?)

당근마켓의 DB 설계를 해보자. (간단하게)

상품 테이블에 카테고리를 제외해서 설계를 했고 나를 제외한 스터디원들은 모두 created_at, updated_at, deleted_at 을 작성하지 않았다.
그래서 물어보니, 요즘 나오는 프레임워크들에선 ORM을 사용하면 기본적으로 timestamp 가 자동으로 마이그레이션 되기 때문에 염두를 하지 않았다고 했다.
관련하여 얘기를 나누다보니 모든 테이블엔 created_at, updated_at, deleted_at 컬럼이 있어야된다고 우리끼리 결론을 내려버렸다(ㅋㅋ)

피드백

나는 상품에 대한 수정일이 필요 없다고 판단하여 수정일을 제외했는데, 생각해보니 당근에는 “끌어올리기” 기능이 있었다.
그럼 수정일을 반드시 알아야하고, 정해진 수정일이 지난다면 끌올 알림을 해야하므로 수정일 컬럼을 추가하거나 수정일만을 관리하는 테이블을 설계해야한다.
서비스화 하진 않을거라 간단하게 설계해봤지만 요구사항을 적다보니, 왜 초기 설계에 시간이 걸리는 이유를 알았다.

의문점과 결론

만약 timestamp 가 필요하지 않으면 boolean 으로 저장하는 것이 차지하는 데이터 값이 가볍다고 생각해서 좀 더 효율적이라고 생각했다.
분명히 나처럼 생각하는 사람이 있을 것 같아서 바로 찾아보니, 결론적으론 boolean 보단 timestamp 를 저장하는 것이 좋다! 라는 것이었다.
무조건적으로 timestamp가 좋아! 는 아니지만, 일반적으로 flag 값을 요구할 때 그 값들이 언제 변경되었는가? 까지 쫓아가게 된다.
하지만 timestamp 가 필요없다면 boolean 값으로 충분하니 정답 없는 “상황에 따른 설계”가 결론이 되었다.

출처