모든 글

익명 서비스에서 순번 키의 연결 고리 끊기

신원 관련 레코드에 독립적인 무작위 식별자를 사용해 순번 키의 직접 연결을 끊되, UUID만으로 익명성이 보장되지는 않음을 짚습니다.

출처 및 AI 안내: 이 글은 제미니의 개발실무 유튜브를 기반으로 작성되었습니다. gpt-5.6-sol 모델을 사용해 생성·편집했습니다.

자동 증가 숫자 ID는 많은 소규모 서비스에서 무리 없는 기본값이다. 그러나 익명 서비스의 신원 관련 테이블들이 같은 순번 흐름을 가지면 의도하지 않은 추적 경로가 생길 수 있다.

가입 키 레코드 1번과 사용자 레코드 1번이 함께 만들어졌다면 운영자는 둘이 같은 사람이라고 유추할 수 있다. 그 사용자가 게시글과 연결되는 순간 분리해 둔 신원 정보도 따라가기 쉬워진다. 문제는 숫자 자체보다 레코드 사이에 드러난 상관관계다.

같은 순번은 눈에 보이는 조인 조건이 된다

중복 가입을 막기 위해 외부 프로필 키를 저장하는 가입 테이블이 있다고 해보자. 사용자 테이블도 자동 증가 ID를 쓴다면 계정이 생길 때 두 테이블이 나란히 1, 2, 3, 4로 늘어날 수 있다.

데이터베이스 관계를 명시하지 않아도 위치가 같다는 이유만으로 직접적인 추측이 가능해진다. 가입 키 1번은 사용자 1번일 가능성이 높다. 외부 사용자는 내부 키를 볼 수 없더라도 데이터를 운영하는 사람은 이 순번으로 두 레코드를 연결할 수 있다.

저장된 데이터에서 신원을 알아내기 어렵게 만드는 것이 제품 신뢰의 전제라면 이런 연결은 그 약속과 어긋난다.

신원을 잇는 레코드의 키를 서로 독립시킨다

가입 레코드와 사용자 레코드에 각각 독립적인 UUID 기반 문자열 ID를 주면 단순한 순번 대응이 사라진다. 두 기본 키가 같은 카운터로 나란히 증가하지 않으므로 1번 가입자와 1번 사용자를 바로 잇는 추측을 끊을 수 있다.

서비스의 모든 식별자를 바꿀 필요는 없다. 게시글이나 댓글의 순서를 아는 것이 문제의 신원 연결을 드러내지 않는다면 숫자 ID를 그대로 쓸 수 있다. 변경 대상은 외부 가입 신원과 내부 사용자를 이어 줄 수 있는 레코드다.

중복 가입을 막기 위한 외부 고유 키는 가입 쪽에 계속 필요할 수 있다. 기본 키를 바꾸는 일은 그 업무 요구를 없애지 않는다. 고유 키를 가진 레코드와 사용자 레코드 사이의 직접적인 연결 하나를 끊는 것이다.

연결이 어려워져도 익명성이 보장되지는 않는다

독립적인 무작위 ID는 눈에 띄는 추적 경로를 줄일 뿐 익명성을 보장하지 않는다. 서비스 사용자가 두 명뿐이라면 가능한 경우가 적어서 여전히 신원을 짐작할 수 있다. 기본 키가 달라도 다른 저장 속성이 단서가 될 수 있다.

따라서 결론의 범위도 좁아야 한다. UUID는 순번 대응을 이용한 이 추적을 더 어렵게 만들 수 있다. 익명성에 대한 제품 약속 때문에 추가 분리가 필요할 때 의미 있는 선택이지만, 운영자가 어떤 방법으로도 사람과 계정을 다시 연결할 수 없다는 증명은 아니다.