React 프로젝트를 처음 생성하면 다양한 폴더와 파일들이 자동으로 구성됩니다.
이 구조는 단순히 파일을 모아둔 것이 아니라, 역할과 책임이 분리된 설계를 제공합니다. 이번 글에서는 public, src를 비롯해 주요 파일들이 어떤 역할을 하는지 정리해보겠습니다.

public 폴더는 정적(Static) 자원을 저장하는 공간입니다.
여기에 있는 파일들은 빌드 과정에서 번들링되지 않고, 원본 그대로 제공됩니다.
src 내부에서 import 하려면
src/assets를 쓰고, 외부에서 직접 접근해야 한다면public을 쓰는 게 일반적입니다.
예를 들어, public/logo.png를 넣었다면 브라우저에서는 다음처럼 접근할 수 있습니다:
http://localhost:5173/logo.png

public과 유사하지만 차이가 있습니다.src/assets는 코드와 함께 번들링되는 정적 파일을 넣습니다.정적 리소스를 import 해서 사용하는 경우 여기에 넣습니다. 예를 들어 이미지 파일을 React 컴포넌트에서 사용하려면:
import logo from "./assets/logo.png";
function Header() {
return <img src={logo} alt="로고" />;
}
React 애플리케이션의 실행 진입점입니다.
index.html의 #root 요소에 App 컴포넌트를 렌더링합니다.import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import "./index.css";
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
앱의 최상위 컴포넌트입니다.
function App() {
return (
<div>
<h1>Hello Vite + React!</h1>
</div>
);
}
export default App;
App.css: App.jsx 전용 스타일index.css: 프로젝트 전역에서 공통으로 적용되는 스타일React 앱의 진입점이 되는 HTML 파일입니다.
div#root라는 빈 컨테이너가 있으며, 여기에 React 컴포넌트들이 렌더링됩니다.#root에 컴포넌트를 주입(render)해서 화면을 그립니다.<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
Vite의 환경 설정 파일입니다.
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({
plugins: [react()],
});
코드 스타일과 문법 검사 규칙을 정의하는 설정 파일입니다.