피드로 돌아가기
Why flag_shih_tzu is changing its default SQL for bit flags
Dev.toDev.to
Database

Rolling Deploy 시 데이터 정합성 보장을 위한 Bit Operator 쿼리 전환

Why flag_shih_tzu is changing its default SQL for bit flags

Peter H. Boling2026년 5월 26일4intermediate

Context

하나의 Integer 컬럼에 여러 Boolean 속성을 저장하는 Bit Flag 구조 사용 중 기존 IN() 리스트 기반 쿼리 방식은 애플리케이션이 인지하는 모든 Flag 조합을 미리 알아야 하는 제약 존재 Rolling Deploy 과정에서 신규 Flag 추가 시 구버전 프로세스가 최신 데이터를 누락하는 정합성 문제 발생

Technical Solution

  • IN() 리스트 기반의 값 매칭 방식을 Bit Operator 연산 방식으로 변경
  • flags & 1 = 1 형태의 쿼리를 통해 특정 Bit 활성화 여부만 판단하는 구조 설계
  • 애플리케이션의 Flag 상태 인지 범위와 관계없이 DB 레벨에서 독립적인 Bit 검증 수행
  • 부정 쿼리 시 flags & 1 = 0 조건을 적용하여 일관된 필터링 로직 구현
  • Chained 조건 발생 시 각 Flag에 대해 개별 Bit Check를 수행하는 AND 결합 구조 채택
  • 하위 호환성을 위해 default_flag_query_mode 옵션을 통한 기존 :in_list 모드 선택권 제공

1. Bit Flag 사용 시 신규 플래그 추가가 기존 쿼리에 영향을 주는지 검토

2. Rolling Deploy 환경에서 구버전/신버전 코드가 동일한 데이터 셋을 바라볼 때의 정합성 시나리오 테스트

3. 인덱스 최적화가 필요한 소규모 고정 플래그의 경우 IN() 리스트 성능 측정 후 선택적 적용

원문 읽기