Programming

React Grab: React 앱 요소를 클릭 한 번으로 코딩 에이전트에게 전달하는 혁신적인 도구

danny-shim 2025. 10. 28. 11:03

안녕하세요, 개발자 여러분! React로 앱을 개발하다 보면, UI 요소를 수정하거나 디버깅할 때 코드 에이전트(예: Cursor, Claude Code, OpenCode)를 활용하고 싶어지는 순간이 많죠. 하지만 이 에이전트들은 페이지의 실제 요소에 직접 접근할 수 없어서, 매번 코드를 복사하거나 설명을 길게 적어야 하는 번거로움이 있었습니다. 오늘은 이런 문제를 간단히 해결해주는 오픈소스 도구 React Grab을 소개해보려 해요. GitHub에서 aidenybai/react-grab 저장소를 기반으로 한 이 도구는, 단 한 줄의 스크립트로 앱 내 요소를 "잡아" 에이전트에게 전달할 수 있게 해줍니다. 개발 생산성을 폭발적으로 높여줄 거예요!

React Grab이란?

React Grab은 React 앱에서 ⌘C (Command + C) 키를 누르고 클릭하는 것만으로, 원하는 DOM 요소를 복사해 코딩 에이전트에게 전달할 수 있는 라이브러리입니다. 예를 들어, Cursor나 Claude Code 같은 AI 도구에 "이 버튼의 스타일을 바꿔줘"라고 지시할 때, 단순한 텍스트 설명 대신 실제 요소의 HTML 구조와 스타일을 그대로 제공할 수 있어요. 이 도구는 순수 JavaScript로 구현되어 있어서 프레임워크 의존성이 낮고, 개발 모드에서만 활성화되도록 설계되어 프로덕션 환경에 영향을 주지 않습니다.

왜 이게 유용할까요?

  • AI 에이전트가 페이지 컨텍스트를 이해하기 어려워서 발생하는 오해를 줄여줍니다.
  • 빠른 프로토타이핑과 버그 픽스에 딱! 클릭 한 번으로 요소를 "잡아" 클립보드에 저장해 에이전트 프롬프트에 붙여넣기만 하면 끝.

저는 이 도구를 사용해보니, 기존 워크플로우가 훨씬 직관적으로 변했어요. 특히 복잡한 컴포넌트 트리를 다룰 때 빛을 발합니다.

주요 기능

React Grab의 핵심 기능은 간단하지만 강력합니다:

  • 쉬운 요소 잡기: 앱에서 ⌘C를 누르고 클릭하면, 해당 요소의 HTML, CSS, 그리고 React 컴포넌트 구조가 클립보드로 복사됩니다.
  • 호환성: Cursor, Claude Code, OpenCode 등 주요 코딩 에이전트와 완벽 호환.
  • 경량 구현: 단일 스크립트 태그로 추가 가능. 번들 크기는 Bundlephobia에서 확인할 수 있지만, 매우 가볍습니다.
  • 개발 모드 전용: data-enabled="true" 속성으로 쉽게 토글 가능.

아래는 README에 포함된 데모 GIF로, 실제 작동 방식을 보여줍니다. (이미지: 데모 GIF) 클릭만으로 요소가 잡히는 게 보이시죠? 😎

설치 방법

설치는 프로젝트 유형에 따라 다르지만, 대부분 1-2분이면 끝납니다. 주의: 개발 모드에서만 활성화하세요! 프로덕션에서는 process.env.NODE_ENV === "development" 조건을 사용해 비활성화하는 걸 추천해요.

1. 일반 HTML/JS 프로젝트 (프레임워크 없음)

HTML의 <head><body>에 스크립트 태그를 추가하세요:

<script
  src="//unpkg.com/react-grab/dist/index.global.js"
  crossorigin="anonymous"
  data-enabled="true"
></script>

이게 전부! CDN을 통해 즉시 로드됩니다.

2. Next.js (App Router)

app/layout.tsx 파일에 Next.js의 Script 컴포넌트를 사용하세요:

import Script from "next/script";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ko">
      <head>
        {process.env.NODE_ENV === "development" && (
          <Script
            src="//unpkg.com/react-grab/dist/index.global.js"
            crossOrigin="anonymous"
            strategy="beforeInteractive"
            data-enabled="true"
          />
        )}
      </head>
      <body>{children}</body>
    </html>
  );
}

3. Next.js (Pages Router)

pages/_document.tsx에 추가:

import { Html, Head, Main, NextScript } from "next/document";
import Script from "next/script";

export default function Document() {
  return (
    <Html lang="ko">
      <Head>
        {process.env.NODE_ENV === "development" && (
          <Script
            src="//unpkg.com/react-grab/dist/index.global.js"
            crossOrigin="anonymous"
            strategy="beforeInteractive"
            data-enabled="true"
          />
        )}
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

4. Vite 프로젝트

먼저 npm으로 설치:

npm i react-grab@latest

그 다음 vite.config.ts에 플러그인을 추가:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { reactGrab } from "react-grab/plugins/vite";

export default defineConfig({
  plugins: [
    react(),
    reactGrab(),  // React Grab 플러그인 추가
  ],
});

Cursor 사용자라면, 이 링크를 클릭해 자동 설치 프롬프트를 사용할 수 있어요. 편리하죠?

사용법

설치 후, 앱을 실행하고 ⌘C를 누른 상태로 클릭하세요. 선택한 요소의 상세 정보(HTML, 스타일 등)가 클립보드에 저장됩니다. 이제 Cursor나 Claude Code에 붙여넣기만 하면:

  • "이 요소를 수정해줘" 같은 프롬프트가 훨씬 정확해집니다.
  • React 컴포넌트의 props나 state도 함께 캡처되어 컨텍스트가 풍부해집니다.

API는 별도로 노출되지 않지만, 스크립트가 자동으로 이벤트 리스너를 등록하니 추가 코드 없이 바로 써보세요. 더 자세한 예시는 라이브 데모 사이트에서 체험할 수 있습니다.