[React] SPA(Single Page Application) &MPA(Multi Page Application) 🎬JSX

Suji KangΒ·2023λ…„ 8μ›” 11일
0

🐾 λ¦¬μ•‘νŠΈ λ™μž‘μ›λ¦¬

html 파일이 μ˜€λ‘œμ§€ ν•œκ°œλ§Œ μ‘΄μž¬ν•œλ‹€.
λ¦¬μ•‘νŠΈλ‘œ λ§Œλ“  μ›Ήμ‚¬μ΄νŠΈλŠ” νŽ˜μ΄μ§€κ°€ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•œλ‹€. SPA (Single Page Application)
(페이슀뢁, μΈμŠ€νƒ€κ·Έλž¨, ...)

🐾 SPA (Single Page Application) vs MPA (Multi Page Application)

SPA λŠ” ν•œκ°œμ˜ νŽ˜μ΄μ§€λ‘œλ§Œ λ§Œλ“€μ–΄μ ΈμžˆλŠ” μ•± ν˜Ήμ€ 웹을 μ˜λ―Έν•œλ‹€.
MPA λŠ” μ—¬λŸ¬κ°œμ˜ νŽ˜μ΄μ§€(html 파일이 μ—¬λŸ¬κ°œ)둜 λ§Œλ“€μ–΄μ ΈμžˆλŠ” μ•± ν˜Ήμ€ 웹을 μ˜λ―Έν•œλ‹€.
ν•˜λ‚˜ν•˜λ‚˜ λΆˆλŸ¬λ‹€κ°€ λ§Œλ“€μ–΄μ€˜μ•Όν•œλ‹€λŠ” λΆˆνŽΈν•œμ ..

react ν”„λ‘œμ νŠΈμ— μžˆλŠ” index.html μ—μ„œ root divλ₯Ό μ°Ύμ•„ μ˜¨λ‹€μŒμ— κ·Έ 속에닀가 κ·Έλ €μ£ΌλŠ” ν–‰μœ„λ₯Ό ν•˜λŠ” 파일 : index.js

❗️SPA의 단점은 λ¬΄μ—‡μΌκΉŒ?

속도!
κ·Έλž˜μ„œ, μƒκ°ν•œκ²Œ,,,?
λ¦¬μ•‘νŠΈ μ—μ„œ,
λ°”λ€ŒλŠ” "λΆ€λΆ„"만 지웠닀가 κ·Έλ €μ£Όλ©΄ λ˜μ§€ μ•Šμ„κΉŒ??? λΌλŠ” μƒκ°μ„ν•œλ‹€.

물리적 DOMκ³Ό λ™μΌν•œ 가상 DOM을 λ§Œλ“€κ³ ,
λ³€ν•΄μ•Ό ν•˜λŠ” 뢀뢄이 μžˆλ‹€λ©΄, λ³€ν•˜κΈ° μ „μ˜ 가상 DOM ꡬ쑰와 λ³€ν•œν›„μ˜ 가상 DOM ꡬ쑰λ₯Ό λΉ„κ΅ν•˜μ—¬
λ³€ν•œ λΆ€λΆ„λ§Œ 물리적 DOM에 λ°˜μ˜ν•˜λ„λ‘ μ½”λ“œλ₯Ό μ§œλ†“μ•„μ„œ "속도λ₯Ό ν–₯상"μ‹œν‚€λŠ” 방법을 μ‚¬μš©ν•œλ‹€

index.js μ•ˆμ—μžˆλŠ”
ReactDOM.createRoot(물리적인DOMνƒœκ·Έ)
πŸ‘‰πŸ‘‰ 물리적 DOMνƒœκ·Έλ₯Ό 루트(뿌리)둜 ν•˜λŠ” κ°€μƒμ˜ DOM νƒœκ·Έλ₯Ό λ§Œλ“€μ–΄μ€˜

render(νƒœκ·Έ)
πŸ‘‰πŸ‘‰ 가상 DOM νƒœκ·Έ μ•ˆμ— μžμ‹μœΌλ‘œ νŠΉμ • νƒœκ·Έλ₯Ό μΆ”κ°€ν•΄μ€˜

