새 프로젝트 테이블 설계하다가 PK 정하는 데서 막혔습니다. 지금까지는 그냥 아무 생각 없이 auto increment(자동 증가 정수) 썼는데, 이번에 팀에서 UUID 쓰자는 의견이 나와서 갑자기 뭐가 맞는지 헷갈리네요.


제가 대충 아는 건 이 정도예요.

-- 방식 1: 자동 증가
id BIGINT AUTO_INCREMENT PRIMARY KEY

-- 방식 2: UUID
id CHAR(36) PRIMARY KEY -- 예: 550e8400-e29b-41d4-a716-446655440000


auto increment는 딱 봐도 순서대로 1, 2, 3 늘어나니까 사람이 보기 편하고 인덱스도 잘 탈 거 같은데, 대신 URL이나 API에 id 그대로 노출하면 우리 데이터가 몇 개인지 다 뽀록나는 게 좀 걸리더라고요. 남이 순번 바꿔가면서 긁어갈 수도 있고요.


반대로 UUID는 추측이 안 되니까 그런 건 안전한데, 뭔가 값이 길어서 저장공간도 더 먹고 인덱스 성능이 떨어진다는 얘기를 들었어요. 특히 랜덤이라 insert할 때 인덱스가 여기저기 흩어져서 느려진다던데 이게 무슨 말인지 정확히는 모르겠습니다.


그래서 궁금한 게요.

1. 실무에서는 보통 뭘 더 많이 쓰나요? 상황에 따라 갈리나요?

2. UUID 성능 문제 피하려고 UUIDv7이나 ULID 같은 걸 쓴다는데 이게 정렬 가능한 UUID라는 게 무슨 뜻인지 궁금해요.

3. 내부 PK는 auto increment로 하고 외부 노출용으로만 UUID 따로 두는 방식도 있다던데 이게 오버인지 정석인지 모르겠어요.


경험 있으신 분들 의견 부탁드립니다.