PostgreSQL 18 없이 Ruby on Rails에서 UUIDv7 사용하기

Using UUIDv7 with Ruby on Rails Without PostgreSQL 18

작성자
HackerNews
발행일
2025년 11월 09일

핵심 요약

  • 1 PostgreSQL 18 업그레이드 없이 Ruby on Rails 애플리케이션에서 UUIDv7을 활용하는 방법을 제시합니다.
  • 2 커스텀 데이터베이스 함수를 생성하고 기존 및 신규 테이블의 기본 키에 적용하여 UUIDv7을 구현합니다.
  • 3 UUIDv7은 시간 순서 정렬 및 B-tree 인덱스 파편화 방지 등 성능 이점을 제공하며, 향후 PostgreSQL 18로 업그레이드 시 네이티브 함수로 쉽게 전환 가능합니다.

도입

PostgreSQL 18에 도입된 UUIDv7은 시간 순서대로 정렬되는 특성 덕분에 B-tree 인덱스 파편화를 줄이고 날짜 기반 정렬 정확도를 높이는 등 중요한 이점을 제공합니다. 현재 Ruby on Rails는 기본적으로 UUIDv4만 지원하지만, 데이터베이스를 PostgreSQL 18로 업그레이드하거나 Rails 패치를 기다리지 않고도 이러한 UUIDv7의 장점을 즉시 활용할 수 있는 방법이 있습니다. 본 문서에서는 Rails 환경에서 커스텀 데이터베이스 함수를 통해 UUIDv7을 구현하는 실용적인 접근 방식을 소개합니다.

PostgreSQL 18 없이 Ruby on Rails에서 UUIDv7을 구현하기 위해 다음 단계를 수행합니다.

1. 커스텀 UUIDv7 생성 함수 생성

먼저, PostgreSQL 18의 네이티브 UUIDv7과 동일한 밀리초 정밀도로 UUIDv7 값을 생성하는 generate_uuidv7 데이터베이스 함수를 마이그레이션을 통해 생성합니다. 이 함수는 향후 네이티브 함수와의 충돌을 피하도록 명명되었으며, structure.sql 사용 또는 관련 Gem이 필요합니다.

2. 기존 테이블 기본 키 업데이트

다음으로, 기존 테이블들의 UUID 타입 기본 키들이 새로운 generate_uuidv7() 함수를 사용하여 UUID를 생성하도록 기본값을 변경하는 마이그레이션을 실행합니다. 이는 모든 해당 테이블에 적용됩니다.

3. 신규 테이블에 UUIDv7 적용

새로 생성되는 테이블의 경우, create_tableid: :uuid, default: -> { "generate_uuidv7()" } 옵션을 사용하여 기본 키가 자동으로 UUIDv7로 생성되도록 설정합니다.

4. (선택 사항) 네이티브 UUIDv7 함수로 전환

데이터베이스를 PostgreSQL 18 이상으로 업그레이드하면, 기존 테이블의 기본 키를 네이티브 uuidv7() 함수로 전환하고 이전에 생성한 커스텀 generate_uuidv7 함수를 삭제하여 시스템을 최적화할 수 있습니다.

결론

이러한 단계를 통해 PostgreSQL 18로의 즉각적인 업그레이드나 Rails 프레임워크의 패치를 기다리지 않고도 Ruby on Rails 애플리케이션에서 UUIDv7의 장점을 활용할 수 있습니다. 커스텀 함수를 사용하여 시간 순서 정렬, B-tree 인덱스 효율성 향상 등 UUIDv7이 제공하는 이점을 즉시 얻을 수 있으며, 향후 데이터베이스 환경이 업그레이드될 경우에도 네이티브 `uuidv7()` 함수로의 원활한 전환 경로가 마련되어 있습니다. 이는 애플리케이션의 성능과 유지보수성을 동시에 향상시키는 유연한 접근 방식입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!