React 프롬프트

React 개발을 위한 효과적인 프롬프트 기법을 배웁니다. 컴포넌트, Hooks, 상태 관리 등 React 특화 프롬프트를 알아봅니다.

개요

React는 컴포넌트 기반의 UI 라이브러리입니다. AI에게 React 코드를 요청할 때에는 React의 특성을 반영한 프롬프트를 작성하면 더 좋은 결과를 얻을 수 있습니다. 이 가이드는 효과적인 React 프롬프트 기법을 다룹니다.

📋 React 프롬프트 특징
  • 컴포넌트 구조: 컴포넌트 분리 명시
  • Hooks: useState, useEffect, useCallback 등 명시
  • 스타일링: CSS Modules, styled-components 등
  • 상태 관리: props, context, 상태 관리 라이브러리
  • TypeScript: 타입 명시로 더 정확한 코드 생성
AI 기반 React 개발 워크플로우 요구사항 정의 🤖 AI 프롬프트 컴포넌트 설계 컴포넌트 트리 생성 🤖 AI 프롬프트 상태 관리 훅/스토어 구현 🤖 AI 프롬프트 스타일링 완성된 UI React 애플리케이션 반복 개선 (피드백 루프) 범례 개발자 작업 단계 AI 프롬프트 단계 최종 결과물 반복 피드백 AI가 각 단계에서 컴포넌트 설계, 상태 관리, 스타일링을 반복적으로 지원하는 React 개발 사이클

프롬프트 구조

효과적인 React 프롬프트는 다음 구조를 따르세요:

프롬프트 템플릿
[기술 스택]로 [기능/컴포넌트]을 만들어줘.

[요구사항]:
1. [구체적인 기능 설명]
2. [props/상태 정의]
3. [스타일링 방식]
4. [TypeScript 타입 정의]
5. [예외 처리]

컴포넌트 생성

React 컴포넌트를 효과적으로 생성하는 프롬프트입니다.

기본 컴포넌트

AI에게 요청
React 함수형 컴포넌트를 만들어줘.

컴포넌트 이름: UserCard
기술 스택: TypeScript, CSS Modules

기능:
- 사용자 이름, 이메일, 아바타 이미지 표시
- 프로필 페이지 링크 버튼
- 호버 시 배경색 변경
- aria-label로 접근성 보장

props:
interface Props {
  user: {
    id: number;
    name: string;
    email: string;
    avatarUrl?: string;
  };
  onProfileClick?: (userId: number) => void;
}

폼 컴포넌트

AI에게 요청
React 로그인 폼 컴포넌트를 만들어줘.

기술 스택: TypeScript, React Hook Form, Zod

요구사항:
1. 이메일, 비밀번호 입력 필드
2. 입력 검증 (react-hook-form + zod)
   - 이메일: 유효한 형식
   - 비밀번호: 8자 이상
3. submit 버튼 (로딩 상태 표시)
4. 에러 메시지 표시 (FormField 컴포넌트)
5. useState로 로딩/에러 상태 관리
6. TypeScript 사용
7. 접근성: label, aria-invalid, role="alert"

리스트 컴포넌트

AI에게 요청
React 사용자 목록 컴포넌트를 만들어줘.

요구사항:
1. 사용자 배열 렌더링 (User[])
2. 검색 입력 필드 (이름으로 필터)
3. 정렬 기능 (이름 asc/desc)
4. pagination (10개씩)
5. 로딩 스keleleton 표시
6. 빈 상태 UI
7. 각 사용자 클릭 시 상세 페이지 이동
AI에게 요청
React 모달 컴포넌트를 만들어줘.

요구사항:
1. Portal로 렌더링 (document.body)
2. backdrop 클릭 시 닫기
3. ESC 키로 닫기
4. 애니메이션 (fade in, scale)
5. 접근성: focus trap, aria-modal
6. children으로 콘텐츠슬롯
💡 컴포넌트 프롬프트 팁
  • props 명시: 필수/선택 props 구분, 기본값 설정
  • 컴포넌트 분리: 단일 책임 원칙, 재사용성 고려
  • 접근성: aria 속성, 키보드 네비게이션
  • 에러 처리: 로딩, 빈 상태, 에러 상태 처리

Hooks 사용

React Hooks를 활용한 코드를 요청합니다. 각 Hook의 용도를 명확히 하세요.

