PK를 AUTO_INCREMENT UUID를 UNIQUE로 하는것에 대해
3
7 asked
질문이 있습니다 강의를 듣다보니
UUID를 써야겠다면
PK를 오토 인크리먼트
UNIQUE 를 UUID로 사용하라고 했는데 ,
그리고 보안적인 측면으로 이야기하면서 오토인크리먼트는 유추 될수 있다 라고 하시면서 그러면 보안을 더 잘하는게 맞지 않냐는 말씀을 하셨습니다.
저도 말씀하신 생각과 같은데요
그런데 만약에 UUID와 오토 인크리먼트를 같이 쓰게되면 PK 값을 안보여주는 것도 이야기를 하셨는데
그러면 SELECT할때 WHERE 조건으로 UUID 즉 유니크 키를 사용하면 PK를 사용할때에 비해 이점이 줄지않나요? 그리고 문서 건수가 많아질수록 유니크 키 인덱스 부분도 쌓여서 비용이 쌓일거같은데 이부분이 궁금합니다.
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 안태승님 질문과 관련하여 아래 기존 답변을 참고해 보시면 좋습니다.
핵심 내용
UUID를 UNIQUE 컬럼으로 사용하고, AUTO_INCREMENT 값을 PK로 두는 경우에도 UUID 컬럼에는 유니크 인덱스가 생성되므로 다음과 같은 조회가 가능합니다.
SELECT *
FROM member
WHERE uuid = ?;
따라서 UUID로 조회한다고 해서 인덱스를 사용하지 못하는 것은 아닙니다. 다만 MySQL에서 PK는 클러스터 인덱스의 기준이 되고, 보조 인덱스에는 PK 값이 함께 저장되므로 다음과 같은 차이가 있습니다.
- 숫자형 AUTO_INCREMENT PK: 인덱스 크기가 작고 정렬 및 조회 효율이 좋음
- UUID UNIQUE 인덱스: UUID가 더 크기 때문에 인덱스 저장 공간과 메모리 사용량이 증가할 수 있음
- UUID로 조회 후 실제 데이터를 찾을 때, 보조 인덱스에서 PK를 확인한 뒤 클러스터 인덱스를 다시 조회할 수 있음
- 다만 UUID에 유니크 인덱스가 있다면 일반적으로 충분히 빠르게 조회할 수 있으며, 실제 영향은 데이터 규모와 조회 패턴에 따라 성능 테스트가 필요함
즉, UUID를 외부에 노출하고 PK를 외부에 노출하지 않는 설계는 보안성과 내부 데이터베이스 성능을 어느 정도 분리하기 위한 선택입니다. 다만 UUID 자체가 인증이나 권한 검사를 대신하는 것은 아니므로, UUID를 알더라도 접근 권한을 반드시 별도로 검증해야 합니다.
관련 기존 답변입니다.
PK 타입에 관한 문의
MySQL의 클러스터 인덱스 특성상 순차적으로 증가하는 PK가 유리할 수 있으며, UUID를 사용한다면 순서형 UUID나 바이너리 저장을 고려할 수 있다는 내용입니다.UUID 질문 드립니다.
UUID는 추측이 어렵다는 장점이 있지만, 대부분의 경우 시퀀스를 선호하고 샤딩이나 여러 데이터베이스 사용 등 시퀀스가 적합하지 않은 상황에서 UUID를 고려한다는 답변입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
본질 및 인조 식별자 질문
0
7
1
Jib 빌드가 83%에서 멈추는 문제 해결(windows 사용자)
1
12
0
pk를 auto increment로 하는것에 대해서
0
13
1
슈퍼키 문의
0
13
1
질문있습니다!
0
15
1
트랜잭션 내 Redis I/O 에 대한 궁금한점
1
25
1
3-13 리텐션 과제 제출합니다!
0
57
2
getOrCreate / Unique? 멱등 처리 질문
1
59
2
실행 통계2 explain analyze 조인 쿼리
0
46
1
key_length 가 사용되는곳
0
44
1
강의 DB데이터 질문
0
61
1
기타 영역 중 언두로그
0
86
1
실전튜닝 4 질문 - group by 순서와 index 순서
0
66
1
DB 쿼리 최적화 시 DB 처리와 애플리케이션 처리의 기준이 궁금합니다
0
63
1
실무에서의 인덱스 관리 방법이 궁금합니다
0
75
1
복합인덱스 설계 질문
0
128
1
이진 트리 노드
0
79
1
통계정보 갱신 질문
0
114
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
124
2
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
0
119
2
컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
0
116
2
실습데이터 ORDERS 생성 시간 질문요...
0
154
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
104
1
Postgresql 아키텍처 업데이트
1
123
2