* 17version 은 render ν•¨μˆ˜ μ•ˆμ“°κ³  hydrate ν•¨μˆ˜λ₯Ό μ“΄λ‹€(λ…Όλ¦¬λŠ”κ°™μŒ)
κ·Έλž˜μ„œ νšŒμ‚¬μ—μ„œλŠ” 16versionμ΄λ‚˜ 18versionμ‚¬μš©.

Document Object Model

λͺ¨λ“  νƒœκ·Έλ“€μ€ 객체이닀

🐾 JavaScript xml(JSX)

XML(eXtensible Markup Language)
Markup Language : <> 둜 이루어진 μ–Έμ–΄

예λ₯Όλ“€μ–΄,

*정보전달* 
  μ‚¬λžŒμ΄μžˆλŠ”λ°, 이름은 κ°•μˆ˜μ§€κ³ ,
  λ‚˜μ΄λŠ” 15살이고 ν•™κ΅λŠ” λ‹€λžŒμ₯μ€‘학ꡐ
  μ‚¬λžŒμ΄μžˆλŠ”λ°, 이름은 홍길동이고,
  λ‚˜μ΄λŠ” 20살이고 ν•™κ΅λŠ” λ‹€λžŒμ₯λŒ€ν•™κ΅
  μ‚¬λžŒμ΄μžˆλŠ”λ°, 이름은 κΉ€μ² μˆ˜μžˆκ³ ,
  λ‚˜μ΄λŠ” 30살이고 

κ³Όκ±° :

μ‚¬λžŒκ°•μˆ˜μ§€15λ‹€λžŒμ₯μ€‘ν•™κ΅μ‚¬λžŒν™κΈΈλ™15λ‹€λžŒμ₯μ€‘학ꡐ
* 아직도 κΈˆμœ΅κΆŒμ—μ„œλŠ” μ΄λ ‡κ²Œ μ“΄λ‹€, 속도가 λΉ λ₯΄κΈ° λ•Œλ¬Έμ—

xml

<μ‚¬λžŒ 이름="κ°•μˆ˜μ§€" λ‚˜μ΄="15" 학ꡐ="λ‹€λžŒμ₯μ€‘학ꡐ">
<μ‚¬λžŒ 이름="홍길동" λ‚˜μ΄="20" 학ꡐ="λ‹€λžŒμ₯λŒ€ν•™κ΅">
<μ‚¬λžŒ 이름="κΉ€μ² μˆ˜" λ‚˜μ΄="30" 학ꡐ="λ‹€λžŒμ₯μ€‘학ꡐ">

jsx λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ κ΅¬ν˜„ν•œ XML

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ XML을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ”
ν•¨μˆ˜λ‘œ κ΅¬ν˜„

function μ‚¬λžŒ (이름, age, 학ꡐ){

}
μ‚¬λžŒ('κ°•μˆ˜μ§€', 15, 'λ‹€λžŒμ₯μ€‘학ꡐ');

πŸ‘‰πŸ‘‰ <μ‚¬λžŒ='κ°•μˆ˜μ§€' age=15 학ꡐ="λ‹€λžŒμ₯μ€‘학ꡐ">
파일 ν™•μž₯자λ₯Ό .jsx --> ν˜„μž¬λŠ” .js둜 써도 μ•Œμ•„μ„œ ν•΄μ„ν•΄μ€Œ
(* νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 아직 ꡬ뢄 ν•„μš”)

🐾 React.StrictMode

<React.StrictMode></React.StrictMode>

엄격검사λͺ¨λ“œ, 졜초둜 κ·Έλ¦° ν›„ λ‹€μ‹œ 지웠닀가 κ·Έλ¦¬λŠ” 과정을 μ‹€ν–‰ν•˜μ—¬ λ‘λ²ˆ 그렸을떄도 이상이 μ—†λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ μš©λ„

πŸ‘‰ λͺ…λ Ήμ–΄λŠ” pacakge.json file에 scriptsμ—μ„œ μ„€μ •κ°€λŠ₯

λͺ…λ Ήμ–΄λ₯Ό aaa둜 λ°”κΎΌλ‹€λ©΄?

