풀스택 간단 영단어 암기장 - 바이브코딩 레시피
입문 PHP + JavaScript Laravel + React AI: Claude

풀스택 간단 영단어 암기장

리포지토리명 vocabulary-flashcard-app
조회수 89 1건 제출

문제 설명

📚 프로젝트 개요

Laravel 13.x API 백엔드와 React 19 프론트엔드를 분리하여 구성하는 풀스택 영단어 암기 애플리케이션입니다. 단어를 등록하고, 뜻을 가리고 맞춰보는 간단한 학습 도구를 만듭니다.

✨ 필수 기능

  • 단어 등록: 영단어와 한글 뜻을 입력하여 저장
  • 단어 목록 조회: 등록된 모든 단어를 카드 형태로 표시
  • 뜻 가리기/보기: 카드를 클릭하면 뜻이 보이고, 다시 클릭하면 가려지는 플립 효과
  • 단어 삭제: 학습이 완료된 단어 제거
  • SQLite 데이터베이스: 간단한 로컬 DB로 데이터 영구 저장

🎁 보너스 기능 (선택)

  • 단어 수정 기능
  • 랜덤 단어 학습 모드 (셔플)
  • 학습 완료 체크 표시
  • 검색 필터링
  • 카테고리별 분류 (토익, 토플, 일상 등)

🛠 기술 스택

  • 백엔드: Laravel 13.x (RESTful API)
  • 프론트엔드: React 19 (Vite)
  • 데이터베이스: SQLite
  • 스타일링: Tailwind CSS

제약 조건

  • • Laravel 13.x와 React 19 최신 버전 사용 필수
  • • Laravel은 API 전용 백엔드로 구성 (resources/views 사용 안 함)
  • • React는 별도 Vite 프로젝트로 구성
  • • SQLite 데이터베이스 사용 (MySQL 설치 불필요)
  • • CORS 설정으로 React에서 Laravel API 호출 가능하도록 구성
  • • RESTful API 설계 원칙 준수 (GET, POST, DELETE)
  • • React에서 fetch 또는 axios로 API 호출
  • • useState만 사용하여 상태 관리 (Redux, Zustand 등 금지)
  • • 카드 플립 효과는 CSS transform 활용
  • • 반응형 디자인 (모바일에서도 사용 가능)

프롬프트 레시피

아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
mkdir vocabulary-flashcard-app && cd vocabulary-flashcard-app

이 폴더에서 풀스택 영단어 암기장 프로젝트를 시작합니다.

## 백엔드 (Laravel 13.x API) 설정

