0Pricing
Ruby Academy · 강의

검증과 쿼리

데이터 무결성과 조회를 다룹니다

검증과 쿼리은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

왜 검증해야 할까요?

검증은 데이터가 데이터베이스에 도달하기 전에 데이터를 보호합니다. 레코드를 저장할 때 실행되며, 유효하지 않은 데이터는 유용한 메시지와 함께 거부합니다.

  • 잘못된 데이터가 들어가지 않도록 합니다(이름 누락, 잘못된 형식의 이메일 등).
  • Ruby에서 실행되므로 사용자에게 메시지를 쉽게 보여 줄 수 있습니다.
  • 데이터베이스 제약 조건을 보완하지만 대체하지는 않습니다.

존재 여부 검증

가장 일반적인 규칙은 validates :field, presence: true이며, 비어 있지 않은 값을 요구합니다. 이 값 없이 저장하면 실패하고 오류가 기록됩니다.

class User < ApplicationRecord
  validates :name, presence: true
end

# User.create(name: "") fails to save

고유성 검증

uniqueness: true는 동일한 이메일을 사용하는 두 사용자가 있는 경우처럼 중복 값을 방지합니다. 검증만 사용하면 동시 요청이 많은 상황에서 경쟁 조건이 발생할 수 있으므로, 고유 데이터베이스 인덱스와 함께 사용해야 합니다.

class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end

형식과 길이

그 밖의 기본 제공 검증기:

  • 크기 제한에는 length: { minimum: 8 }을 사용합니다.
  • 패턴에는 format: { with: /regex/ }를 사용합니다.
  • 숫자 여부에는 numericality: true를 사용합니다.
  • 허용된 값에는 inclusion: { in: [...] }을 사용합니다.
class User < ApplicationRecord
  validates :password, length: { minimum: 8 }
  validates :age, numericality: { greater_than: 0 }
end

valid?와 errors

저장하지 않고 검증을 실행하려면 valid?를 호출합니다. 저장에 실패한 후에는 record.errors에 문제가 저장되고, errors.full_messages는 사용자 인터페이스에 표시할 수 있는 읽기 쉬운 문자열을 제공합니다.

user = User.new(name: "")
if user.valid?
  user.save
else
  puts user.errors.full_messages
end

save와 save! 비교

저장 방식은 두 가지입니다.

  • save는 true/false를 반환하므로 결과에 따라 분기할 수 있습니다.
  • save!는 실패할 때 RecordInvalid를 발생시키며, 유효하지 않은 데이터를 예외로 처리해야 할 때 유용합니다.

같은 패턴이 create/create!와 update/update!에도 적용됩니다.

user.save   # => false if invalid
user.save!  # => raises if invalid

사용자 지정 검증

기본 제공 검증기로 처리할 수 없는 규칙은 메서드로 작성한 다음 validate에 등록합니다. errors.add를 사용해 문제를 추가합니다.

class User < ApplicationRecord
  validate :name_not_admin

  def name_not_admin
    if name == "admin"
      errors.add(:name, "cannot be admin")
    end
  end
end

where를 사용한 질의

질의 인터페이스는 행을 필터링하는 where에서 시작합니다. 데이터베이스에 접근하기 전에 추가로 연결할 수 있는 지연 관계를 반환합니다.

User.where(active: true)
User.where("age > ?", 18)
User.where(role: ["admin", "editor"])

정렬과 제한

연결 가능한 메서드로 결과의 형태를 지정합니다.

  • order(created_at: :desc)는 정렬합니다.
  • limit(10)과 offset(20)은 페이지를 나눕니다.
  • select(:id, :name)은 열을 선택합니다.
User.where(active: true)
    .order(created_at: :desc)
    .limit(10)

집계와 지연 로딩

집계 도우미는 데이터베이스 함수를 실행합니다. count, sum(:amount), average(:age), maximum, minimum이 있습니다. 관계는 지연 방식으로 동작하므로, 열거하거나 집계 메서드를 호출하거나 to_a를 사용할 때만 질의가 실행됩니다.

User.where(active: true).count
Order.sum(:total)
User.average(:age)

범위

범위는 재사용 가능한 질의에 이름을 붙여 깔끔하게 조합할 수 있도록 합니다. 범위는 관계를 반환하며 서로 연결하거나 where와 연결할 수 있습니다.

class User < ApplicationRecord
  scope :active, -> { where(active: true) }
  scope :adults, -> { where("age >= ?", 18) }
end

User.active.adults

빠른 확인

검증과 질의에 대한 이해도를 확인해 보세요.

복습: 검증과 질의

데이터를 보호하고 가져오는 방법을 배웠습니다.

  • 존재 여부, 고유성, 길이, 형식과 같은 검증은 저장을 보호합니다.
  • valid?와 errors는 문제를 알려 주고, save!는 예외를 발생시킵니다.
  • 사용자 지정 검증으로 특수한 규칙을 처리할 수 있습니다.
  • where, order, limit, 집계, 범위로 지연 실행되는 질의를 구성할 수 있습니다.

이로써 모델 및 Active Record 과정이 끝났습니다.

자주 묻는 질문

“검증과 쿼리” 강의는 무료인가요?

네 — “검증과 쿼리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“검증과 쿼리”에서 뭘 배우나요?

데이터 무결성과 조회를 다룹니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Ruby Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“검증과 쿼리” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Active Record 기초
  2. 마이그레이션
  3. 연관 관계
  4. 검증과 쿼리
← Ruby Academy(으)로 돌아가기