728x90
반응형
Rails의 모델(Model)은 단순한 데이터 객체가 아닙니다.
그 안에는 우리가 애써 쌓아올린 데이터의 신뢰성과 무결성을 지키기 위한 다양한 도구들이 숨어 있죠.
이번 글에서는 그 중에서도 가장 핵심적인 기능인 Validation(유효성 검사)과 Callback(콜백)을 통해 어떻게 데이터 품질을 지킬 수 있는지 알아보겠습니다.
✅ Validation — 유효한 데이터만 저장하게 만들기
validates
메서드를 사용하면 모델에서 입력된 값이 조건에 맞는지를 자동으로 검사할 수 있어요.
class Post < ApplicationRecord
validates :title, presence: true
validates :title, length: { minimum: 5 }
validates :category, inclusion: { in: %w[tech life code] }
end
📌 주요 옵션들
presence: true
— 필수 입력length
— 길이 제한 (최소/최대)uniqueness
— 중복 방지format
— 정규표현식으로 형식 제한inclusion / exclusion
— 특정 값 범위 제한
🧪 예시: 이메일 유효성
validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }
🧠 커스텀 Validation 만들기
내장된 옵션 외에 직접 만든 조건도 적용할 수 있어요.
validate :title_must_not_contain_emoji
def title_must_not_contain_emoji
if title =~ /[\u{1F600}-\u{1F6FF}]/
errors.add(:title, "제목에 이모지를 사용할 수 없습니다.")
end
end
조건이 맞지 않을 경우 errors.add
로 에러 메시지를 추가하면 됩니다.
🔁 Callback — 데이터 흐름 속 개입 포인트
콜백은 객체의 라이프사이클에 맞춰 특정 메서드를 실행하도록 해주는 기능입니다.
즉, 저장되기 전, 저장된 후, 삭제되기 전 등 특정 순간에 자동으로 실행되는 코드를 정의할 수 있어요.
⏱ 자주 쓰는 콜백들
before_validation
after_validation
before_save
after_save
before_create / after_create
before_destroy / after_destroy
🧹 예시: 저장 전 공백 제거
before_save :strip_title
def strip_title
self.title = title.strip
end
📢 예시: 포스트 생성 후 알림 발송
after_create :notify_author
def notify_author
NotificationService.send_new_post_alert(self.author)
end
⚖️ Validation vs Callback — 언제 써야 할까?
구분 | Validation | Callback |
---|---|---|
목적 | 데이터의 유효성 보장 | 자동 실행되는 작업 정의 |
실행 시점 | validation 단계 | save, create, destroy 등 DB 액션 전후 |
대표 기능 | 빈 값 방지, 포맷 검사 등 | 공백 제거, 알림 발송, 로깅 등 |
🎯 마치며
우리는 단지 데이터를 "저장"하는 것이 아니라, 그 데이터가 의미 있는 상태로 존재하길 원합니다.
Rails는 Validation과 Callback이라는 훌륭한 도구를 통해 우리의 데이터 품질을 자동으로 지켜주는 수호자 역할을 해줘요.
당신이 지금 작성하고 있는 코드 한 줄, 그 안에 사용자 신뢰와 서비스의 완성도가 담겨 있다는 걸 잊지 마세요 😊
728x90
반응형
'Ruby On Rails' 카테고리의 다른 글
Rails의 철학과 Convention over Configuration 이해하기 (6) | 2025.07.12 |
---|---|
Partial, Layout, Helper — 뷰를 깔끔하게 정리하는 기술 (2) | 2025.07.11 |
마이그레이션과 스키마 변화 — 안전하게 DB 구조 바꾸기 (1) | 2025.07.09 |
Rails에서의 MVC 구조 진짜 제대로 파보기 (2) | 2025.07.08 |
ActiveRecord로 데이터 다루기 — CRUD의 정석 (0) | 2025.07.07 |