5. 카페메뉴 프론트엔드(1)

2024. 1. 6. 17:34언어/java

728x90

전체 흐름도를 코드로 적어 보겠다.

 


프론트엔드 

index.html 파일 (처음 파일 ) 

전체 내용과 외관 , 동작 정의

<!DOCTYPE html>
<html>
    <head> 
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta name="description" content="Node Vue Web">
        <link rel="stylesheet" href="/client/resources/css/style.css">
        <link rel="stylesheet" href="/client/resources/css/stylem.css">
        <script src="/client/resources/js/jquery-2.1.1.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
        <title>카페 메뉴 관리</title>
    </head>

    <body>
        <div id="root"></div>
        <script src="/client/build/bundle.js"></script>
    </body>
</html>

 

하나씩 나누면서 설명 하겠습니다. 

 

        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta name="description" content="Node Vue Web">

 

메타 태그 안에는 웹 페이지에 대한 메타데이터들을 정의

여기서는

문자 인코딩 방법 ,

IE호환성 : <meta http-equiv="X-UA-Compatible" content="IE=edge"> 인터넷 익스플러 가 어떻게 렌더링 되는지 정의

뷰포트 설정 - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 모바일에 어떻게 보여줄 것인가 정의

페이지 설명 - <meta name="description" content="Node Vue Web"> 검색 엔지 결과 페이지에서 스니펫으로 사용 , 보여지는 설명

 

 

        <link rel="stylesheet" href="/client/resources/css/style.css">
        <link rel="stylesheet" href="/client/resources/css/stylem.css">

 

외부 리소스를 연결 하는데 사용 . 두개의 CSS 파일을 연결하여 웹 페이지의 스타일을 정의

 

        <script src="/client/resources/js/jquery-2.1.1.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

두개의 jQuery 라이브러리를 불러오고 있음

 

 jQuery 라이브러리는

. HTML 문서 탐색, 이벤트 처리, 애니메이션 제작, AJAX 통신 등을 간편하게 처리할 수 있도록 도와줍니다.

 

 

 

 

 

    <body>
        <div id="root"></div>
        <script src="/client/build/bundle.js"></script>
    </body>

id가 root

bundle 스크립트를 동적으로 내용을 추가함

 

궁금한점 ? bundle 스크립트를 추가는 누가하고 생성은 자동인가?

 웹팩(Webpack) 같은 모듈 번들러(module bundler)를 사용하여 여러 JavaScript 파일을 하나로 묶은 결과물

 


Header.vue

헤더

 router-link는 Vue Router에서 제공하는 컴포넌트로, 클릭하면 지정된 경로(/cafe.page)로 이동

<template>
  <header>
    <div class="nav">
      <ul>
        <li><router-link to="/cafe.page">메뉴</router-link></li>
      </ul>
    </div>
  </header>
</template>

AppRouter.js

import { createWebHistory, createRouter } from "vue-router";


import Cafe from "../pages/cafe/Cafe.vue";


const routes = [
  /* 카페 */
  { path: "/cafe.page", name: "Cafe", component: Cafe },
];

const AppRouter = createRouter({
  history: createWebHistory(),
  routes,
});

export default AppRouter;

위는 전체 코드이다

 

import { createWebHistory, createRouter } from "vue-router";

첫줄은 Vue.js에서 웹 애플리케이션의 라우팅을 관리하는 라이브러리

라우팅이란 웹 애플리케이션의 페이지 간이동을 관리하는것이다.

 

개발자가 직접 라우팅을 효과적으로 하기위해서 이 라이브러리를 불러옴

import Cafe from "../pages/cafe/Cafe.vue";

cafe.vue 컴포넌트를 불러온다. 

 

const routes = [
  { path: "/cafe.page", name: "Cafe", component: Cafe },
];

라우터 (네트워크 두개 연결 시켜주는거 )정보를 담고

path - url경로

name - 해당 라우터 이름

component - 해당경로에 접근 했을때 보여줄 컴포넌트

 

const AppRouter = createRouter({
  history: createWebHistory(),
  routes,
});

createRouter 함수를 사용하여 라우터 인스턴스를 생성

history , routes 라는 두가지 정보를 가진다. 

'history'는 웹 브라우저의 히스토리 모드를 사용하고, 'routes'는 위에서 정의한 라우트 정보를 사용합니다.

 

궁금한점 ? 웹 브라저의 히스토리 모드가 뭐야?