μ‹€μ§μ μœΌλ‘œ, react-scripts startκ°€ μ‹€ν–‰λœλ‹€.
ν•˜μ§€λ§Œ aaaλΌλŠ” λͺ…λ Ήμ–΄κ°€ 이미 μžˆμ„μˆ˜μžˆλ‹€. 별λͺ…이 aaa인것이고, μ•žμ— npm 쀑 λͺ…령어별λͺ… aaaλ₯Ό μ¨μ€˜μ•Όν•œλ‹€.
"npm aaa" μ΄λŸ°μ‹μœΌλ‘œ.
npm은 λ­μ˜€μ§€?? node.js μ„€μΉ˜ν• λ–„ νŒ¨ν‚€μ§€. 같이 μ„€μΉ˜λ˜λŠ” ν”„λ‘œκ·Έλž¨ κ΄€λ¦¬μž
npm μ—†μ—ˆλ”λΌλ©΄? 일일이 react-scripts startλ₯Ό μ³μ€˜μ•Όν•œλ‹€.

jsx 쀑 κΈ°μ‘΄ html νƒœκ·Έ 이름과 λ˜‘κ°™μ€ μ΄λ¦„μœΌλ‘œ λ§Œλ“€μ–΄μ ΈμžˆλŠ” νƒœκ·Έλ“€μ΄ μžˆλ‹€
πŸ‘‰πŸ‘‰ν•΄μ„ν• λ–„ htmlνƒœκ·Έμ™€ λ™μΌν•˜κ²Œ 해석! λ§Œλ“€λ•Œ λͺ‡κ°€μ§€ 차이점 있음!
html μ—λŠ” μ—†λŠ” 속성을 써도 λœλ‹€.

html

<h1 onclick="f()" aaa="κ°•μˆ˜μ§€" id="title" class="important">μ•ˆλ…•ν•˜μ„Έμš”</h1>

jsx
🐾 차이점??
πŸ“1.**class**둜 μ„€μ •ν•˜κ³  싢은 λŒ€μƒμ€**className**에 값을 λ„˜κ²¨μ€˜μ•Όν•œλ‹€
πŸ“2. **이벀트** - μΉ΄λ©œν‘œκΈ°λ²•(λŒ€λ¬Έμž)둜 바뀐것, ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ”κ²ƒμ΄ μ•„λ‹Œ, ν•¨μˆ˜μžμ²΄λ₯Ό λ„˜κ²¨μ€˜μ•Όν•œλ‹€.

 <h1 onClick=f aaa="κ°•μˆ˜μ§€" id="title" className="important">μ•ˆλ…•ν•˜μ„Έμš”</h1>
