서버에서 응답올때까지 기다리는 시간 112.47ms

서버에서 응답올때까지 기다리는 시간 112.47ms

서버에서 응답올때까지 기다리는 시간 10.27s

서버에서 응답올때까지 기다리는 시간 10.27s

<aside> 💡 서버에서의 data fetching이 느리면 첫 화면을 그려주는데 오래 걸리게 된다.

</aside>

<!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Todo List</title>
  </head>
  <body>
    <div id="app">
      ${Button({ id: 'add', text: '아이템 추가' })}
      ${Button({ id: 'delete', text: '아이템 삭제' })}
      ${TodoList(model.todoItems)}
    </div>
    <script>
      document.querySelector('#add').onclick = () => {
        fetch('/api/todo-items', {
          method: 'post',
          body: JSON.stringify({ content: '추가된 아이템' }),
          headers: {
            'Content-Type': 'application/json',
          }
        }).then(() => location.reload())
      }
  
      document.querySelector('#delete').onclick = () => {
        fetch('/api/todo-items/0', { method: 'delete' }).then(() => location.reload())
      }
    </script>
  </body>
  </html>
  1. 기존 html 문자열에, 해당 js 파일을 가져오는 코드를 추가한다.

    export const generateHTML = async (model) => {
      const data = await fetchData();
      return `
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <title>Todo List</title>
      </head>
      <body>
        <div id="app">
          ${TodoList(model.todoItems)}
          ${Button({ id: 'add', text: '아이템 추가' })}
          ${Button({ id: 'delete', text: '아이템 삭제' })}
          ${PostList(data)}
        </div>
        <script src="./src/main.js" type="module"></script>
      </body>
      </html>
      `;
    };
    
  2. 아래의 코드는 클라이언트에서 해당 js 파일에 접근 할 수 있게 만들어준다. (해당 코드를 적어주지 않으면, 404에러가 뜬다.)

    app.use('/src', express.static('./src'));
    

    스크린샷 2023-11-19 오후 3.26.42.png

    해당 main.js에 접근할 수 있게 되었다.

    해당 main.js에 접근할 수 있게 되었다.

    <aside> 💡 main.js는 우리의 첫 자바스크립트 정적 파일이다!!!! 🥰

    </aside>

    <aside> 💡 만약 개발자 도구의 disabled javascript를 키게 되면, 해당 자바스크립트 파일을 실행 시킬수 없게 된다. 다운도 안받아 온다.

    </aside>

hydration 입히기

실행 순서