작년에 TypeID를 처음 발표한 이후로 커뮤니티에서 상당한 채택과 관심을 얻었습니다. 커뮤니티에서 제공하는 23개의 다양한 언어 클라이언트와 Typescript 구현의 주간 NPM 다운로드가 90,000회에 달합니다. .
지난 주에 우리는 Typescript 구현인 TypeID-JS 버전 1.0을 출시했습니다. 이번 출시를 축하하기 위해 TypeID를 작성한 이유와 이를 사용하여 Jetify에서 유형 안전을 보장하는 방법에 대해 더 자세히 공유하고 싶었습니다.
우리는 팀 전체에 Devbox 또는 Docker 기반 프로젝트를 배포하고 관리하기 위한 솔루션인 Jetify Cloud를 구축하면서 TypeID에 대한 아이디어를 개발했습니다. Jetify Cloud의 아키텍처에는 조직, 사용자, 배포, 비밀 및 프로젝트 등 우리가 관리해야 하는 다양한 개체가 있으며, 모두 구별하기 위해 고유한 식별자가 필요합니다.
처음에는 모범 사례를 따르고 엔터티의 각 인스턴스에 UUID를 할당하는 것부터 시작했습니다. 그럼에도 불구하고 우리는 곧바로 문제에 직면했습니다: UUIDv7에는 유형 안전성이 부족합니다! 아래 코드를 예로 들어보세요.
export const getMember = async ( memberId: UUID, orgId: UUID, ) => { const { member, organization } = await authClient.organizations.members.get({ organization_id: orgId, member_id: memberId, }); return { member, organization }; };
이 기능은 두 개의 UUID를 사용하여 회원과 조직을 조회합니다. 그러나 이 함수는 memberID 및 orgID가 올바른 엔터티를 나타내는지 확인할 수 없습니다. 개발자가 orgID가 필요한 곳에 memberID를 실수로 사용하는 경우 런타임 시에만 문제를 발견할 수 있습니다.
이 문제에 대한 해결책을 찾다가 접두사를 사용하여 유형 정보를 ID로 인코딩하는 Stripe의 Object ID를 만났습니다. 이는 훌륭한 솔루션처럼 보였지만 안타깝게도 여러 언어에 걸쳐 형식화된 ID를 일관되게 구현하기 위한 잘 정의된 표준을 찾을 수 없었습니다.
TypeID는 이러한 일관된 표준을 만들기 위한 우리의 시도입니다. TypeID는 Stripe의 접두사 유형에서 영감을 받아 유형이 안전하고 K 정렬이 가능한 전역적으로 고유한 식별자입니다. TypeID는 또한 다른 언어의 클라이언트 및 라이브러리 구현을 위한 일관된 표준을 제공합니다.
TypeID는 고유 식별자를 세 부분으로 구성된 소문자 문자열로 인코딩합니다.
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
이 형식을 사용하면 TypeID 호환 클라이언트가 유형 정보를 ID로 인코딩 및 디코딩한 다음 빌드 또는 컴파일 시 검사를 실행하여 올바른 ID를 사용하고 있는지 확인할 수 있습니다. 예를 들어, 사용자 엔터티에 대해 임의의 TypeID를 생성하려면 다음과 같이 할 수 있습니다.
TypeID를 사용하면 함수에 유형 검사를 추가하고 런타임 시 오류를 포착할 수도 있습니다. 위의 예를 다시 작성하면 이제 개발자가 올바른 위치에서 올바른 ID를 사용할 것이라고 확신할 수 있습니다.
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID<'member'>, orgId: TypeID<'org'>, ) => { ... }
유형 안전성 외에도 이 형식에는 개발자가 사용하기 쉽게 만드는 몇 가지 속성이 있습니다.
오늘 우리는 TypeID-JS 라이브러리 버전 1.0을 발표합니다. 이 업데이트에는 유용성과 유형 안전성을 개선하기 위해 다음과 같은 몇 가지 새로운 기능이 추가되었습니다.
선택한 NodeJS 패키지 관리자를 사용하여 JS 프로젝트에 TypeID를 추가할 수 있습니다. JS를 사용하지 않습니까? TypeID에는 Go에서 OCaml, SQL에 이르기까지 26가지의 다양한 구현이 있습니다. TypeID 구현을 직접 작성하는 데 관심이 있다면 공식 사양을 확인하세요.
Jetify 팀은 강력한 개발자 도구를 구축합니다. Jetify Cloud로 배포 및 프로젝트를 단순화하거나 Devbox로 온보딩 + 개발 환경을 자동화하세요. Twitter에서 우리를 팔로우하거나 Discord 서버에서 실시간으로 개발자와 채팅할 수 있습니다. 또한 Github Repo에서 이슈와 풀 요청을 환영합니다.
위 내용은 TypeID-JS: Type Safe, K-Sortable Javascript용 고유 ID의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!