useState 예시

AI에게 요청
useState를 사용하는 카운터 컴포넌트를 만들어줘.

기술: TypeScript

요구사항:
1. 증가, 감소, 초기화 버튼
2. 현재 카운트 값 표시
3. 값이 0 이하일 때 빨간색, 10 이상일 때 파란색
4. CSS Modules로 스타일링
5. 초기값 0, 최대값 100, 최소값 0

useEffect 예시

AI에게 요청
useEffect를 사용하는 데이터 페치 컴포넌트를 만들어줘.

기술: TypeScript, fetch API

요구사항:
1. API에서 사용자 목록 가져오기 (/api/users)
2. 로딩 상태 표시
3. 에러 상태 처리 (try-catch)
4. 컴포넌트 언마운트 시 클린업 (AbortController)
5. useEffect 의존성 배열 정확히 명시
6. 데이터 타입 정의 (User interface)

useCallback 예시

AI에게 요청
useCallback을 사용하는 최적화된 컴포넌트를 만들어줘:

1. 부모 컴포넌트에서 함수 생성 후 자식에게 전달
2. useCallback으로 함수 메모이제이션
3. 의존성 배열 명시
4. React.memo로 자식 컴포넌트 최적화
5. DevTools로 렌더링 횟수 확인

Custom Hooks

AI에게 요청
Custom Hooks를 만들어줘:

1. useLocalStorage
   - localStorage에서 값 불러오기/저장하기
   - 타입 파라미터 지원
   - JSON 직렬화

2. useFetch
   - 제네릭 타입 지원
   - { data, loading, error } 객체 반환
   - refetch 함수 제공

3. useDebounce
   - 입력 디바운싱
   - 지연 시간 설정 가능 (기본 500ms)

Hooks 베스트 프랙티스

⚠️ Hooks 규칙
  • 의존성 배열: 모든 외부 값은 의존성에 포함
  • 클린업: useEffect에서 구독 취소, 타이머 정리
  • 불변성: 상태 직접 변경 금지, 새 객체/배열 생성
  • 최적화: 불필요한 useCallback, useMemo 사용 금지

Context API

React Context를 활용한 전역 상태 관리를 요청합니다.

Context 생성 요청

AI에게 요청
React Theme Context를 만들어줘.

기술: TypeScript, createContext, useContext

요구사항:
1. ThemeProvider 컴포넌트
   - 다크/라이트 모드 토글 기능
   - 현재 테마 상태 제공
2. useTheme Hook 내보내기
3. localStorage에 테마 저장 (초기값: 'light')
4. system preference 감지 (prefers-color-scheme)
5. 타입 정의 (Theme, ThemeContextType)

인증 Context

AI에게 요청
React Auth Context를 만들어줘.

요구사항:
1. AuthProvider
   - user: User | null
   - isAuthenticated: boolean
   - login(email, password) 함수
   - logout() 함수
   - register(email, password, name) 함수
2. Protected Route 컴포넌트
3. 로컬 스토리지로 세션 유지
4. Axios 인스턴스 자동 토큰 첨부

Context 구조 패턴

AI에게 요청
Context 파일 구조를 만들어줘:

src/
├── context/
│   ├── ThemeContext.tsx    # createContext + Provider
│   ├── AuthContext.tsx     # 인증 상태 + 함수
│   └── CartContext.tsx    # 장바구니 상태
├── hooks/
│   ├── useTheme.ts        # useContext 래퍼
│   ├── useAuth.ts
│   └── useCart.ts
└── providers/
    ├── ThemeProvider.tsx   # 실제 Provider 래핑
    ├── AuthProvider.tsx
    └── index.ts           # 모든 Provider 조합
💡 Context 사용 기준
  • 적합한 경우: 테마, 인증, 언어 설정 등 전역 상태
  • 부적합한 경우: 빈번히 변경되는 상태 (이때는 Zustand/Redux)
  • 최적화: Context 분리하여 필요한 컴포넌트만 리렌더링
  • 타입: Context의 타입을 명확히 정의

라우팅

React Router를 사용한 페이지 라우팅을 요청합니다.

라우팅 요청

AI에게 요청
React Router v6을 사용하는 라우팅을 만들어줘.

기술: react-router-dom v6, TypeScript

