기존 turbo_streams
방식의 주요 문제는 ‘식별자의 분산 관리’입니다. 백그라운드 작업에서 broadcast_replace_to
사용 시 target
(dom_id
)과 partial
간의 동기화가 필수적이며, 컴포넌트 ID 변경 시 코드 전반의 업데이트가 필요해 유지보수 부담이 큽니다.
ViewComponent는 이 문제에 대한 효과적인 해결책입니다. ViewComponent는 뷰 로직뿐 아니라 dom_id
, ActionCable 브로드캐스트 채널 등 관련 구현 세부 사항을 하나의 Ruby 클래스 내에 캡슐화하여, 컴포넌트가 렌더링을 넘어 자체 콘텐츠를 능동적으로 새로 고치는 ‘자체 업데이트’ 기능을 구현합니다.
예시로, UI::UserCard
컴포넌트는 자신의 id
와 broadcast_channel
을 정의하고 broadcast_refresh!
메서드를 통해 스스로를 업데이트하는 로직을 내장합니다. 이로써 컨트롤러나 백그라운드 작업에서 UI::UserCard.new(user: @user).broadcast_refresh!
와 같이 간결한 호출만으로 해당 컴포넌트를 효율적으로 업데이트할 수 있습니다. 핵심 식별자와 로직이 컴포넌트 내부에 중앙 집중화됩니다.
또한, 컴포넌트의 상태(예: sending_email?
)를 활용하여 필요한 경우에만 스트림을 활성화/비활성화하는 동적 제어가 가능하여, 불필요한 스트림 연결을 줄이고 UI의 ‘진행 중’ 상태를 명확히 시각화합니다.