[React] SPA, ROUTER

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

React

React : ํ”„๋ก ํŠธ์•ค๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ JavaScript ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

framework - library์˜ ์ง‘ํ•ฉ์ฒด, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ญ˜ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์„ ์ง‘ํ•ฉํ•ด์„œ ๋ชจ์•„ ๋†“์€ ๊ฒƒ.

๋Œ€ํ‘œ์ ์ธ framework - spring framework

react๋Š” framework๊ฐ€ ์•„๋‹˜, react๋Š” ๋‹ค๋ฅธ ๊ธฐ์ˆ ๊ณผ ๊ฐ™์ด ์“ฐ๋Š”๋ฐ ์ œ์•ฝ์ด ์—†์Œ, ์ข…์†์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ

React์˜ 3๊ฐ€์ง€ ํŠน์ง•

  1. ์„ ์–ธํ˜•
  2. ์ปดํฌ๋„ŒํŠธ๊ธฐ๋ฐ˜
  3. ๋ฒ”์šฉ์„ฑ - ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ, ๋‹จ์ˆœํžˆ react๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๊ธฐ ๋•Œ๋ฌธ

์„ ์–ธํ˜• (Declarative)

๋ฆฌ์•กํŠธ๋Š” ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ์œ„ํ•ด HTML /CSS /JS ๋กœ ๋‚˜๋ˆ ์„œ ์ ๊ธฐ๋ณด๋‹ค

ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX๋ฅผ ํ™œ์šฉํ•œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅ

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ (Component -Baseed)โœจโœจโœจ

  • ๋ฆฌ์•กํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋‘” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ

    • JSX ๋ฌธ๋ฒ• ์ž์ฒด์—์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ ๋ชป ์”€, ๋ฐ˜๋ณต๋ฌธ ์จ์•ผ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด map
    • if๋„ ์‚ฌ์šฉ ๋ชปํ•จ ์จ์•ผ ํ•œ๋‹ค๋ฉด ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ ์ž์ฒด์— ์ง‘์ค‘ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ

๋ฒ”์šฉ์„ฑ(Learn Once, write Anywhere)

  • ๋ฆฌ์•กํŠธ๋Š” JavaScript ํ”„๋กœ์ ํŠธ ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • Facebook์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์•ˆ์ •์ ์ด๊ณ , ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋ฉฐ, ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅ.

JSX(JavaScript Xml)

javascript๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ (์‹ค์ œ๋กœ ์ปดํŒŒ์ผ ์•ˆํ•จ) JSX๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชป ์ฝ์Œ, ์ปดํŒŒ์ผ์ด ํ•„์š” , ์ปดํŒŒ์ผ ์‹œ Babel์„ ์‚ฌ์šฉ Bable์ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ.

JS๋Š” ํ˜ผ์ž ์‚ฌ์šฉ ๋ชปํ•˜๊ณ  HTML์ด ๊ผญ ์žˆ์–ด์•ผ ํ•จ, HTML ํ•˜๋‹จ์˜ ๋…ธ๋ž€ ๋ฐ•์Šค๊ฐ€ JS์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ฝ”๋“œ

JSX๋Š” ๋ฐ”๋ฒจ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด HTML๊ณผ JS๋กœ ๋‚˜๋‰˜์–ด์ง.

JSX ์‚ฌ์šฉ ์ด์œ 

  1. ํ•œ ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๊ณผ ๋””์ž์ธ

JSX ์‚ฌ์šฉ ์˜ˆ์ œ

App.js ์ด ํ•œ ๊ฐœ์˜ JavaScript ํŒŒ์ผ ์•ˆ์—์„œ HTML๊ณผ JavaScript๋กœ ๋‚˜๋ˆ„์–ด์กŒ๋˜ ๋‘ ๊ฐ€์ง€ ์ผ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Œ

  • js์˜ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

  • jsx์—์„œ๋Š” JS๋ฌธ๋ฒ• ์‚ฌ์šฉ์‹œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

