React 프롬프트
React 개발을 위한 효과적인 프롬프트 기법을 배웁니다. 컴포넌트, Hooks, 상태 관리 등 React 특화 프롬프트를 알아봅니다.
개요
React는 컴포넌트 기반의 UI 라이브러리입니다. AI에게 React 코드를 요청할 때에는 React의 특성을 반영한 프롬프트를 작성하면 더 좋은 결과를 얻을 수 있습니다. 이 가이드는 효과적인 React 프롬프트 기법을 다룹니다.
📋 React 프롬프트 특징
- 컴포넌트 구조: 컴포넌트 분리 명시
- Hooks: useState, useEffect, useCallback 등 명시
- 스타일링: CSS Modules, styled-components 등
- 상태 관리: props, context, 상태 관리 라이브러리
- TypeScript: 타입 명시로 더 정확한 코드 생성
프롬프트 구조
효과적인 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 개발에 대해 더 자세히 배워보세요!
핵심 정리
- 컴포넌트: 함수형 컴포넌트, 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 타입 명확히
- ☑️ 스타일링 방식 지정
- ☑️ 상태 관리 전략 포함
- ☑️ 접근성 요구사항 추가
- ☑️ 테스트 요구사항 포함
- ☑️ 에러 처리/로딩 상태 명시