GN⁺: Sqids - 숫자로부터 짧고 고유한 ID를 생성하는 라이브러리
(sqids.org)- Sqids는 숫자로부터 YouTube 스타일의 ID를 생성하는 오픈소스 라이브러리
- 생성된 ID는 짧고, 사용자 정의 알파벳으로 생성 가능하며, 충돌이 없는 것이 보장
- 예시로 제공된 ID는
https://example.com/Lqj8a0
와 같은 형태임
Sqids 사용 이유
- Sqids의 주된 사용 목적은 시각적인 효과에 있음
- 웹앱에서 숫자 대신 ID를 사용하고자 할 때 Sqids가 좋은 선택이 될 수 있음
- 사용 사례로는 링크 단축, URL 안전 사용, 이벤트 ID, 충돌 없는 인코딩/디코딩, 일회용 비밀번호 등이 있음
- 민감한 데이터에는 적합하지 않으며, 사용자 ID로 사용 시 사용자 수가 노출될 수 있음
Sqids의 특징
- 음수가 아닌 숫자로부터 짧은 ID 생성 가능
- 인코딩 및 디코딩이 쉬움
- 자동 생성된 ID에는 일반적인 욕설이 포함되지 않음
- 사용자 정의 ID를 위한 알파벳 셔플 지원
- 40개의 프로그래밍 언어 지원, 그 중 15개는 새로운 디자인을 사용함
- 모든 버전에서 동일한 ID를 생성함
- 작은 라이브러리 크기와 관대한 라이선스를 가짐
GN⁺의 의견
- Sqids 라이브러리는 웹앱에서 숫자 대신 짧고 충돌 없는 ID를 사용하고자 하는 개발자에게 유용함
- 이 라이브러리는 시각적으로 매력적인 ID를 제공하고, 다양한 프로그래밍 언어를 지원하여 접근성이 높음
- 오픈소스 개발자에게 유리한 기회를 제공하고, MIT 라이선스로 저작권이 보호
url 이 그냥 posts/1, posts/2, posts/3 으로 되어 있으면 크롤러가 1,2,3,4,5... 넣어서 돌리는데
url 이 posts/L12Qsd, posts/dei24A 이런 식으로 되어 있으면 그걸 못해서 그런 것 같네요
hashids 랑 무슨 차이일까 궁금해서 찾아보니 https://hashids.org 입력하면 https://sqids.org/ 로 가는군요. 이름을 바꾸셨나봅니다.
Hacker News 의견
-
연속된 ID를 사용하는 회사로부터 비즈니스 인사이트를 얻을 수 있는 가능성
- 예를 들어, 회원가입 시 부여받은 ID로 회사의 성장률 추정 가능
- 애플리케이션 내 모든 리소스 유형에 적용 가능
- URL 바에 있는 '쓰레기 값'이 요즘 시대에 얼마나 중요한지 의문
- 대부분의 브라우저가 URL 대부분을 숨기기 때문에 UUID v7의 널리 퍼진 사용을 기다리며, uulids 사용
- 내장된 시간 구성 요소가 때때로 유용함 (예: 객체 병합 규칙)
-
일회용 패스코드 언급에 대한 의문
- 패스코드는 예측 불가능해야 하지만, 반드시 고유할 필요는 없음
- 적절한 랜덤 소스를 제공하면 작동하지만, '쓰레기 값으로 채워진' 특징은 실제보다 복잡해 보임
- 4~8개의 랜덤 숫자가 잘 작동하며 보안 수준을 명확히 제공
- 숫자는 대소문자 구분이 있는 라틴 문자보다 이해하기 쉬움, 특히 다른 문자 체계를 사용하는 언어 사용자에게
-
128비트 정수나 바이트 배열을 포맷할 수 없는 것에 대한 실망
- UUID 포맷팅이 가능하게 해줄 것
- 공개적인 정수 ID 사용에 대한 선호도 낮음
- 오름차순 ID로 중요한 정보 유출 위험 존재
- URL, QR 코드 등을 위해 UUID를 Base64URL로 포맷팅하여 짧게 만드는 것을 선호
-
Ruby 애플리케이션에서는 높은 기수로 변환하는 방법 사용
- Sqid는 Ruby 라이브러리를 제공하고 훨씬 높은 기수 설정을 허용, 대문자 문자 및 이모지 포함
- 공간 절약이 큰 차이를 만들기 전에 훨씬 더 큰 숫자가 필요
- 새로운 의존성을 추가할 가치가 있는지 알기 어려움
-
욕설 필터링이 설계상 책임이 될 수 있음
- 인코딩을 보존하기 위해 금지된 단어 목록을 불변으로 유지해야 함
- 그렇지 않으면 이전 sqids가 잘못된 것으로 디코드될 수 있음
-
nanoid 사용과 안전한 문자 사전의 사용을 선호
- '나쁜' 단어를 찾기 위해 하드코딩된 구현 대신 유사한 사전 접근 방식 사용을 제안
- 성능 테스트 스위트에 대한 관심 표명
- 대부분의 언어에서 UUID v4 생성이 최적화되어 있어 사용자 정의 솔루션이 실제로 더 나은지 의문
-
무작위로 생성된 문자열의 사용에 대한 논의
- ID, 비밀번호 복구 토큰 등에 사용
- 수백만 개 생성되었으며 매일 수십만 명이 이를 확인
- 무작위 컨텐츠 ID에 대한 불만 사례 없음
- 현대 사회가 누군가를 모욕하는 것을 너무 두려워하여, 욕설 필터가 데이터베이스 ID와 비밀번호 복구 토큰에까지 확장됨
- 최소 길이를 8로 설정하면 전체 ID로서 완전한 단어 욕설이 나타날 가능성이 낮음
-
"Get Started" 섹션에서 40개 언어에 대한 링크 제공에 대한 혼란
- 40개 중 15개 언어만 시작할 수 있으며, 나머지 25개는 관심을 나타내기 위해 사람들이 저장소를 시작하도록 요청하는 골격 저장소임
-
블록리스트를 조정하거나 발전시키는 방법에 대한 질문
- ID가 블랙리스트에 있으면 단순히 증가
- ID는 블랙리스트 내용에 고정되어 있으며, 이를 조정하면 이전에 생성된 ID의 특정 세그먼트가 무효화됨
-
이 스레드에서 많은 사람들이 ID/숫자에서 인사이트를 숨기는 좋은 방법이라고 언급
- 생성된 값이 쉽게 디코드될 수 있으므로, 몇 개의 숫자를 디코드하여 인사이트를 얻을 수 있지 않을까 하는 의문 제기