JSX ํ™œ์šฉ

  1. JSX ๊ทœ์น™
    1. ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ.

    2. ์—˜๋ฆฌ๋จผํŠธ ํด๋ž˜์Šค ์‚ฌ์šฉ์‹œ , className์œผ๋กœ ํ‘œ์‹œ

    3. JavaScript ํ‘œํ˜„์‹ ์‚ฌ์šฉ์‹œ ์ค‘๊ด„ํ˜ธ ์ด์šฉ
    4. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ (PascalCase)

    5. ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์—๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

    6. ์—ฌ๋Ÿฌ๊ฐœ์˜ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ‘œ์‹œํ• ๋•Œ map() ํ•จ์ˆ˜๋ฅผ ์ด์šฉ

map์„ ์ด์šฉํ•œ ๋ฐ˜๋ณต

  1. ๋ธ”๋กœ๊ทธ๋ฅผ ์˜ˆ๋กœ ๋“ค ๋•Œ ํฌ์ŠคํŠธ๊ฐ€ 100๊ฐœ์ด๊ณ  ์ž‘์„ฑ์ž๊ฐ€ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค ์ˆœ ์—†์Œโ€ฆ
    1. ์ด๋ ‡๊ฒŒ ์ง์ ‘ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ”๋“œ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ํ•˜๋“œ์ฝ”๋”ฉ(hard coding)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      
        const posts = [
           { id : 1, title : 'Hello World', content : 'Welcome to learning React!' },
           { id : 2, title : 'Installation', content : 'You can install React via npm.' },
           { id : 3, title : 'reusable component', content : 'render easy with reusable component.' },
           // ...
           { id : 100, title : 'I just got hired!', content : 'OMG!' },
         ];
              
       function Blog() {
         return (
           <div>
             <div>
                <h3>{posts[0].title}</h3>
                <p>{posts[0].content}</p>
            </div>
             <div>
                <h3>{posts[1].title}</h3>
                <p>{posts[1].content}</p>
             </div>
             {// ...}
             <div>
                <h3>{posts[99].title}</h3>
                <p>{posts[99].content}</p>
             </div>
            {// ... 98 * 4 more lines !!}
          </div>
         );
       }
      
  2. ๊ทธ๋ž˜์„œ map์„ ์ด์šฉํ•˜์—ฌ ๋ฐ˜๋ณต

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     function Blog() {
       const postToElement = (post) => (
         <div>
           <h3>{post.title}</h3>
           <p>{post.content}</p>
         </div>
       );
        
       const blogs = posts.map(postToElement);
        
       return <div className="post-wrapper">{blogs}</div>;
     }
    
    1. key ์†์„ฑ์˜ ์œ„์น˜๋Š” map ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ ์ฆ‰, ์ฒซ ์—˜๋ฆฌ๋จผํŠธ์— ๋„ฃ๊ธฐ
      1. key ์—†์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ

        image

      2. ์•„๋ž˜์™€ ๊ฐ™์ด key๋ฅผ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•จ. ์ • ๊ณ ์œ ํ•œ id๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋งŒ ๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋„ฃ์–ด์„œ ํ•ด๊ฒฐ

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        
          function Blog() {
           // postToElement๋ผ๋Š” ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์จ๋„ ๋ฌด๋ฐฉ.
           const blogs = posts.map((post) => (
             **<div key={post.id}>**
               <h3>{post.title}</h3>
               <p>{post.content}</p>
             </div>
           ));
           return <div className="post-wrapper">{blogs}</div>;
         }
        

Component

  1. ์ปดํฌ๋„ŒํŠธ์˜ ์ •์˜
    1. ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ๋ฌถ์Œ

      image

  2. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๊ณ  ์กฐํ•ฉํ•˜๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

    image

  3. React DOM
    1. React application์€ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ํ˜•์„ฑํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
    2. ํŠธ๋ฆฌ๊ตฌ์กฐ = ๊ณ„์ธตํ˜• ๊ตฌ์กฐ

image

  1. ์œ ํˆฌ๋ธŒ๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒ๊ฐํ•ด๋ณด๊ธฐ

    image

    Untitled

    1. ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ์ž ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ UI์˜ ํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Œ.
    2. ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ๋ณต์žกํ•œ UI๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ 
    3. ๋” ๋‚˜์•„๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ณต์žกํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์˜ ์žฅ์ 

    1. React ์—†์„ ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ์ˆ˜์ •

      image

    2. React ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๊ทœ๋ชจ๊ฐ€ ํฐ application์€ ์ˆ˜์ •์ด๋‚˜ ๊ตฌ์กฐ ๊ฐœ์„ ์ด ๊ฐ„ํŽธํ•ด์ง.

      image

Create React App - ํ„ฐ๋ฏธ๋„ ์‹ค์Šต

Create React App์€ ๋ฆฌ์•กํŠธ SPA๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํˆด ์ฒด์ธ

  • ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›
  • but, ์ตœ๊ทผ์— ์—…๋ฐ์ดํŠธ ์ง€์›์„ ๋”์ด์ƒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•จ.
  • ํ„ฐ๋ฏธ๋„์—์„œ nmp ์„ค์น˜
    1. npm install npx-g
    2. npx create-react-app react-random-proverb
    3. y
    4. code .
  1. ์‹ค์Šต ์˜ˆ์ œ -๋ช…์–ธ 10๊ฐœ๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ณ  ,๋žœ๋ค์œผ๋กœ ํ™”๋ฉด์—์„œ ๋ช…์–ธ์ด ํ‘œ์‹œ๋˜๊ฒŒ ํ•ด๋ณด๊ธฐ
    1. ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฒƒ

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      
       function App() {
         const quotes = [
         "์ธ์ƒ์€ ์ž์‹ ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ž์‹ ์„ ์ฐฝ์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. - ์กฐ์ง€ ๋ฒ„๋‚˜๋“œ ์‡ผ",
         "์„ฑ๊ณต์€ ์„ฑ๊ณตํ•˜๋ ค๋Š” ์˜์ง€์—์„œ ๋น„๋กฏ๋œ๋‹ค. - ๋นˆ์Šค ๋กฌ๋ฐ”๋ฅด๋””",
         "๋ณ€ํ™”๋Š” ๊ณ ํ†ต์Šค๋Ÿฝ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋” ๊ณ ํ†ต์Šค๋Ÿฝ๋‹ค. - ์กด ๋งฅ์Šค์›ฐ",
         "์ž์‹ ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚ฎ๊ฒŒ ์ž์‹ ์„ ํ‰๊ฐ€ํ•˜์ง€ ๋ง๋ผ. - ๋ฏธ์…ธ ์˜ค๋ฐ”๋งˆ",
         "์šฐ๋ฆฌ๋Š” ๊ณ„์†ํ•ด์„œ ๋‚˜์•„๊ฐ€๋Š” ๋ฒ•์„ ๋ฐฐ์šด๋‹ค. - ์›”ํŠธ ๋””์ฆˆ๋‹ˆ",
         "๋„ค๊ฐ€ ๋‘๋ ค์›Œํ•˜๋Š” ์ผ์„ ํ•ด๋ผ. ๊ทธ๋ฆฌ๊ณ  ๊ณ„์† ๊ทธ๊ฒƒ์„ ํ•ด๋ผ. - ๋ž„ํ”„ ์™ˆ๋„ ์—๋จธ์Šจ",
         "ํ–‰๋ณต์€ ๋ชฉ์ ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌํ–‰์˜ ๋ฐฉ๋ฒ•์ด๋‹ค. - ๋กœ์ด ๊ตฟ๋งจ",
         "์„ฑ๊ณต์˜ ๋น„๋ฐ€์€ ๊ทธ ๋น„๋ฐ€์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. - ํ—จ๋ฆฌ ํฌ๋“œ",
         "๋งค์ผ ๋งค์ผ์ด ์ตœ๊ณ ์˜ ๋‚ ์ด๋‹ค. - ๋ž„ํ”„ ์™ˆ๋„ ์—๋จธ์Šจ",
         "๋ถˆ๊ฐ€๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋ฏฟ๋Š” ์ž๋“ค์— ์˜ํ•ด ๋‹ฌ์„ฑ๋œ๋‹ค. - ๋‚˜ํด๋ ˆ์˜น ๋ณด๋‚˜ํŒŒ๋ฅดํŠธ"
         ];
              
         const currentProverb = quotes[Math.floor(Math.random()*10+1)];
              
         return (
           <div className="App">
             <header className="App-header">
               <img src={logo} className="App-logo" alt="logo" />
               <p>
                 {currentProverb}
               </p>
               <a
                 className="App-link"
                 href="https://reactjs.org"
                 target="_blank"
                 rel="noopener noreferrer"
               >
               Learn React
              
               </a>
             </header>
           </div>
         );
       }
              
       export default App;
      
    2. ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์•ˆ๋˜์–ด์žˆ๊ณ , 1000๋ฒˆ ์‹คํ–‰๋˜๋„ 1๋ฒˆ์˜ ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ์ค‘์š”, ๊ฒฐํ•จ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹์•„๋„ ์˜ค๋ฅ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ์ข‹์Œ

      1
      2
      
       let idx = Math.round(Math.random()*10+1)
       idx = idx === 10? 0 : idx;
      
      • Math.random()์€ 0์—์„œ 1๊นŒ์ง€์˜ ๋‚œ์ˆ˜๋ฅผ ์ถœ๋ ฅ

React SPA

SPA (Single-Page Application)

  1. ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ ๋ฐ ๊ฐœ๋…
    1. ์ „ํ†ต์ ์ธ ์›น์‚ฌ์ดํŠธ๋Š” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ๋งค๋ฒˆ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•จ.
      1. ์ „ํ†ต์ ์ธ ์›น์‚ฌ์ดํŠธ์˜ ํ•œ๊ณ„์™€ ๋‹จ์ 
        • ์‚ฌ์šฉ์ž์™€ ์„œ๋น„์Šค ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ ์ฆ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์™€ ๊ฒฝํ—˜์˜ ์ €ํ•˜๋ฅผ ์•ผ๊ธฐ

        image

    2. SPA ๋“ฑ์žฅ
      1. HTML๋ฌธ์„œ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—…๋ฐ์ดํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„ JavaScript๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์žฅํ•˜์—ฌ HTML์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด ๊ฐœ๋ฐœ ๋จ.

        image

      2. SPA๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ด

  2. SPA๋ž€
    1. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์™„์ „ํ•œ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€ ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„ ๊ทธ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ์˜ ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ or ์›น์‚ฌ์ดํŠธ
  3. SPA์˜ ์žฅ์ 
    1. ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์„œ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ค Interaction์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘

      image

    2. ์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฌธ์ œ๊ฐ€ ํ˜„์ €ํ•˜๊ฒŒ ์ค„์–ด๋“ฌ
    3. ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ ์œ ์ € ๊ฒฝํ—˜์„ ์ œ๊ณต ํ•จ.
  4. SPA์˜ ๋‹จ์ 
    1. JavaScript ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง
    2. ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™” (SEO)๊ฐ€ ์ข‹์ง€ ์•Š์Œ
    3. ๊ตฌ๊ธ€์ด๋‚˜ ๋„ค์ด๋ฒ„ ๊ฐ™์€ ๊ฒ€์ƒ‰์—”์ง„์€ HTML ํŒŒ์ผ์— ์žˆ๋Š” ์ž๋ฃŒ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์„ ๊ตฌ๋™ํ•จ. ํ•˜์ง€๋งŒ SPA์˜ ๊ฒฝ์šฐ HTML ํŒŒ์ผ์€ ๋ณ„๋‹ค๋ฅธ ์ž๋ฃŒ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์—”์ง„์ด ์ ์ ˆํžˆ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•จ.

    ์ฐธ๊ณ  ํ•˜๊ธฐ

    image

  • REST, RESTfull - ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์ง€์ผœ์•ผํ•˜๋Š” ์–‘์‹.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌ,
  • ๋ฐฑ์—”๋“œ์—์„œ ๋ณด๋‚ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ด์Šจ
  • ํ”„๋ก ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ ๋ณ€๊ฒฝ์€ react์—์„œ ํ•˜๋Š” ๊ฒƒ,- ํ”„๋ก ํŠธ .๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•จ

์™€์ด์–ด ํ”„๋ ˆ์ž„

  1. Wireframe๊ณผ Mockup

    image

    1. Wireframe
      • ์›นํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ UI ์š”์†Œ ๋“ฑ์— ๋Œ€ํ•œ ๋ผˆ๋Œ€
    2. Mockup โ†’ ์˜๋ฏธ๋Š” ๊ผญ ๊ธฐ์–ตํ•˜๊ธฐ
      • ๋ฐ๋ชจ ์‹œ์—ฐ, ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด์€ ๋ชจํ˜•
  2. ํŽ˜์ด์ง€ ๊ตฌ์„ฑ

    1. ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ ์ด์ „์—, ์ปดํฌ๋„ŒํŠธ ๋จผ์ € ๋งŒ๋“ค๊ณ  ์กฐ๋ฆฝ

      image

    2. image

      ์ปดํฌ๋„ŒํŠธ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์–ด๋А ํŽ˜์ด์ง€์— ๊ฐ€๋”๋ผ๋„ ํ•ญ์ƒ ํ™”๋ฉด ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ์Œ. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€๋งˆ๋‹ค ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•œ๋ฒˆ๋งŒ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง์„ ์งœ๊ธฐ

    3. ํ•œ๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ปจํ…์ธ ๋ฅผ ๊ณ„์† ์žฌํ™œ์šฉ ํ•จ.

      image

    4. ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ๋ฐฐ์—ด๋กœ ๋ฐ›์Œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ์˜์—ญ.

      image

      image

React Router

๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ์„œ ํ™”๋ฉด์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ผ์šฐํŒ…์ด๋ผ ํ•จ,

image

  1. React Router ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

    image

    1
    
     import{BrowserRouter, Routes, Route, Link}from "react-router-dom";
    
  2. React Router ์‚ฌ์šฉ ํ™˜๊ฒฝ Setting

    1. react - router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

      1
      2
      3
      4
      5
      
      #simpleroute ํด๋”์— React App ์„ค์น˜
      npx create-react-app simpleroute
              
      # react-router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
      npm install react-router-dom@^6.3.0
      
    2. App.js๋กœ react-router ์ปดํฌ๋„ŒํŠธ ๊บผ๋‚ด์˜ค๊ธฐ

      1
      
       import{BrowserRouter, Routes, Route, Link}from "react-router-dom";
      
    3. React Router ์‚ฌ์šฉ ํ™˜๊ฒฝ ์„ธํŒ…

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      
       import './App.css';
       import { BrowserRouter, Routes,Route, Link} from 'react-router-dom';
      
      
       export default function App(){
           return (
               <BrowserRouter>
                   <div>
                       <nav>
                           <ul>
                               <li>
                                   <Link to="/">Home</Link>
                               </li>
                               <li>
                                   <Link to="/about">Home</Link>
                               </li>
                               <li>
                                   <Link to="/dashboard">Home</Link>
                               </li>
                           </ul>
                       </nav>
                       <Routes>
                           <Route path ="/" element={<Home/>}/>
                           <Route path ="/mypage" elemnet={<MyPage/>}/>
                           <Route path ="/dashboard" element={<Dashboard/>}/>
                       </Routes>
                   </div>
               </BrowserRouter>
               );
           }
      
       function Home(){
           return <h1>Home</h1>;
       }
      
       function MyPage(){
           return <h1>MyPage</h1>;
       }
      
       function Dashboard(){
           return <h1>DashBoard</h1>;
       }
      

react ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment