본문으로 건너뛰기

Rails 8.1.0: 유효성 검증 및 콜백에 except_on 옵션 추가

Rails 8.1 introduced except_on option for validations and callbacks

작성자
발행일
2026년 01월 13일
https://blog.saeloun.com/2026/01/13/rails-add-except-on-option-for-validation-and-its-callbacks/

핵심 요약

  • 1 Rails 8.1.0에서 `except_on` 옵션이 도입되어 특정 컨텍스트에서 유효성 검증 및 검증 콜백을 쉽게 건너뛸 수 있게 되었습니다.
  • 2 기존에는 `on` 옵션의 제한, `if` 조건문 사용, `save(validate: false)`의 위험성 등으로 인해 조건부 검증 관리가 복잡했습니다.
  • 3 `except_on`은 조건부 제외 로직을 간소화하여 코드 가독성과 유지보수성을 향상시키며, 더욱 명확하고 안전한 모델 동작 제어를 가능하게 합니다.

도입

Rails 애플리케이션에서 모델의 데이터 유효성을 검사하는 것은 매우 중요하지만, 특정 상황에서는 이러한 검증이나 관련 콜백을 건너뛰어야 할 필요가 있습니다. 기존 Rails 버전에서는 이러한 조건부 검증 로직을 구현하는 데 여러 가지 제약과 복잡성이 존재했습니다. 개발자들은 `on` 옵션의 제한적인 범위나 복잡한 `if` 조건문을 사용해야 했으며, `save(validate: false)`와 같은 방법은 잠재적인 위험을 내포하고 있었습니다. Rails 8.1.0 버전에서 새로 도입된 `except_on` 옵션은 이러한 문제를 해결하고, 특정 컨텍스트에서 검증 및 콜백을 명시적으로 제외할 수 있는 간결하고 안전한 방법을 제공합니다.

Rails 8.1.0은 모델 유효성 검사 및 콜백 관리를 간소화하는 except_on 옵션을 도입했습니다. 이 옵션은 특정 컨텍스트에서 검증이나 콜백이 실행되지 않도록 명시적으로 지정할 수 있습니다.

기존 조건부 검증의 한계

  • on: 옵션: on: [:create]처럼 특정 컨텍스트에서만 검증을 실행할 수 있었으나, 특정 컨텍스트에서 제외하는 직접적인 방법은 없었습니다.```rubyclass Client < ApplicationRecord validates :name, presence: true, on: [:create]end

생성 시 유효성 검사* **`if 조건문`**: `if: :new_record?`와 같은 조건문을 사용했으나, 이는 코드 복잡성을 증가시켰습니다.rubyclass Client < ApplicationRecord validates :name, presence: true, if: :new_record?end

새 레코드일 때만 검증```* save(validate: false): 수동 검증 건너뛰기는 데이터 무결성 위험으로 권장되지 않았습니다.

except_on 옵션의 활용except_on 옵션은 지정된 컨텍스트에서 검증 또는 콜백을 건너뛰도록 명확하게 정의합니다.

  • 검증에 적용: 특정 작업(예: update) 시 검증을 건너뛰도록 설정합니다.```rubyclass Client < ApplicationRecord validates :name, presence: true, except_on: :updateend

업데이트 시 name의 존재 여부 검증 건너뜀* **`검증 콜백에 적용`**: 검증 콜백에도 `except_on`을 적용하여 특정 컨텍스트에서 콜백 실행을 제외할 수 있습니다.rubyclass Client < ApplicationRecord before_validation :set_name, except_on: :update validates :name, presence: true def set_name self.name = “Hello World” if name.blank? endend

업데이트 시 set_name 콜백 건너뜀````except_on`은 조건부 검증 및 콜백 로직을 더 명확하고 간결하게 정의하여 개발 효율성을 높입니다.

결론

Rails 8.1.0에서 도입된 `except_on` 옵션은 유효성 검증과 콜백에 대한 조건부 제외 로직을 크게 개선했습니다. 기존의 `on` 옵션의 한계나 복잡한 `if` 조건문, 그리고 위험성이 따르던 `save(validate: false)` 방식 대신, `except_on`은 특정 컨텍스트에서 검증 및 콜백을 명시적으로 건너뛸 수 있는 직관적이고 안전한 방법을 제공합니다. 이 기능은 애플리케이션의 모델 동작을 다양한 컨텍스트에 맞춰 관리하는 것을 간소화하여 코드의 가독성과 유지보수성을 높이는 데 크게 기여할 것입니다. 개발자들은 이제 더 명확하고 효율적인 방법으로 조건부 로직을 구현할 수 있게 되었습니다.

댓글0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.