Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

채널 코드 생성방식 개선 #3

Open
devphilip21 opened this issue Jun 21, 2020 · 0 comments
Open

채널 코드 생성방식 개선 #3

devphilip21 opened this issue Jun 21, 2020 · 0 comments
Assignees
Labels
🙋‍♀️Discussion 제안 또는 논의를 요청할 때 사용하는 라벨

Comments

@devphilip21
Copy link
Member

devphilip21 commented Jun 21, 2020

현재 상황

  1. 현재 채널코드 구현 방식인 uuid 는 32자리(대시 제외)의 문자열 id 값을 생성 해준다.
    • 이 32자리의 ‘자리수를 줄이는 방식’에 대한 다양한 논의들(구글 그룹스 및 여러 개발 커뮤니티)를 찾아봤고 고민해봤으나 방법은 못 찾았다.
    • 기본적으로 uuid 공식 스펙에 따르면 해싱(버전에 따라 다른 방식) 결과값을 16진수로 표현하는 방식을 가진다. 이를 64진수(0-9, a-z, A-Z, -,_ 활용)한 방식으로 바꾸면 자리수를 줄일 수 있지만 그래도 약 20자리 정도 된다.
  2. 우리는 채널코드 입력의 편의성(UX)를 위해서 최대 6자리, 대소문자 구분없음, 유일성을 보장하는 채널코드를 생성하고자 한다.
    • 위의 조건을 만족 시키는 경우의 수가 1700만개만존재 => 중복 없는 키값으로 사용하기에는 너무 적음
    • 즉, 셋(자리수/대소문자/유일성) 중 하나는 포기해야하는 상황
    • 기존에는 32자리의 문자열 id 값의 앞자리 6자리만 잘라서 사용하는 상황. 따라서 중복이 발생할 수 밖에 없음

현재 대안

uuid 방식을 그대로 사용하고, 중복되는 코드에 대해 리스팅으로 제공한다.

  • 32자리의 채널 코드값을 유지하고, 앞의 6자리만 입력하면 입장 가능 하도록 한다.
  • 만약 중복된다면, 입장할 채널을 선택할 수 있도록 리스팅 해준다

새로운 대안 제안

  1. 채널 코드에 대한 만료기한을 설정한다.
    • 기존 대안을 확장한 방식. 기본적으로 중복에 대해서는 기존의 메커니즘을 가져간다.
    • 다만, 채널코드는 그 채널의 유일한 ID가 아닌, 입장권의 역할을 한다.
    • 채널에 아무도 없는 채로 1일이 지나면, 해당 채널코드는 삭제된다.
      • 사람들이 나중에 다시 채널에 재접속 한다면, 히스토리를 통해 접속하지 채널코드를 기억하고 있다가 오진 않을 것이라고 생각했다.
      • 다만, 즐겨찾기를 추가하거나, URL로 들어오는 경우가 있을 수 있다.
      • 따라서 URL은 www.dropy.online/channels/1 이런 방식으로 채널코드가 아닌 채널 ID(채널 생성 순서)값으로 주어진다.
  2. 자리수를 8자리로 늘리고 유일하게 생성하는 해시 알고리즘을 직접 만든다.
    • 채널코드가 8자리라면, 대소문자 구분 없이 20억 개의 정도의 경우의 수가 생긴다. (충분하다)
    • 채널코드는 암호화 할 필요가 없다. 즉 중복을 없애기만 하면 된다. 이는 우리가 직접 알고리즘을 짜도 될듯 하다.
    • 유일성을 보장하는 방법에 대해 조금의 고민해본 결과
      방법 1. 증감 활용
      방법 2. 시간 속성 활용
      위의 해시 결과값을 보수값을 취하고, 32진법으로 표현하면 그럴듯 하게 나올듯
      실제로 uuid 도 해시함수 영역만 조금 다르고 크게 다르지 않음
@devphilip21 devphilip21 added the 🙋‍♀️Discussion 제안 또는 논의를 요청할 때 사용하는 라벨 label Jun 21, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🙋‍♀️Discussion 제안 또는 논의를 요청할 때 사용하는 라벨
Projects
None yet
Development

No branches or pull requests

4 participants