피드로 돌아가기
Dev.toDatabase
원문 읽기
Rolling Deploy 시 데이터 정합성 보장을 위한 Bit Operator 쿼리 전환
Why flag_shih_tzu is changing its default SQL for bit flags
AI 요약
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() 리스트 성능 측정 후 선택적 적용