요구사항:
1. 라우트 정의
   - / - 홈 페이지 (HomePage)
   - /about - 소개 페이지
   - /posts - 게시물 목록
   - /posts/:id - 게시물 상세
   - /login - 로그인 페이지
   - /* - 404 페이지 (wildcard)
2. 중첩 라우트 + Outlet 사용
3. NavLink로 활성 링크 스타일
4. useParams, useLocation, useNavigate Hooks

Protected Routes

AI에게 요청
React Router v6에서 Protected Route를 만들어줘:

1. RequireAuth 컴포넌트
   - 인증 상태 확인
   - 미인증 시 로그인 페이지로 리다이렉트
   - 원래 페이지 URL 저장 (state)
2. AuthRedirect 컴포�ONENT
   - 인증 상태 확인
   - 인증 시 메인 페이지로 리다이렉트
3. 사용 예시
   - <Route element={<RequireAuth />}>
   - <Route element={<AuthRedirect />}>

코드 분할 (Lazy Loading)

AI에게 요청
React Router에서 Lazy Loading을 구현해줘:

1. React.lazy로 컴포넌트 지연 로드
2. Suspense로 로딩 상태 표시
3. ErrorBoundary로 에러 처리
4. 각 페이지별 번들 분할
5. Prefetch 비활성화 (선택)

라우터 구조

AI에게 요청
React Router v6 구조를 만들어줘:

src/
├── pages/
│   ├── Home.tsx
│   ├── About.tsx
│   ├── Posts.tsx
│   └── NotFound.tsx
├── components/
│   ├── Layout.tsx        # Outlet 사용
│   ├── Navbar.tsx
│   └── PrivateRoute.tsx
├── routes/
│   └── index.tsx        # 라우트 설정
└── App.tsx

TypeScript 활용

TypeScript와 함께 React를 사용하면 타입 안전성을 보장받을 수 있습니다.

TypeScript 요청

AI에게 요청
TypeScript로 React 컴포넌트를 만들어줘.

기술: TypeScript, strict 모드

타입 정의:
interface User {
  id: number;
  name: string;
  email: string;
  role: 'admin' | 'user' | 'guest';
  profile?: Profile;
}

interface Profile {
  bio: string;
  avatar: string;
}

요구사항:
1. User 타입 사용
2. props 타입 정의
3. 상태 타입 정의 (useState<User[]>)
4. strict 모드 compatible
5. 제네릭 활용

제네릭 컴포넌트

AI에게 요청
제네릭 List 컴포넌트를 만들어줘:

interface Props<T> {
  items: T[];
  renderItem: (item: T) => React.ReactNode;
  keyExtractor: (item: T) => string;
  emptyMessage?: string;
}

사용 예시:
<List<User>
  items={users}
  renderItem={(user) => <UserCard user={user} />}
  keyExtractor={(user) => user.id.toString()}
/>

TypeScript 팁

💡 TypeScript 활용
  • any 피하기: unknown 또는 구체적인 타입 사용
  • optional chain: ?. 로 null/undefined 안전하게 접근
  • utility types: Partial, Pick, Omit 활용
  • interface vs type: 객체 타입은 interface, 유니온은 type
  • strict 모드: 가능한 strict 설정 유지

상태 관리

React에서 다양한 상태 관리 방법을 배웁니다.

Zustand

AI에게 요청
Zustand로 장바구니 스토어를 만들어줘.

기술: TypeScript, zustand, persist 미들웨어

요구사항:
1. CartItem 타입 정의
2. addToCart, removeFromCart, updateQuantity 함수
3. totalPrice, itemCount computed 값
4. localStorage에 영속 (persist)
5. 타입 안전한 Hook 반환

TanStack Query

AI에게 요청
TanStack Query로 데이터 페칭을 구현해줘:

기술: @tanstack/react-query, TypeScript

요구사항:
1. QueryClientProvider 설정
2. useQuery로 데이터 페치
3. useMutation으로 데이터 생성/수정/삭제
4. staleTime, cacheTime 설정
5. onSuccess/onError 콜백
6. invalidQueries로 캐시 무효화

모범 사례

효과적인 React 프롬프트를 위한 모범 사례입니다.

프롬프트 작성 팁

💡 React 프롬프트 팁
  • 컴포넌트 명명: 명확하고 일관된 이름 사용 (PascalCase)
  • props 명시: 필요한 props를 구체적으로 설명
  • 스타일링 방식: CSS Modules, styled-components, Tailwind 등 명시
  • TypeScript: 타입 안전한 코드 요청
  • 기술 스택 명시: Vite, Next.js, React Native 등
  • 접근성: aria 속성, 키보드 지원 명시

코드 품질 체크리스트

AI에게 요청
React 컴포넌트에 다음을 포함해줘:

1. Prop Types / TypeScript 타입
2. Default Props (필요시)
3. Memo (React.memo)
4. 테스트 가능한 구조
5. Storybook Stories (선택)
6. JSDoc 주석 (선택)

성능 최적화

⚠️ 성능 고려사항
  • 불필요한 렌더링: React.memo, useMemo, useCallback 적절히 사용
  • 대목록 렌더링: windowing (react-window), pagination
  • 이미지 최적화: lazy loading, next/image
  • 번들 크기: code splitting, tree shaking
  • DevTools Profiler: 정기적으로 렌더링 성능 확인

테스트

AI에게 요청
React 컴포넌트 테스트를 만들어줘:

기술: Vitest, React Testing Library

1. 단위 테스트
   - props 전달 후 렌더링 확인
   - 이벤트 핸들러 호출 확인

2. 통합 테스트
   - 컨텍스트와 함께 렌더링
   - 라우터와 함께 테스트

3. Mocking
   - fetch/axios Mock
   - 모듈 Mock

고급 패턴

React의 고급 패턴을 활용하세요.

Compound Components

AI에게 요청
Compound Component 패턴을 사용해줘:

Tabs 컴포넌트:
- Tabs (Provider)
- Tabs.List
- Tabs.Tab
- Tabs.Panel
- useTabs Hook

사용:
<Tabs defaultValue="tab1">
  <Tabs.List>
    <Tabs.Tab value="tab1">Tab 1</Tabs.Tab>
    <Tabs.Tab value="tab2">Tab 2</Tabs.Tab>
  </Tabs.List>
  <Tabs.Panel value="tab1">Content 1</Tabs.Panel>
</Tabs>

Render Props

AI에게 요청
Render Props 패턴을 사용해줘:

MouseTracker 컴포넌트:
interface Props {
  render: (state: { x: number; y: number }) => React.ReactNode;
}

사용:
<MouseTracker render={({ x, y }) => (
  <p>Mouse position: {x}, {y}</p>
)} />

Higher-Order Components

AI에게 요청
HOC 패턴을 사용해줘:

withLoading HOC:
- isLoading prop 감지
- 로딩 중이면 스피너 표시
- 아니면 실제 컴포넌트 렌더링
- 원래 props 전달

withAuth HOC:
- 인증 상태 확인
- 미인증 시 로그인 페이지로 리다이렉트
- 인증 통과 시 children 렌더링

다음 단계

React 개발에 대해 더 자세히 배워보세요!

프론트엔드 Vibe Coding

더 다양한 프론트엔드 프로젝트

프론트엔드 Vibe Coding →

백엔드 Vibe Coding

백엔드 개발도 AI로!

백엔드 Vibe Coding →

API 디자인

React와 연동할 API 설계

API 디자인 →

핵심 정리

  • 컴포넌트: 함수형 컴포넌트, props 명확히, 접근성 고려
  • Hooks: useState, useEffect, useCallback, useMemo, custom hooks
  • 상태 관리: local state, Context API, Zustand, TanStack Query
  • 라우팅: React Router v6, protected routes, lazy loading
  • TypeScript: 타입 안전한 코드, 제네릭, strict 모드
  • 성능: React.memo, useMemo, code splitting
  • 테스트: Vitest, React Testing Library
  • 고급 패턴: Compound Components, Render Props, HOC
📋 React Vibe Coding 체크리스트
  • ☑️ 기술 스택 명시 (Vite, TypeScript 등)
  • ☑️ 컴포넌트 분리 기준 전달
  • ☑️ props 타입 명확히
  • ☑️ 스타일링 방식 지정
  • ☑️ 상태 관리 전략 포함
  • ☑️ 접근성 요구사항 추가
  • ☑️ 테스트 요구사항 포함
  • ☑️ 에러 처리/로딩 상태 명시