1. `backend` 폴더를 만들고 Laravel 13.x 프로젝트를 생성하세요.
2. SQLite 데이터베이스를 사용하도록 `.env` 파일을 설정하세요 (`DB_CONNECTION=sqlite`, `database/database.sqlite` 파일 생성).
3. `vocabularies` 테이블을 생성하는 마이그레이션 파일을 만드세요. 필드: `id`, `word` (string, 영단어), `meaning` (text, 한글 뜻), `timestamps`.
4. 마이그레이션을 실행하여 테이블을 생성하세요.
5. `Vocabulary` 모델을 생성하세요 (fillable: word, meaning).
6. CORS를 설정하여 React 프론트엔드(http://localhost:5173)에서 API 호출이 가능하도록 하세요 (`config/cors.php`에서 `'allowed_origins' => ['http://localhost:5173']` 설정).

백엔드 폴더 구조:
```
backend/
├── app/Models/Vocabulary.php
├── database/migrations/xxxx_create_vocabularies_table.php
├── database/database.sqlite
├── .env (SQLite 설정)
└── config/cors.php (CORS 설정)
```

명령어 예시를 포함하여 상세히 안내해주세요.

기대 결과: backend 폴더에 Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스가 설정되며, vocabularies 테이블이 생성됩니다. CORS 설정이 완료되어 React에서 API 호출이 가능한 상태가 됩니다.

2
Step 2
## Laravel API 라우트 및 컨트롤러 구현

`backend` 폴더에서 작업합니다.

1. `VocabularyController`를 생성하세요.
2. 다음 RESTful API 엔드포인트를 구현하세요:
   - `GET /api/vocabularies`: 모든 단어 목록 반환 (JSON)
   - `POST /api/vocabularies`: 새 단어 저장 (요청 body: word, meaning)
   - `DELETE /api/vocabularies/{id}`: 특정 단어 삭제
3. `routes/api.php`에 라우트를 등록하세요.
4. 각 API는 JSON 형식으로 응답하도록 구현하세요.
5. POST 요청 시 유효성 검사를 추가하세요 (word, meaning 필수).

API 응답 예시:
```json
// GET /api/vocabularies
[
  {"id": 1, "word": "apple", "meaning": "사과", "created_at": "...", "updated_at": "..."},
  {"id": 2, "word": "book", "meaning": "책", "created_at": "...", "updated_at": "..."}
]

// POST /api/vocabularies (성공)
{"id": 3, "word": "cat", "meaning": "고양이", "created_at": "...", "updated_at": "..."}
```

Postman이나 curl로 API 테스트가 가능하도록 Laravel 개발 서버를 실행하세요 (`php artisan serve`).

기대 결과: VocabularyController가 생성되고, RESTful API 엔드포인트가 구현됩니다. Laravel 개발 서버(http://localhost:8000)가 실행되어 API 테스트가 가능한 상태가 됩니다.

3
Step 3
## 프론트엔드 (React 19 + Vite) 설정

프로젝트 루트 폴더로 돌아와서 작업합니다.

1. `frontend` 폴더를 만들고 React 19 + Vite 프로젝트를 생성하세요 (`npm create vite@latest frontend -- --template react`).
2. `frontend` 폴더로 이동하여 의존성을 설치하세요 (`npm install`).
3. Tailwind CSS를 설치하고 설정하세요.
4. `src/App.jsx`를 다음과 같이 구성하세요:
   - 상단에 단어 입력 폼 (영단어, 한글 뜻 입력 필드와 추가 버튼)
   - 하단에 단어 카드 목록 (그리드 레이아웃)
   - useState로 단어 목록 상태 관리
5. 개발 서버를 실행하세요 (`npm run dev`, http://localhost:5173).

초기 UI 구조만 만들고, API 연동은 다음 단계에서 진행합니다. 입력 폼과 카드 레이아웃이 보이도록 더미 데이터를 사용하세요.

Tailwind CSS로 깔끔하게 스타일링하세요 (카드는 그림자와 둥근 모서리 적용).

기대 결과: frontend 폴더에 React 19 + Vite 프로젝트가 생성되고, Tailwind CSS가 설정됩니다. App.jsx에 입력 폼과 카드 목록 UI가 더미 데이터로 표시됩니다.

4
Step 4
## React에서 Laravel API 연동

`frontend/src/App.jsx`에서 작업합니다.

1. 컴포넌트가 마운트될 때 Laravel API (`http://localhost:8000/api/vocabularies`)에서 단어 목록을 가져와 상태에 저장하세요 (useEffect + fetch).
2. 입력 폼에서 새 단어를 추가할 때 POST 요청을 보내고, 성공하면 상태를 업데이트하여 화면에 즉시 반영하세요.
3. 각 카드에 삭제 버튼을 추가하고, 클릭 시 DELETE 요청을 보낸 후 상태에서 해당 단어를 제거하세요.
4. 에러 처리를 추가하세요 (API 호출 실패 시 콘솔 에러 로그 또는 알림 표시).

API 호출 예시:
```javascript
// GET
fetch('http://localhost:8000/api/vocabularies')
  .then(res => res.json())
  .then(data => setVocabularies(data));

// POST
fetch('http://localhost:8000/api/vocabularies', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ word: '...', meaning: '...' })
})
  .then(res => res.json())
  .then(newVocab => setVocabularies([...vocabularies, newVocab]));

// DELETE
fetch(`http://localhost:8000/api/vocabularies/${id}`, { method: 'DELETE' })
  .then(() => setVocabularies(vocabularies.filter(v => v.id !== id)));
```

백엔드 서버(http://localhost:8000)와 프론트엔드 서버(http://localhost:5173)를 모두 실행하여 CRUD 기능이 정상 작동하는지 확인하세요.

기대 결과: React 앱이 Laravel API와 연동되어 단어 목록을 불러오고, 추가하고, 삭제할 수 있습니다. 브라우저에서 CRUD 기능이 정상 작동합니다.

5
Step 5
## 카드 플립 효과 구현

`frontend/src` 폴더에 `VocabularyCard.jsx` 컴포넌트를 생성하세요.

1. 카드를 클릭하면 앞면(영단어)과 뒷면(한글 뜻)이 뒤집히는 플립 애니메이션을 구현하세요.
2. useState로 각 카드의 플립 상태를 관리하세요 (isFlipped).
3. CSS transform과 transition을 사용하여 3D 플립 효과를 만드세요.
4. 앞면에는 영단어만, 뒷면에는 한글 뜻만 표시하세요.
5. 삭제 버튼은 카드 우측 상단에 작은 X 아이콘으로 배치하세요.

CSS 예시:
```css
.card {
  transition: transform 0.6s;
  transform-style: preserve-3d;
}
.card.flipped {
  transform: rotateY(180deg);
}
.card-front, .card-back {
  backface-visibility: hidden;
}
.card-back {
  transform: rotateY(180deg);
}
```

`App.jsx`에서 VocabularyCard 컴포넌트를 사용하여 카드 목록을 렌더링하세요.

카드 클릭 시 부드러운 플립 애니메이션이 작동하는지 확인하세요.

기대 결과: VocabularyCard 컴포넌트가 생성되고, 카드를 클릭하면 3D 플립 애니메이션으로 앞면과 뒷면이 전환됩니다. 삭제 버튼이 카드 우측 상단에 표시됩니다.

제출된 작품 (1)

로그인 후 제출

풀스택 영단어 암기장 앱

리자
리자
· Claude Code

효율적인 영어 학습을 위한 플래시카드 기반 풀스택 영단어 암기 애플리케이션

조회수 56 댓글수 0 추천수 0

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!