26P by neo 2023-11-26 | favorite | 댓글 6개
  • 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/ 로 가는군요. 이름을 바꾸셨나봅니다.

https://sqids.org/faq#hashids

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/숫자에서 인사이트를 숨기는 좋은 방법이라고 언급

    • 생성된 값이 쉽게 디코드될 수 있으므로, 몇 개의 숫자를 디코드하여 인사이트를 얻을 수 있지 않을까 하는 의문 제기