[React #17] React App 생성

반응형

01. React App

  • 리액트로 만든 웹 서비스
  • 웹 페이지의 기능을 넘어서 어플리케이션에 가까운 기능을 해서 웹 위에 동작하는 어플리케이션이라는 의미

 

02. React App 생성

  • Vite : 차세대 프론트엔드 개발 툴로, 기본 설정이 적용된 React App 생성 가능
  • vite에는 웹 서버가 내장되어 있음

01) React App 생성

npm create vite@latest

생성 완료

 

📑 package.json

- node.js 패키지이기 때문에 package.json 파일이 있음

{ ​​"name": "practice-react", ​​"private": true, ​​"version": "0.0.0", ​​"type": "module", ​​"scripts": { ​​​​"dev": "vite", ​​​​"build": "vite build", ​​​​"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", ​​​​"preview": "vite preview" ​​}, ​​"dependencies": { ​​​​"react": "^18.2.0", ​​​​"react-dom": "^18.2.0" ​​}, ​​"devDependencies": { ​​​​"@types/react": "^18.2.56", ​​​​"@types/react-dom": "^18.2.19", ​​​​"@vitejs/plugin-react": "^4.2.1", ​​​​"eslint": "^8.56.0", ​​​​"eslint-plugin-react": "^7.33.2", ​​​​"eslint-plugin-react-hooks": "^4.6.0", ​​​​"eslint-plugin-react-refresh": "^0.4.5", ​​​​"vite": "^5.1.4" ​​} }
  • devDependencies : 개발할 때에만 사용되는 라이브러리들 저장, 배포할 때는 포함되지 않음

02) package.json을 기반으로 라이브러리 설치

npm i

 

- 설치가 완료되면 node_modules, package-lock.json 파일 생성됨

node_modules

 

 

03. React App 파일 구성

React App 파일

① 📑 public

- svg, png, jpg 등과 같은 이미지 파일 보관

- 폰트나 동영상 같은 정적인 파일 보관

 

② 📑 src

- 작성하게 될 리액트나 자바스크립트 코드들 보관

 

③ 📑 assets

- 정적 파일 보관

 

📑 eslintrc.cjs

- eslint 도구의 설정 파일

(eslint : 개발자들 사이에 코드 스타일을 통일하는 데 도움을 주는 도구)

 

⑤ 📑 .gitignore

- github에 업로드할 때 올리면 안 되는 파일 명시하는 파일

 

⑥ 📑 index.html

- 리액트의 기본적인 틀 역할을 하는 HTMl 코드가 담긴 파일

 

⑦ 📑 vite.config.js

- vite 도구의 옵션을 설정하는 파일

 

 

04. React App 실행

 

📑 package.json

{ ​​"scripts": { ​​​​"dev": "vite", ​​​​"build": "vite build", ​​​​"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", ​​​​"preview": "vite preview" ​​} }
  • dev : 개발용으로 실행

📑 ctrl+J 누른 후 terminal에 'npm run dev' 입력

npm run dev
  • 리액트 웹 서버 가동

 

[ 단축키 ]

- r + enter : 새로고침

- u + enter : url 다시 보기

- o + enter : 브라우저 다시 열기

- c + enter : 콘솔 지우기

- q + enter : 리액트 앱 종료

 

 

📌 localhost:5173

 

- localhost : 내 컴퓨터를 뜻함, 남의 컴퓨터로 이 주소에 접속할 수 없음

- 5173 : 포트 번호로, 하나의 컴퓨터 내에서 여러 개의 서버를 동작시키기 위해 필요한 주소를 말함

- 포트 번호가 필요한 이유 : 예를 들어 React Server, PHP Server 두 개의 서버가 동작하고 있을 때 어떠한 서버가 요청에 응답할지 명시해주기 위함

- 그래서 모든 프로그램이 실행될 때마다 자동으로 고유한 포트 번호를 붙여줌

 

 

 

05. React App 구동 원리

구동화면

 

📑 index.html

<!doctype html> <html lang="en"> ​​<head> ​​​​<meta charset="UTF-8" /> ​​​​<link rel="icon" type="image/svg+xml" href="/vite.svg" /> ​​​​<meta name="viewport" content="width=device-width, initial-scale=1.0" /> ​​​​<title>Vite + React</title> ​​</head> ​​<body> ​​​​<div id="root"></div> ​​​​<script type="module" src="/src/main.jsx"></script> ​​</body> </html>
  • 기본화면으로 여기서 main.jsx 파일 실행

📑 main.jsx

import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.jsx' import './index.css' ReactDOM.createRoot(document.getElementById('root')).render( ​​<React.StrictMode> ​​​​<App /> ​​</React.StrictMode>, )
  • createRoot : 인수로 전달받은 html 요소를 리액트의 루트로 만들어주는 역할
  • render : <App />을 렌더링 한다는 뜻
  • <App /> : 컴포넌트를 렌더링하는 문법
  • StrictMode : 작성한 코드에 잠재적인 문제가 있는지 검사해서 경고해주는 도구

📑 App.jsx

import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' function App() { ​​const [count, setCount] = useState(0) ​​return ( ​​​​<> ​​​​​​<div> ​​​​​​​​<a href="https://vitejs.dev" target="_blank"> ​​​​​​​​​​<img src={viteLogo} className="logo" alt="Vite logo" /> ​​​​​​​​</a> ​​​​​​​​<a href="https://react.dev" target="_blank"> ​​​​​​​​​​<img src={reactLogo} className="logo react" alt="React logo" /> ​​​​​​​​</a> ​​​​​​</div> ​​​​​​<h1>Vite + React</h1> ​​​​​​<div className="card"> ​​​​​​​​<button onClick={() => setCount((count) => count + 1)}> ​​​​​​​​​​count is {count} ​​​​​​​​</button> ​​​​​​​​<p> ​​​​​​​​​​Edit <code>src/App.jsx</code> and save to test HMR ​​​​​​​​</p> ​​​​​​</div> ​​​​​​<p className="read-the-docs"> ​​​​​​​​Click on the Vite and React logos to learn more ​​​​​​</p> ​​​​</> ​​) } export default App
  • 함수가 html 태그들을 리턴하고 있으면 함수를 컴포넌트라고 부름
  • App() 함수가 리턴하고 있는 html 태그들을 main.jsx에서 사용

📌정리

 'app.jsx'에서  html 태그 리턴 'main.jsx'에서 <App /> 실행 'index.html'에서 main.jsx 실행

 

 

참고자료

이정환 Winterlood, '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지'
반응형

댓글