커스텀 요소를 활용한 Hotwired Rails 앱의 인라인 편집 기능 구현

Inline editing with custom elements in Rails | Rails Designer

작성자
발행일
2025년 11월 13일

핵심 요약

  • 1 Hotwired Rails 앱에서 `editable-content` 커스텀 HTML 요소를 사용하여 클릭 시 편집 가능하고 포커스 이탈 시 업데이트되는 인라인 편집 기능을 구현합니다.
  • 2 커스텀 요소는 클릭 감지, 입력 필드 생성, 변경 사항 저장, 표시 복원 등 인라인 편집의 모든 상호작용 로직을 단일 HTML 태그 내에 캡슐화합니다.
  • 3 JavaScript `connectedCallback`으로 이벤트 리스너를 설정하고, `fetch` API를 통해 `PATCH` 요청으로 서버에 변경 사항을 저장하며, CSRF 토큰을 포함하여 보안을 강화합니다.

도입

Hotwired Rails 애플리케이션에서 HTML 요소를 클릭하여 편집하고, 포커스를 잃으면 자동으로 업데이트되는 인라인 편집 기능을 구현하는 방법에 대해 다룹니다. 이 기능은 `editable-content`라는 커스텀 HTML 요소를 사용하여 순수 HTML만으로 구현됩니다. 커스텀 요소는 웹 컴포넌트 표준의 일부로, 개발자가 자신만의 HTML 태그와 동작을 정의할 수 있게 하여 프레임워크 없이도 상호작용하는 UI를 구축할 수 있도록 돕습니다. 본 문서는 이러한 커스텀 요소를 활용한 인라인 편집 기능의 설정부터 구현까지의 과정을 상세히 설명합니다.

이 인라인 편집 기능은 editable-content 커스텀 요소를 통해 구현됩니다.

커스텀 요소 설정

  • HTMLElement를 상속하는 EditableContent 클래스를 정의하고 customElements.define으로 등록합니다.

  • connectedCallback()에서 클릭 이벤트 리스너를 설정하여 편집 모드를 활성화하며, importmap 설정을 통해 JS 파일이 로드됩니다.

편집 흐름 (#edit 메서드)

  • 클릭 시 name 속성을 가진 커스텀 요소의 직계 자식 요소를 편집 대상으로 식별합니다. 이 name 속성은 서버 업데이트에 필수적입니다.

  • 원본 요소의 내용으로 초기화된 <input> 또는 <textarea> 필드를 생성하고, 이를 원본 요소 대신 DOM에 삽입합니다.

  • 입력 필드에 포커스를 주고, blur 이벤트 발생 시 변경 사항을 저장하는 리스너를 설정합니다.

입력 필드 생성 (#create 메서드)

  • 원본 요소의 태그 종류(블록/인라인)에 따라 <textarea> 또는 <input type="text">를 동적으로 생성합니다.

  • 원본 요소의 클래스, 값, name 속성을 상속하며, 입력 필드 클릭 시 추가 편집 이벤트가 발생하지 않도록 stopPropagation()을 적용합니다.

변경 사항 저장 (#save 메서드)

  • blur 이벤트 발생 시, FormData 객체에 필드 이름과 값을 담아 서버로 PATCH 요청을 보냅니다.

  • 보안을 위해 X-CSRF-Token 헤더를 포함하며, 요청 성공 시 원본 요소의 텍스트를 업데이트하고 입력 필드를 원본 요소로 교체하여 화면에 반영합니다.

결론

이 커스텀 요소 기반의 인라인 편집 방식은 제목, 레이블, 짧은 설명 등 간단한 텍스트 콘텐츠에 매우 효과적입니다. 구현은 단순하지만, CSS를 활용한 시각적 피드백이나 애니메이션 추가 등 다양한 확장이 가능합니다. 커스텀 요소는 표준 브라우저 API를 사용하므로 빠르고 안정적이며, Turbo, Stimulus 등 다른 JavaScript 프레임워크와도 원활하게 통합됩니다. 이는 웹 컴포넌트의 강력함과 유연성을 보여주며, 개발자가 재사용 가능한 상호작용 UI 컴포넌트를 직접 정의하여 깔끔하고 효율적인 코드베이스를 유지할 수 있도록 돕는 현대 웹 개발의 유망한 접근 방식입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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