본문에서는 ViewComponent를 Active Job에서 직렬화하여 Turbo Broadcast Later와 연동하는 방안을 설명합니다. 이는 Hotwire 컴포넌트 렌더링을 백그라운드 작업으로 처리하기 위함이며, ViewComponent 객체는 작업 큐로 전달될 때 초기화 인수를 보존하여 재구성이 필수적입니다.
ViewComponent 직렬화 구현
ViewComponent의 initialize 메서드를 직접 조작하는 방식은 기존 기능과의 호환성 문제로 복잡했습니다. 이에 저자는 serializable라는 새로운 클래스 메서드를 도입했습니다. 이 메서드는 ViewComponent 인스턴스 생성 시 초기화 인수를 @serializable_args 인스턴스 변수에 저장하도록 ViewComponent::Serializable Concern을 통해 구현되었습니다. 이는 ViewComponent의 핵심 동작을 유지하면서 직렬화 가능성을 제공합니다.
Active Job 커스텀 Serializer
실제 직렬화 및 역직렬화는 ViewComponentSerializer라는 Active Job 커스텀 Serializer를 통해 이루어집니다. 이 Serializer는 ViewComponent 인스턴스를 식별(serialize?)하고, 클래스 이름과 저장된 serializable_args를 직렬화(serialize)합니다. 역직렬화(deserialize) 시에는 이 정보를 활용하여 ViewComponent 인스턴스를 정확히 재구성함으로써, 백그라운드 작업에서 컴포넌트가 올바르게 렌더링될 수 있도록 지원합니다.