comparable: true
옵션은 serialize
메서드에 추가되어, 직렬화된 데이터를 비교할 때 문자열 비교 대신 역직렬화된 객체 자체를 비교하도록 합니다. 예를 들어, preferences
해시의 키 순서가 바뀌어도 Rails는 이를 동일한 데이터로 인식하여 user.changed?
가 false
를 반환하고 불필요한 user.save!
작업을 방지합니다. 이는 개발자가 의도하지 않은 데이터베이스 트랜잭션을 줄여 시스템 부하를 경감시키고 성능을 최적화하는 데 효과적입니다.
이 기능은 기본 JSON 직렬화는 물론, CompressedJSON
과 같은 사용자 정의 직렬화기에서도 동일하게 작동합니다. comparable: true
는 외부 API에서 데이터를 가져올 때 필드 순서가 불규칙하거나, JSON/YAML 직렬화 시 포맷팅 차이로 인한 불필요한 업데이트를 방지할 때, 그리고 자주 변경되지 않는 설정이나 레거시 데이터를 다룰 때 특히 유용합니다.
그러나 직렬화된 데이터에 타임스탬프나 고유 식별자처럼 변경 시 반드시 업데이트가 필요한 요소가 포함되거나, 직렬화 포맷의 미세한 변경까지 추적해야 하는 경우, 또는 복잡한 비교 로직을 가진 사용자 정의 직렬화기에서는 사용을 지양해야 합니다.