SheepDev

해시·ID·난수

테스트 ID와 무작위 문자열 한꺼번에 만들기

사용할 도구

목록 UI 테스트라면 1·2·3도 충분할 수 있지만 초대 링크 비밀 값은 다릅니다. 중복 방지·예측 어려움·재현성 중 필요한 목적에 따라 생성법이 달라집니다. 모두 랜덤이라고 묶지 말고 세 목적을 나누세요.

UUID 세 개를 만들어 구조 읽기

v4 UUID를 3개 생성하세요. 매번 달라 고정 예시 값과 같을 필요가 없습니다. 16진수 8-4-4-4-12 묶음에 하이픈 포함 36글자이며 세 번째 묶음 첫 4 같은 버전 비트가 고정되어 128bit 전부 난수는 아닙니다.

구조 예시이며 비밀 값 아님
550e8400-e29b-41d4-a716-446655440000

생성 값을 검사해 형식·버전을 볼 수 있지만 실제 사용자·레코드 존재를 증명하지 않으며 DB 조회도 없습니다. 형식 검증과 권한 테스트는 별개이고 긴 ID가 접근 제어를 대신하지 않습니다.

v7에는 시각 정보도 포함됨

v7 앞부분에는 Unix 밀리초가 있어 확인 도구로 읽을 수 있습니다. 시간 정렬에 도움이 되지만 그 시각에 작업이 완료되었다는 증거는 아닙니다. 기기 시계·생성 방식·ID 재사용 영향을 받으므로 감사 시각은 별도로 기록하세요.

같은 밀리초·다른 기기 생성까지 보편적 순서를 보장하지는 않습니다. 식별·저장 요구로 v4·v7을 고르세요. v7 공개는 시각 구조도 공개하므로 최신 버전이라고 모든 비밀 토큰 용도에 더 좋은 것은 아닙니다.

랜덤 토큰은 글자보다 원본 바이트 수 보기

32byte는 16진수 64글자, 패딩 없는 Base64url 43글자입니다. 짧다고 난수 비트가 줄어드는 것이 아니라 표기 효율 차이입니다. 별도 실행은 새 바이트를 생성하므로 같은 값의 다른 표기라고 기대하지 말고 길이 관계를 비교하세요.

암호학적 난수를 사용하며 Math.random으로 대체하지 않습니다. 하지만 배포·저장·폐기는 담당하지 않습니다. 초대·재설정 링크의 만료·일회용·권한은 앱 설계라 긴 난수를 만들었다고 전체 흐름이 안전해지는 것은 아닙니다.

재현 가능한 테스트는 목적이 다름

매번 달라지는 데이터는 UI·처리 버그 재현을 방해할 수 있습니다. 더미 데이터에서 열 정의·행 수·Seed를 고정하면 됩니다. 이는 예측 불가능한 비밀과 반대 목적이라 Seed로 재현되는 값을 비밀번호·인증 토큰으로 쓰면 안 됩니다.

난수 생성 테스트는 고정 문자열 대신 개수·형식·문자 집합·버전·바이트 수를 확인하세요. 작은 표본에서 충돌이 없어도 미래 중복 불가능을 증명하지 못하며 저장 측 유일성 제약·충돌 처리도 필요합니다.

사람이 입력할 값에는 가독성도 필요

수동 입력 비밀번호는 0/O·1/l 같은 혼동 문자를 제외하고 대상 시스템 길이·기호 조건을 확인할 수 있습니다. 여러 문자군 필수 조건은 포함할 길이도 필요합니다. 생성 후 예측 가능한 패턴을 덧붙이기보다 생성 조건으로 지정하세요.

목적을 정하세요. 레코드 식별은 UUID, 예측 어려운 비밀은 필요한 바이트의 토큰, 버그 재현은 Seed 가상 데이터입니다. 실제 개인정보를 테스트에 복사할 필요는 없습니다. 공유 전 일반 ID인지 비밀인지 구분해 클립보드·화면 공유를 다루세요.

ID가 다르다고 테스트 상태가 달라지지는 않습니다

UUID 백 개는 다른 식별자 백 개이지 의미 있는 상태 백 개는 아닙니다. 이름, 상태, 길이가 같으면 빈 이름, 긴 이름, 같은 시각, 표시 이름은 같고 ID는 다른 경우 등이 빠집니다. 재현해야 하는 버그는 생성 결과를 Fixture로 명시적으로 고정하고 생성기가 다시 같은 값을 만들기를 기대하지 마세요.

UUID 형식이 맞아도 레코드가 있다는 뜻은 아니므로 가상 ID로 없음 상태를 시험할 수 있습니다. 짧은 일련번호로 바꾸면 실제 길이의 줄바꿈이나 제한을 놓칠 수 있습니다. 목적에 맞춰 형식, 존재 여부, 길이, 재현성을 따로 정하고 식별자와 비밀 토큰 요구를 혼동하지 마세요.

배포하는 Fixture에 운영 사용자 ID나 실제 토큰을 섞지 마세요. 형태와 레이아웃 검사는 대개 가상 값으로 충분합니다. 복사할 때 용도를 표시해 실제 자격 증명으로 오해하지 않게 하세요. 자동 저장하지 않으므로 재현에 필요한 값만 명시적으로 남깁니다. 난수 생성, 재현용 데이터, 운영 비밀은 서로 다른 용도입니다.

참고 자료

사용할 도구

가이드 →