React 앱이 어떻게 화면에 그려지는지 이해하고, 코드를 직접 수정하며 배포까지 경험한다.
React 앱이 브라우저에 표시되기까지의 흐름을 정확히 이해해야 한다. 흐름은 index.html에서 시작된다.
브라우저는 가장 먼저 index.html을 읽는다. 이 파일에는 <div id="root"></div>라는 텅 빈 공간이 있다.
index.html 하단을 보면 <script type="module" src="/src/main.jsx"></script>가 있다. 이 스크립트가 실행되면서 React가 깨어난다.
main.jsx 파일을 보면 다음과 같은 코드가 있다.
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>,
)
이 코드는 "HTML의 root 요소를 찾아서, 그 안에 <App /> 컴포넌트를 집어넣으라"는 뜻이다. 결과적으로 App.jsx의 내용이 화면에 나타난다.
Vite로 만든 초기 프로젝트에는 불필요한 예제 코드가 많다. 이를 모두 지우고 나만의 화면을 만들어본다.
src/App.jsx를 열고 아래와 같이 깔끔하게 비운다.
import './App.css'
function App() {
return (
<div className="container">
<h1>나의 첫 React 앱</h1>
<p>반갑습니다. React를 배우고 있습니다.</p>
</div>
)
}
export default App
src/App.css 파일을 열고 내용을 모두 지운 후 간단한 스타일을 추가한다.
.container {
text-align: center;
margin-top: 50px;
background-color: #f0f0f0;
padding: 20px;
border-radius: 10px;
}
h1 {
color: #61dafb;
}
저장(Ctrl+S)하는 순간 브라우저가 새로고침 없이 변경된 스타일을 반영하는 것을 확인한다. 이것이 HMR(Hot Module Replacement) 기능이다.
이미지를 넣는 두 가지 방법을 배운다.
public 폴더에 있는 파일은 / 경로로 바로 접근 가능하다. favicon.ico 등이 여기 있다.
<img src="/vite.svg" alt="Vite 로고" />
src 폴더 내의 이미지는 자바스크립트 모듈처럼 import 해서 사용한다. 이 방식은 빌드 시 파일명을 해시값으로 변경해주어 캐싱 문제를 해결해준다.
import reactLogo from './assets/react.svg'
function App() {
return (
<img src={reactLogo} alt="React 로고" />
)
}
개발 모드(npm run dev)는 개발 편의를 위한 서버다. 실제 사용자에게 보여주려면 최적화된 파일로 변환(Build)해야 한다.
npm run build
명령이 완료되면 프로젝트 폴더에 dist라는 폴더가 생긴다. 이 폴더 안에는 압축되고 난독화된 index.html, CSS, JS 파일이 들어있다. 이것이 최종 결과물이다.
빌드된 파일이 잘 작동하는지 로컬 서버로 미리 볼 수 있다.
npm run preview
dist 폴더의 내용물을 Netlify, Vercel, GitHub Pages 같은 정적 호스팅 서비스에 업로드하면 전 세계 누구나 접속할 수 있는 웹사이트가 된다. 과정은 단순히 dist 폴더를 드래그 앤 드롭 하거나, GitHub 저장소와 연결하면 된다.