.. 연산자란 무엇인가?
Ruby에서 .. 연산자는 시작 값과 끝 값을 모두 포함하는 ‘포괄적 범위(inclusive range)’를 생성합니다. 이는 특정 값의 집합을 정의할 때 매우 유용하며, 배열로 변환하면 그 포함 관계를 명확히 확인할 수 있습니다.
ruby
(1..5).to_a
# => [1, 2, 3, 4, 5]
.. 연산자를 사용한 쿼리 예시
Rails에서 .. 연산자는 특히 시간 범위나 값의 범위를 기준으로 레코드를 쿼리할 때 매우 효과적입니다. 예를 들어, 현재부터 30일 이내의 start_at 날짜를 가진 모든 Slot 레코드를 찾고자 할 경우, 다음과 같이 간결하게 표현할 수 있습니다.
ruby
cutoff = 30.days.from_now
Slot.where(start_at: ..cutoff)
이 코드는 대략 다음과 같은 SQL 쿼리를 생성합니다.
sql
SELECT * FROM slots WHERE start_at <= '2025-06-19 12:00:00';
이 방식은 매우 짧고, 표현력이 풍부하며, 읽기 쉬운 코드를 가능하게 합니다.
.. 연산자 없이 쿼리하는 경우
동일한 쿼리를 .. 연산자 없이 작성하면 다음과 같습니다.
ruby
Slot.where('start_at <= ?', 30.days.from_now)
이 코드는 문법적으로 유효하지만, .. 연산자를 사용하는 방식에 비해 더 장황하고 “Ruby답지 않은” 느낌을 줍니다. 이는 특히 시간 기반 쿼리에서 코드의 가독성과 유지보수성에 영향을 미칠 수 있습니다. .. 연산자는 Rails에서 시간 기반 쿼리를 다룰 때 더 깔끔하고 관용적인 Ruby 코드를 작성하는 데 크게 기여합니다.