--> h1(aaa="κ°•μˆ˜μ§€,id="title", className="important", children="μ•ˆλ…•");
    내뢀적인 ν•¨μˆ˜μ˜ μ½”λ“œλ₯Ό κ±°μ³μ„œ
    결과둜 λ‚˜μ˜€λŠ”κ²ƒμ€ 
    <h1 id="title" class="important" onclick="f()">μ•ˆλ…•</h1>
    -->μ΄λŸ¬ν•œ htmlνƒœκ·Έκ°μ²΄κ°€ 결과둜 λ‚˜μ˜€κ²Œ λ˜μ–΄μžˆμŒ

🐾 jsx μ€‘μ—μ„œ htmlνƒœκ·Έμ™€ λ˜‘κ°™μ€ 이름이 μ•„λ‹Œ νƒœκ·Έ

:πŸ‘‰ μ»΄ν¬λ„ŒνŠΈ
πŸ“ 1. μ»΄ν¬λ„ŒνŠΈλŠ” λ°˜λ“œμ‹œ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•΄μ•Όν•œλ‹€.
μ»΄ν¬λ„ŒνŠΈλ„ 어쨋든 jsx이기 λ•Œλ¬Έμ— ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄μ§„λ‹€.
(κ³Όκ±°μ—λŠ” 클래슀둜 λ§Œλ“€μ—ˆμŒ) --> (ꢌμž₯ μ•ˆν•¨) -->ν˜„μž¬,ν•¨μˆ˜λ‘œ λ§Œλ“€κ²Œ λ°œμ „ν•¨.

d01MyComponent.js

//λ‚˜λ§Œμ˜ μ»΄ν¬λ„ŒνŠΈ
function a(){
    return "κ°•μˆ˜μ§€";
}
function Su() {
    return (
        <>
        <h1>κ°•μˆ˜μ§€ μ»΄ν¬λ„ŒνŠΈ</h1>
        <p>λ‚΄κ°€ 처음으둜 λ§Œλ“  λ‚˜λ§Œμ˜ xml, 즉 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.</p>
        </>
    );
}


export default Su;

App.js

import logo from './logo.svg';
import './App.css';
import Su from './day01/d01MyComponent';

function App() {
  return (
  <Su/>
  );
}

export default App;

πŸ“ 2. return 될 λ–„ ν•œκ°œλ§Œ returnλ˜μ–΄μ•Ό ν•œλ‹€ (λ¬Άμ—¬μ„œ)
보톡은 div둜 λ¬Άμ–΄μ„œ return을 ν•˜λŠ”λ°,
이 divκ°€ 정말 μ˜λ―Έμ—†μ΄ λ¬Άμ–΄μ£ΌκΈ° μœ„ν•΄μ„œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ λΆˆν•„μš”ν•˜κΈ° λ•Œλ¬Έμ—
그럴 κ²½μš°μ—λŠ” fragment <></> λΉ„μ–΄μžˆλŠ” νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Άμ–΄μ€„μˆ˜ μžˆλ‹€.
πŸ‘‰ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 두 개 이상을 리턴할 수 μ—†κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” μš”μ†Œλ“€μ„ ν•˜λ‚˜μ˜ νƒœκ·Έλ‘œ κ°μ‹Έκ±°λ‚˜ μ˜λ―Έμ—†λŠ” νƒœκ·Έμ˜ μ‚¬μš©μ„ ν”Όν•˜κΈ° μœ„ν•΄ React Fragmentλ₯Ό μ‚¬μš©ν•˜λŠ” 것.

<Fragment> </Fragment> λŒ€μ‹  <> </> μ΄λ ‡κ²Œ 써도 λœλ‹€.

πŸ“ 3.λ‚΄μš©μ΄ μ—†λŠ” jsx λŠ” μ–΄λ–»κ²Œ ν‘œκΈ°?

html    -->   jsx
<img>         <img/>
<input>       <input/>
<p>μ•ˆλ…•</p>    <p>μ•ˆλ…•</p>
              <Su>μ•ˆλ…•</Su>
<p></p>       <p/> or <p></p>
              <Su />

πŸ“ 4. jsx둜 ν•΄μ„ν•΄μ•Όν•˜λŠ” κ²½μš°μ™€ js둜 ν•΄μ„ν•΄μ•Όν•˜λŠ” κ²½μš°λŠ” μ–΄λ–»κ²Œ κ΅¬λΆ„ν• κΉŒ?
<>의 μ‹œμž‘κ³Ό 끝을 κΈ°μ€€μœΌλ‘œ jsx둜 해석, κ·Έμ™ΈλŠ” javascript둜 해석,
jsx μ•ˆμͺ½μ—μ„œ javascript λͺ…λ Ήμ–΄λ‘œ ν•΄μ„ν•΄μ•Όν•˜λŠ” κ²½μš°λŠ” ??
{} λ₯Ό 톡해 μ•Œλ €μ€€λ‹€
{} μ•ˆμͺ½μ€ js둜 해석.

✏️ 주석도 λ§ˆμ°¬κ°€μ§€μ˜ 의미둜
{/주석/}
ν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 해석 λ˜μ–΄λ„ μ£Όμ„μ΄λ‹ˆ μ£Όμ„μœΌλ‘œ μ‚¬μš©λœλ‹€

App.js

function a(){
   return "κ°•μˆ˜μ§€";
}
a(); //κ°•μˆ˜μ§€ 좜λ ₯
function Su(){
return(
   <div>a()</div>    //κ°•μˆ˜μ§€ 좜λ ₯
);
}

jsx 버전, d01MyComponent.js

// λ‚˜λ§Œμ˜ μ»΄ν¬λ„ŒνŠΈ 
function a(){
  return "κ°•μˆ˜μ§€";
}

function Su(){
  // 이곳을 주석
  
  return (
    <>
      {/*주석*/}
      <h1>{a()} μ»΄ν¬λ„ŒνŠΈ</h1>
      <p className={a()}>λ‚΄κ°€ 처음으둜 λ§Œλ“  λ‚˜λ§Œμ˜ xml, 즉 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€</p>
      <p>{a()}</p>
    </>
  );
}

export default Su;
profile
λ‚˜λ₯Όμœ„ν•œ λ…ΈνŠΈν•„κΈ° πŸ“’πŸ”ŽπŸ“

0개의 λŒ“κΈ€