Chapter 3-3 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식

2025. 5. 27. 13:16·Fastapi

✅ 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식

1. 🎯 목표: 어떤 식별자가 필요한가?

우리는 다음과 같은 조건을 만족하는 **식별자(ID)**가 필요합니다:

  • ✅ 고유(unique) 해야 한다
  • ✅ 충분히 짧아야 한다 (uuid4는 너무 김)
  • ✅ alphanumeric 문자로 구성되어야 한다 (URL-safe)

❌ 특수문자 포함된 ID는 URL에 적합하지 않음 → 사용 금지


2. ❌ uuid4가 부적절한 이유

  • UUID는 고유성을 보장하지만 너무 깁니다 → 550e8400-e29b-41d4-a716-446655440000
  • 길고 특수문자가 포함되어 URL에 바로 쓰기 불편합니다

3. ✅ 해결책: uuid + Base62 인코딩

uuid 값 같은 큰 숫자 → 짧고 고유한 문자열로 변환!


4. 🧬 Base62 인코딩 구현

📁 app/utils/base62.py

import string
from typing import Final, ClassVar

class Base62:
    BASE: Final[ClassVar[str]] = string.ascii_letters + string.digits
    BASE_LEN: Final[ClassVar[int]] = len(BASE)

    @classmethod
    def encode(cls, num: int) -> str:
        if num < 0:
            raise ValueError(f"{cls}.encode() needs positive integer but you passed: {num}")

        if num == 0:
            return cls.BASE[0]

        result = []
        while num:
            num, remainder = divmod(num, cls.BASE_LEN)
            result.append(cls.BASE[remainder])
        return "".join(result)

📌 Base62.encode(125) → "cb" 같은 짧은 문자열이 생성됩니다.


5. ⚙️ Base 계열 인코딩 동작 원리

단계 설명

1 사용할 문자 집합(BASE)을 정함 (62개: a-z, A-Z, 0-9)
2 변환할 정수를 준비함
3 BASE 길이로 나눠 몫과 나머지를 구함
4 나머지를 BASE 인덱스로 사용해 문자 선택
5 몫이 0이 될 때까지 반복
6 결과 리스트를 문자열로 합침

6. 🧠 요약 정리

항목 설명

목적 고유하고 짧은 URL-safe ID 만들기
문제 uuid는 길고 특수문자 포함됨
해결책 uuid → 정수 → Base62 인코딩
장점 고유 + 짧음 + URL 안전
응용 단축 URL, 고유 코드, 미팅 ID 등

Base62 인코딩은 짧고 안전한 식별자가 필요한 모든 서비스에서 매우 유용합니다. ✨

'Fastapi' 카테고리의 다른 글

Chapter 4-3 MySQL로 Meeting 생성하기 - FastAPI & Tortoise ORM  (0) 2025.05.28
Chapter 4-1 📌 EdgeDB 소개 및 설치 가이드  (1) 2025.05.28
Chapter 3-4 Base62 디버깅과 디버깅 스킬의 중요성  (0) 2025.05.27
Chapter 3-1 미팅 생성 API 스펙 만들기  (0) 2025.05.27
Chapter 2-6 Github Action 설정 및 캐싱 가이드  (0) 2025.05.23
'Fastapi' 카테고리의 다른 글
  • Chapter 4-3 MySQL로 Meeting 생성하기 - FastAPI & Tortoise ORM
  • Chapter 4-1 📌 EdgeDB 소개 및 설치 가이드
  • Chapter 3-4 Base62 디버깅과 디버깅 스킬의 중요성
  • Chapter 3-1 미팅 생성 API 스펙 만들기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (118)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    btsdischarge
    remittance
    btscomeback
    homebartrend
    lawsuitculture
    gpterror
    chinanightlife
    btsreunion
    newpoliticalparty
    global politics
    travel ban
    뷔
    classaction
    hotcoffeecase
    RM
    americanlaw
    college reunions
    self-growth
    bts
    basalcellcarcinoma
    btsjungkook
    titaniumcase
    life reflection
    chatgpterror
    americaparty
    trumpmuskclash
    smartphonedurability
    urbantrends
    youngprofessionals
    livebroadcast
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 3-3 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식
상단으로

티스토리툴바