검증과 쿼리
데이터 무결성과 조회를 다룹니다
검증과 쿼리은(는) 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 }
endvalid?와 errors
저장하지 않고 검증을 실행하려면 valid?를 호출합니다. 저장에 실패한 후에는 record.errors에 문제가 저장되고, errors.full_messages는 사용자 인터페이스에 표시할 수 있는 읽기 쉬운 문자열을 제공합니다.
user = User.new(name: "")
if user.valid?
user.save
else
puts user.errors.full_messages
endsave와 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
endwhere를 사용한 질의
질의 인터페이스는 행을 필터링하는 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.