ActiveSupport를 활용하여 Rails에서 시간을 가독성 있게 표시하기

Making Time Readable in Rails with ActiveSupport

작성자
jeff
발행일
2025년 10월 27일

핵심 요약

  • 1 Rails 애플리케이션에서 ActiveSupport 헬퍼를 사용하여 시간을 사용자 친화적으로 표시하는 방법을 설명합니다.
  • 2 `time_ago_in_words`와 `distance_of_time_in_words`를 통해 상대적인 시간 표현을 쉽게 구현할 수 있습니다.
  • 3 옵션 설정 및 로케일 조정을 통해 시간 표현의 정확성과 유연성을 높일 수 있습니다.

도입

Rails 애플리케이션에서 날짜와 시간은 사용자에게 중요한 정보이지만, 원시적인 DateTime 형식은 가독성이 떨어집니다. 이 글은 ActiveSupport가 제공하는 강력한 헬퍼 메서드를 활용하여 이러한 시간 정보를 사용자에게 더욱 직관적이고 친숙하게 전달하는 방법을 탐구합니다. 특히, `time_ago_in_words`와 `distance_of_time_in_words` 메서드를 중심으로, 개발자가 시간을 효과적으로 표시하는 데 필요한 지식과 실용적인 팁을 제공합니다. 이는 사용자 경험을 향상시키는 데 기여할 것입니다.

ActiveSupport의 시간 헬퍼 개요

Rails는 ActiveSupport를 통해 시간 관련 작업을 간소화하는 여러 헬퍼 메서드를 제공합니다. 이들은 주로 ActionView::Helpers::DateHelper 모듈에 포함되어 있습니다.

  • 주요 헬퍼:
    • time_ago_in_words(from_time, include_seconds: false): 주어진 시간으로부터 현재까지의 경과 시간을 “n분 전”, “n시간 전”과 같이 상대적으로 표현합니다. include_seconds 옵션을 통해 초 단위 포함 여부를 제어할 수 있습니다.
    • distance_of_time_in_words(from_time, to_time, include_seconds: false, scope: 'datetime.distance_in_words'): 두 시간 사이의 간격을 상대적으로 표현합니다. 예를 들어, “약 1시간”, “2일” 등으로 표시됩니다.

time_ago_in_words 활용

가장 흔히 사용되는 헬퍼 중 하나로, 게시글 작성 시간, 댓글 등록 시간 등 특정 시점으로부터 경과한 시간을 표시할 때 유용합니다.

  • 예시: time_ago_in_words(post.created_at)

  • include_seconds: true 옵션을 사용하면 1분 미만의 시간도 “30초 전”과 같이 상세하게 표현할 수 있습니다.

distance_of_time_in_words 활용

시작 시간과 종료 시간 사이의 간격을 표현할 때 사용됩니다. 이벤트 기간, 프로젝트 소요 시간 등을 나타내는 데 적합합니다.

  • 예시: distance_of_time_in_words(event.start_time, event.end_time)

  • 기본적으로 to_time은 현재 시간으로 설정되지만, 명시적으로 다른 시간을 지정할 수 있습니다.

커스터마이징 및 로케일 지원

ActiveSupport의 시간 헬퍼는 국제화를 지원하며, I18n을 통해 다양한 언어로 출력될 수 있습니다. config/locales 디렉토리에 YAML 파일을 추가하여 번역 문자열을 정의할 수 있습니다.

  • 예시 (ko.yml): yaml ko: datetime: distance_in_words: less_than_x_seconds: one: "1초 미만" other: "%{count}초 미만" # ... 기타 시간 단위 번역

  • scope 옵션을 사용하여 특정 컨텍스트에 맞는 번역을 적용할 수도 있습니다.

주의사항

  • 시간 표현은 상대적이기 때문에, 매우 오래된 시간의 경우 “수년 전”과 같이 모호하게 표시될 수 있습니다. 중요한 날짜는 절대적인 형식과 함께 제공하는 것을 고려해야 합니다.

  • 클라이언트 측에서 동적으로 시간을 업데이트해야 하는 경우, JavaScript 라이브러리(예: Moment.js, date-fns)를 함께 사용하는 것이 효과적입니다.

결론

ActiveSupport의 `time_ago_in_words`와 `distance_of_time_in_words` 헬퍼는 Rails 개발자가 사용자에게 시간을 보다 직관적이고 가독성 있게 제공할 수 있도록 돕는 강력한 도구입니다. 이러한 헬퍼는 간단한 설정과 국제화 지원을 통해 다양한 시나리오에 유연하게 적용될 수 있으며, 사용자 경험을 크게 향상시킵니다. 적절한 커스터마이징과 함께 사용한다면, 개발자는 시간을 단순히 표시하는 것을 넘어, 사용자가 정보를 더 쉽게 이해하고 상호작용할 수 있도록 만들 수 있습니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!