카카오테크캠퍼스 3단계에서 저희 팀이 만들 서비스는 "축팅"이다.
축팅에서는 축팅내에서 사용할 수 있는 고유한 화폐인 "폭죽"이라는 것이 있다.
저희 서비스에서는 폭죽의 거래 이력을 사용하는 기능이 있어, 폭죽 거래 이력을 DB에 저장하려고 합니다. ++ 운영 시에도 필요
그렇다면, 폭죽의 거래 이력 데이터는 어떠한 특징을 가지고 있을 까요??
이력 유형 데이터는 아래와 같은 특징을 가지고 있습니다.
- 시간에 따라 데이터가 누적된다.
- 동일한 칼럼에 대해서 발생한다.
- 대량 데이터가 발생할 가능성이 높다.
- 성능에 영향을 주는 경우가 많다.
따라서, 이력 유형 데이터 모델링을 할 때는 데이터 관리 방법에 따라 어떤 유형의 이력 테이블을 관리하는 지 성능을 위해 어떤 부분을 고려해야 하는 지가 중요하다.
쉽게 말하자면, 아래와 같은 순서로 진행하면 된다.
1. 업무적으로 이력 유형을 먼저 결정
2. 이력 테이블에 데이터가 대량 적재될 것인지 판단
3. 성능을 고려해 기능성 컬럼 추가 혹은 테이블을 통합/분리를 고려
[아는 만큼 보이는 데이터베이스 설계와 구축]에서는 아래와 같은 이력 모델 선택 가이드를 제공한다.
축팅의 폭죽 거래 이력 테이블을 예시로 생각해보자
- 컬럼 단위 변경 추적이 필요한가
=> NO 행단위 즉, 폭죽을 보낸 사람, 받은 사람, 거래 폭죽량, 일자 등 Row 단위로 관리해야한다. - 대량 데이터인가?
=> Yes - 컬럼 수가 많은가?
=> No - 이력 관계가 존재하는 가?
=> Yes 폭죽이 얼마나 사용되고 추가됬는 지에 대한 관계 - 스냅샷 전체 이력 or 스냅샷 과거 이력
결론
“사용자는 해당 게시글에 누가 폭죽을 사용했는 지를 알 수 있다.”라는 요구사항을 고려하였을 때 전체 이력을 봐야만 가장 최근에 폭죽을 사용한 사용자를 알 수 있다.
따라서, 스냅샷 전체 이력 모델을 사용할 것이다.
아래는 축팅의 폭죽 거래 내역 테이블이다.
폭죽 내역에 수신자 ID를 PK로 설정한 이유는 폭죽 내역을 검색할 때 where 절로 수신자 ID를 제일 많이 사용할 것 같았기 때문입니다.
참고) 이력 유형 분류 방법
테이블 구분에 따라 구분
컬럼과 로우에 따라 구분
이력 데이터 발생 방법에 따라 구분
출처 : [아는 만큼 보이는 데이터베이스 설계와 구축]
'Project Trouble Shooting > [축팅] 축제 소개팅 어플리케이션 - 카카오 테크 캠퍼스 1기' 카테고리의 다른 글
Transaction을 고려한 CheckedException 예외 처리 (3) | 2023.11.12 |
---|---|
ThreadLocalRandom의 설계의도와 스레드의 관계 (1) | 2023.11.01 |
"Run all Tests"로 모든 단위테스트를 한번에 돌릴 때 실패하는 이슈 (0) | 2023.10.14 |
ComposeMethod을 적용해 리팩터링 해보자 (1) | 2023.10.13 |
Instant 클래스 도입에 관한 고찰 (0) | 2023.10.02 |