First-class 식별자로서 UUID
PostgreSQL 이 내장 UUID 타입과 내장 generator: gen_random_uuid() (v4) 와 uuidv7() (PG 18+). PG 18 전엔 uuid-ossp extension 추가; PG 13+ 가 코어에 gen_random_uuid 가짐.
v4 vs v7
v4: 122 random bit. 전역 unique, 그러나 완전히 unsorted — B-tree 인덱스의 모든 insert 가 random 위치 land, 시간에 따라 인덱스 fragment. 정확한 lookup 으로 read 하는 ID 엔 OK; PK 엔 안 좋음.
v7: 48-bit 타임스탬프 + 74 random bit. 전역 unique 그리고 시간 정렬 가능. 새 행이 인덱스 끝에 land (순차 정수처럼), UUID 로 ORDER BY 가 시간순 정렬 공짜.
어느 거 쓸지
내부 PK: 정수 IDENTITY (join 싸고, 인덱스 작음). 공개 ID (URL/API 노출): 가능하면 uuidv7(), 아니면 gen_random_uuid(). 많은 테이블이 둘 다 — join 위한 내부 id, 노출 위한 외부 uuid.