듀얼 데이터베이스 전략으로 개발 속도 유지
개발 중단 없는 마이그레이션을 위해 Rails 앱을 듀얼 데이터베이스 모드로 운영했습니다. on_mysql? 헬퍼 메서드를 통해 PostgreSQL과 MySQL 간 전환이 가능하게 하여, 개발팀은 기존 DB에서 기능 개발을, 마이그레이션 팀은 MySQL 호환성을 병렬로 확보했습니다. 이는 database.yml 설정의 동적 변경 및 LIKE/ILIKE와 같은 DB별 쿼리 구문 차이를 조건문으로 처리하는 방식으로 구현되었습니다.
스키마 및 데이터 타입 마이그레이션 과제
-
정밀도 문제: MySQL은
DECIMAL및 타임스탬프에 명시적인 정밀도와 스케일 지정이 필수적입니다. -
JSON 및 배열: PostgreSQL
JSONB는 MySQLJSON으로 이전되나, JSON 함수 직접 인덱싱 제한으로GENERATED ALWAYS AS컬럼을 활용했습니다. 네이티브 배열은 JSON 직렬화가 필요하며, PostgreSQLSTORED생성 컬럼 사용 시 대규모 테이블 재작성 이슈에 유의해야 합니다. -
부분 인덱스: MySQL에는 이 기능이 없어,
NULL의 고유 특성을 활용한 조건부NULL값 생성으로 고유 제약을 구현했습니다.
쿼리 구문 및 정렬 방식의 차이
-
NULL정렬: 두 DB의NULL기본 정렬 순서가 다르며, MySQL은NULLS FIRST/LAST구문을 지원하지 않습니다. Arel 사용 또는 조건부 정렬로 이식성을 확보했습니다. -
DISTINCT ON: PostgreSQL 전용 기능으로, MySQL에서는 서브쿼리 및 윈도우 함수로 대체했습니다.