히스토리 모드는 웹 애플리케이션에서 페이지를 넘어갈 때마다 URL이 변경되도록 하는 기능

 

 

export default AppRouter;

이걸적게 되면 밑에 흐름

index.js 파일 에서는 appRouter라는 이름으로 불러와서 vue 애플리케이션을 적용

이렇게 해서 vue 는 vue Router의 설정을 알게되고 이를 통해 애플리케이션의

페이지 간 이동을 관리


index.js 코드 

import { createApp } from 'vue';

import AppRouter from './pages/AppRouter.js';
import App from './pages/App.vue';

const vue = createApp(App).use(AppRouter).mount('#root');

이 코드는 'vue'라는 라이브러리에서 'createApp'이라는 함수를 불러오는 역할을 합니다. 

'createApp' 함수는 새로운 Vue 애플리케이션을 만드는 데 사용됩니다.

 

 

'AppRouter.js'는 웹사이트의 여러 페이지를 관리하는 라우팅 설정을 담고 있고, 'App.vue'는 웹사이트의 가장 기본이 되는 틀을 담고 있는 파일입니다.

 

마지막 코드는  'App.vue'를 기반으로 한 새로운 Vue 애플리케이션을 만들고, 'AppRouter.js'의 라우팅 설정을 적용하고, 이 애플리케이션을 웹페이지에 붙이는 역할을 합니다.


App.vue

<template>
    <div>
      <Header ></Header>
       <div class="main-warp">
          <router-view/>
       </div>
    </div>
 </template>
 
 <script>
import Header from '../layout/Header.vue';
 
 const App = {
    data: () => {
       return {
       }
    },
    methods: {},
    watch: {},
    computed: {},
    components: {
      Header: Header
    },
    mounted: () => {
       console.log('Vue mounted');
    }
 }
 
 export default App;
 </script>

 <style scoped>
</style>

전체 코드입니다.

 

 

 

<template>
    <div>
      <Header ></Header>
       <div class="main-warp">
          <router-view/>
       </div>
    </div>
 </template>

Vue.js에서 웹 페이지의 기본 구조를 정의하는 부분

<Header ></Header>: Header.vue 컴포넌트를 사용하여 웹페이지의 헤더 부분을 그리는 것

 

 const App = {
    data: () => {
       return {
       }
    },
    methods: {},
    watch: {},
    computed: {},
    components: {
      Header: Header
    },
    mounted: () => {
       console.log('Vue mounted');
    }
 }

 

 

 

 

data: 컴포넌트의 데이터를 정의합니다. 이 데이터는 컴포넌트 내부에서 사용될 수 있습니다.
methods: 컴포넌트에서 사용될 메서드를 정의합니다.
watch: 데이터의 변화를 감시하고, 변화가 있을 때마다 특정 로직을 실행합니다.
computed: 계산된 속성을 정의합니다. 데이터의 변화에 따라 자동으로 값이 갱신됩니다.
components: 이 컴포넌트에서 사용할 다른 컴포넌트들을 등록합니다. 여기서는 Header 컴포넌트를 등록하고 있습니다.

 


 

index.html: 이 파일은 애플리케이션의 기본 HTML 구조를 제공하므로, 먼저 작성하는 것이 좋습니다. 이 파일에서 애플리케이션의 루트 요소를 정의합니다.
App.vue: 이 파일은 애플리케이션의 루트 컴포넌트이므로, 애플리케이션의 기본 레이아웃을 정의합니다. 먼저 이 파일을 작성하면 전체 애플리케이션의 구조를 미리 설정할 수 있습니다.
기타 컴포넌트: App.vue에서 사용될 다른 Vue 컴포넌트를 작성합니다. 이 단계에서는 각 컴포넌트의 구조와 기능을 정의합니다. 예를 들어, Header.vue 같은 컴포넌트를 이 단계에서 작성할 수 있습니다.
AppRouter.js: 이제 각각의 라우트에 어떤 컴포넌트를 연결할지 정의하는 라우터 설정을 작성합니다. 이 파일에서는 각 경로에 대한 컴포넌트를 지정하고, Vue Router 인스턴스를 생성합니다.
index.js: 마지막으로, 애플리케이션의 시작점인 index.js를 작성합니다. 이 파일에서 Vue 애플리케이션을 생성하고, 라우터를 애플리케이션에 연결하며, 애플리케이션을 index.html의 루트 요소에 붙입니다.

 

이어서 cafe.vue 다음장에 설명

728x90