일단 시작에 앞서 auto increment ID를 피하는 이유로는 How to Do UUID as Primary Keys the Right Way의 Why You Should Avoid Auto-Incremented Integers를 참고하길 바란다.
그렇지만 DB의 auto increment ID를 사용하는건 이미 널리 쓰이고 있고 그다지 나쁜 선택이 아니다.
하지만 여러 측면을 고려하였을 때, DB의 auto increment ID를 사용하는 것은 아무래도 좋지않다는 판단을 한 경우라면 이제 ID를 어떻게 ID를 만들지가 중요해진다.
UUID v4와 같이 random한 ID의 경우 ID 충돌에 있어 큰 문제는 없지만, random한 값이기에 DB의 Primary Key로 사용하기엔 무리가 있을 수 있다.
How to Do UUID as Primary Keys the Right Way의 UUID V4 Real Issues and How to Fix Them를 참고하길 바란다.
Primary Key로 사용하기 위해서는 ID는 time-sequential한 값이 좋다. 그래야 DB 성능을 크게 해치지 않는다.
관련해서 GeekNews에 좋은 토픽이 있었다. - 리소스의 ID, GUID로 할까 Sequential로 할까?
이 토픽의 댓글들 덕분에 time-sequential한 ID를 생성하는 여러 방식에 대해 알아 볼 수 있었다.
이 방식들에 대해 얕고 대략적으로 설명하자면 현재 시간을 ID의 앞부분으로 사용하고 ID의 뒷부분은 랜덤으로 생성하여
time-sequential 하지만 충돌에 안전한 ID를 생성하는 방식이다.
time-sequential 하지만 충돌에 안전한 ID를 생성하는 방식이다.
여러 방식들에 대해 참고할 수 있는 링크를 남겨놓는다.
ksuid
- https://github.com/segmentio/ksuid
- See also: https://segment.com/blog/a-brief-history-of-the-uuid/
- Java library: https://github.com/f4b6a3/ksuid-creator
ulid
Timeflake
UUID v6
- https://github.com/uuid6/uuid6-ietf-draft
- See also: https://github.com/f4b6a3/uuid-creator/wiki/1.6.-UUIDv6
- Java library: https://github.com/f4b6a3/uuid-creator
'ETC > System Design' 카테고리의 다른 글
대기열 시스템 (0) | 2024.11.12 |
---|---|
Read Consistency with Database Replicas by Shopify (0) | 2022.12.09 |
[채팅 시스템] 특정 키워드에 대해 시스템 메세지 보내기 (0) | 2022.09.13 |
MSA 기반 환경에서의 인증과 인가 - 3. 토큰 탈취 대처 (0) | 2021.05.29 |
MSA 기반 환경에서의 인증과 인가 - 2. 인증 및 인가 프로세스 (0) | 2021.05.29 |
댓글