Validation & Callback — 데이터의 품질을 지키는 방법

2025. 7. 10. 09:00·Ruby On Rails
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
'Ruby On Rails' 카테고리의 다른 글
  • Rails의 철학과 Convention over Configuration 이해하기
  • Partial, Layout, Helper — 뷰를 깔끔하게 정리하는 기술
  • 마이그레이션과 스키마 변화 — 안전하게 DB 구조 바꾸기
  • Rails에서의 MVC 구조 진짜 제대로 파보기
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    flutter앱개발
    Nextjs
    fluttertips
    UI디자인
    openweather
    백엔드개발
    rails보안
    flutterui
    Flutter
    flutter개발
    UIUX
    RubyOnRails
    table_calendar
    캘린더앱
    다크모드
    flutter기초
    메모앱
    flutter게시판
    ActiveRecord
    날씨앱
    북마크기능
    코드를걷는사람
    감성앱
    모바일앱개발
    flutter상태관리
    정적사이트
    Firebase
    flutter디자인
    개발블로그
    뉴스앱
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
Validation & Callback — 데이터의 품질을 지키는 방법
상단으로

티스토리툴바