이번 편의 결과물: bookshelf/ 프로젝트가 로컬에서 npm run dev로 실행되는 빈 화면. · 다루는 개념: npm create vite로 프로젝트 생성, 생성된 폴더 구조 읽기, dev/build 스크립트, App.jsx를 지우고 빈 화면 만들기
이 편에서 만드는 파일
bookshelf/ (+)
├── index.html (+)
├── package.json (+)
├── vite.config.js (+)
└── src/
├── main.jsx (+)
├── App.jsx (~ 내용을 지워 빈 화면으로)
├── index.css (+)
└── data/
└── books.seed.json (+)개념 정리
Vite가 하는 일
Vite는 개발 서버와 빌드 도구입니다. 소스 코드를 브라우저가 바로 이해할 수 있게 변환(JSX → JS, 최신 문법 처리)하고, 코드를 고치면 브라우저를 새로고침하지 않아도 바뀐 부분만 반영합니다(HMR, Hot Module Replacement). npm create vite는 이런 설정이 이미 끝난 프로젝트 템플릿을 만들어 줍니다.
생성되는 폴더 구조
| 경로 | 역할 |
|---|---|
index.html | 앱의 유일한 HTML 문서. <div id="root">에 React가 화면을 그린다 |
src/main.jsx | 진입점. App 컴포넌트를 #root에 렌더링한다 |
src/App.jsx | 최상위 컴포넌트. 이 과목 내내 여기서부터 화면을 구성한다 |
src/index.css | 전역 스타일 |
package.json | 의존 패키지 목록과 dev/build/preview 스크립트 |
vite.config.js | Vite 설정(React 플러그인 등록) |
package.json 스크립트
| 스크립트 | 역할 |
|---|---|
npm run dev | 개발 서버 실행(HMR 지원, 로컬에서만 접근 가능) |
npm run build | 배포용 정적 파일을 dist/에 생성 |
npm run preview | build 결과물을 로컬에서 미리 확인 |
이 과목은 이 시점 기준 React 19.3.0, Vite 8.3.0을 기준으로 합니다. npm create vite를 실행한 시점에 더 새 버전이 설치되면 그 버전을 그대로 사용합니다.
실습
1. 프로젝트 생성
원하는 작업 폴더(예: 다른 실습 폴더와 나란한 위치)에서 실행합니다.
npm create vite@latest bookshelf -- --template react터미널에 프레임워크를 물으면 이미 --template react로 지정했으므로 추가 질문 없이 바로 생성됩니다.
2. 의존 패키지 설치와 실행
cd bookshelf
npm install
npm run dev터미널에 뜬 주소(기본값 http://localhost:5173)를 브라우저에서 엽니다. Vite 기본 데모 화면(React 로고, 카운터 버튼)이 보이면 정상입니다.
3. App.jsx를 비워 빈 화면 만들기
src/App.jsx를 아래 내용으로 바꿉니다. 다음 편(04편)부터 이 자리에 책 카드를 만듭니다.
// src/App.jsx
function App() {
return (
<div className="app">
<h1>bookshelf</h1>
</div>
);
}
export default App;기본 템플릿이 만든 src/App.css는 이 과목에서 쓰지 않으므로 App.jsx의 import './App.css' 줄이 남아 있다면 지웁니다.
4. 데이터 시드 내려받기
bookshelf는 실제 책 데이터를 여섯 권 담은 시드 파일로 시작합니다. src/data/ 폴더를 만들고 아래 주소의 내용을 books.seed.json으로 저장합니다.
mkdir src/data
curl -o src/data/books.seed.json https://zeno.it.kr/practice/bookshelf/books.seed.jsoncurl을 쓸 수 없는 환경이면 브라우저로 주소를 열어 전체 내용을 복사한 뒤 src/data/books.seed.json 파일을 새로 만들어 붙여넣습니다. 저장된 파일의 앞부분은 아래와 같아야 합니다.
// src/data/books.seed.json (일부)
[
{
"id": 1,
"title": "클린 코드",
"author": "로버트 C. 마틴",
"status": "done",
"rating": 5,
"pages": 584,
"coverColor": "#2563eb",
"startedAt": "2026-07-01",
"finishedAt": "2026-07-20",
"memo": "함수는 한 가지 일만."
}
]이 파일은 6권의 책 객체 배열입니다. 각 책은 id, title, author, status(wish|reading|done), rating, pages, coverColor, startedAt, finishedAt, memo 필드를 가집니다. 이 필드 구성은 이 과목 마지막 편까지 그대로 유지됩니다.
5. 다시 실행
npm run dev확인
- 터미널에
Local: http://localhost:5173/형태의 주소가 출력됩니다. - 브라우저에서 그 주소를 열면 “bookshelf” 제목만 있는 빈 화면이 보입니다.
src/data/books.seed.json이 존재하고 6개의 책 객체가 담긴 배열인지 에디터에서 확인합니다.- 터미널에서
Ctrl+C로 개발 서버를 멈출 수 있습니다.
직접 해보기
npm run build를 실행해dist/폴더가 생기는지 확인합니다.npm run preview로 빌드 결과물이 개발 서버와 같은 화면을 보여주는지 확인합니다.
정답 보기
npm run build
npm run previewnpm run build는 dist/index.html과 dist/assets/ 아래 번들 파일을 생성합니다. npm run preview는 그 dist/ 폴더를 정적 서버로 띄워, 개발 서버(npm run dev)와 같은 화면이 나오는지 확인할 수 있게 합니다. 실제 배포 시에는 dist/ 폴더만 서버에 올립니다.
자주 하는 실수
| 증상 | 원인 | 고치는 법 |
|---|---|---|
npm create vite 실행 후 폴더가 안 보임 | 다른 위치에서 실행함 | 실행 전 pwd(또는 cd)로 현재 위치를 확인한다 |
npm run dev 실행 시 Missing script: "dev" | bookshelf 폴더 밖에서 명령 실행 | cd bookshelf 후 다시 실행한다 |
| 브라우저에 흰 화면만 보임 | src/main.jsx가 #root를 못 찾거나 콘솔 에러 발생 | 브라우저 개발자도구 콘솔에서 에러 메시지를 확인한다 |
books.seed.json이 HTML 페이지 내용으로 저장됨 | curl이 리다이렉트나 오류 페이지를 그대로 받음 | 저장된 파일을 열어 [로 시작하는 JSON 배열인지 확인 후 다시 받는다 |