Vue 프로젝트 생성부터 script setup 이해하기
- Vue 프로젝트 생성
Vue 프로젝트를 시작하려면 기본 툴이 필요함. -> Vite를 사용하여 빠르게 프로젝트를 생성하는 방법으로 진행할 예정
Vite : 빠르고 가벼운 프로젝트 설정 도구로 간결하고 모던 웹 프로젝트 개발에 초점을 맞춰 탄생한 빌드 도구임- 프로젝트 생성
터미널에서 아래 명령어를 입력하여 새로운 Vue 프로젝트를 생성 - 템플릿을 선택 후 아래 과정대로 진행
# 프로젝트 생성 npm create vite@latest first-vue-project # Vue 선택 후 이후 사항 cd first-vue-project npm install npm run dev - 프로젝트 생성
- App.vue 이해하기
- App. vue란?
App.vue는 Vue 프로젝트의 메인 컴포넌트임
vue 앱의 시작점을 담당하며, 다른 컴포넌트를 불러오거나, 기본 레이아웃을 정의하는 역을 함 - 기본 App.vue의 구조
Vite로 생성된 기본 App. vue는 아래와 같음
<script setup> : Vue 3에서 사용되는 새로운 방식으로 컴포넌트 로직을 작성함<script setup> </script> <template> <div> <a href="https://vite.dev" target="_blank"> <img src="/vite.svg" class="logo" alt="Vite logo" /> </a> </div> </template> <style scoped> .logo { height: 6em; padding: 1.5em; } </style>
<template> : HTML과 비슷하게 작성하며, 화면에 표시될 내용을 정의함
<style scoped> : 컴포넌트 내에서만 적용되는 CSS를 작성 - App. vue란?
- script setup
- script setup 이란?
- script setup은 Vue3에서 컴포넌트의 자바스크립트 로직을 작성하는 가장 간결한 방법
- 기존의 export default 방식보다 코드가 짧고, 선언한 변수나 함수를 바로 사용할 수 있음
- 왜 사용하는가?
- 가독성 : 불필요한 코드가 줄어들어 읽기 쉬움
- 간결함 : 변수를 정의하면 바로 템플릿에서 사용할 수 있음
- 기능성 : Vue 3에서 제공하는 최신 기능과 완벽하게 호환이 됨
- 어떻게 사용하는가?
- script setup 안에 변수를 정의하거나 함수를 작성하면 됨
- 예제
<script setup> const message = "Hello, Vue!"; </script> <template> <p>{{ message }}</p> </template> - script setup안이 비어있다면
현재로써는 데이터를 정의할 필요가 없기 때문
예를 들어 라우터를 설정하고 라우터 링크만 추가하는 작업에서는 추가적인 자바스크립트 로직이 필요하지 않을 수 있음
추후 필요해지거나 데이터나 함수가 필요해지면 script setup안에 코드를 작성하면됨. - script setup의 장점 요약
- 코드 간결화 : 변수나 함수를 작성하면 바로 템플릿에서 사용할 수 있음
- Vue 3 호환성 : 최신 Vue 기능과 완벽히 통합됨
- 단순한 구조 : 선언과 사용이 직관적임
- script setup 이란?
Vue Router 설치
Vue Router는 페이지 간 이동을 관리하는 라이브러리로 아래 명령어로 설치할 수 있음
npm install vue-router
기본 설정
1. src/router/index.js 파일 생성 : 프로젝트에 라우터 설정 파일을 추가함
import { createRouter, createWebHistory } from "vue-router";
// 설명
// vue-router에서 createRoute와 createWebHistory를 가져옴
// createRouter : 라우터(페이지 이동규칙)을 만드는 함수
// createWebHistoiry : 브라우저의 히스토리 API를 사용해 URL을 관리하는 모드
const routes = [ // routes는 사용자가 정의한 URL과 컴포넌트 간의 연결 정보를 담는 배열
// 이 배열에 URL 경로 (path)와 컴포넌트(component)를 지정함
{
path: "/", // path : "/" 브라우저의 URL이 /일 때, 즉, "홈페이지"일 때 표시
name: "Home", // name : "Home" 이 경로의 이름 나중에 라우터를 제어할 때 이름으로 참조할 수 있음
component: () => import("../views/Home.vue"), // URL이 /일때 렌더링할 컴포넌트를 지정 동적 로딩 (성능 최적화에 좋음)
},
{
path: "/about",
name: "About",
component: () => import("../views/About.vue"),
},
];
const router = createRouter({ // createRouter() : 라우터를 생성
history: createWebHistory(), // history : createWebHistory() : 브라우저 히스토리 API를 사용해 URL을 관리하도록 설정 (#)을 포함하지 않는 경로가 만들어짐
routes, // 사용자가 정의한 URL 컴포넌트 규칙을 전달
});
export default router;
정리
이 코드는 Vue Router 설정을 정의하는 파일
1. URL 경로와 보여줄 컴포넌트를 연결함
2. Vue Router를 생성하고 내보냄
3. main.js에서 이 라우터를 등록해 앱에서 사용할 수 있게 함
2. 라우터를 메인 앱에 연결
import { createApp } from "vue"; // Vue에서 제공하는 createApp 함수를 가져옴 -> Vue 애플리케이션을 만드는데 사용함
import App from "./App.vue"; // App.vue 파일을 가져옴 -> App.vue는 메인 컴포넌트 -> Vue 애플리케이션의 시작점
import router from "./router"; // router는 우리가 설정한 라우터를 가져오는 것 -> 라우터는 페이지간 이동을 관리함
const app = createApp(App);
// createApp(App)을 이용해 Vue 애플리케이션을 만듬 여기서 App은 앞서 작성한 메인 컴포넌트 App.vue임
// app은 Vue 앱의 인스턴스가 됨.
app.use(router);
// Vue 애플리케이션에 라우터를 연결
// 이 코드가 없으면 라우터가 동작하지 않아서 페이지간 이동이 불가능
app.mount("#app");
// Vue 애플리케이션을 HTML 페이지에 연결
// index.html의 <div id="app"></div> 부분에 우리가 만든 Vue 애플리케이션이 랜더링 됨
3. 페이지 컴포넌트 생성 : view 폴더를 만들고 Home.vue와 About.vue 파일을 생성함
- Home.vue
<template>
<div>
<h1>Home Page</h1>
</div>
</template>
- About.vue
<template>
<div>
<h1>About Page</h1>
</div>
</template>
Pinia 설치
Pinia는 Vue의 상태 관리 라이브러리로, 전역 상태를 쉽게 관리할 수 있게 해줌
npm install pinia
기본설정
1. Pinia 인스턴스 생성 : src/stores/index.js 파일을 생성
import { createPinia } from "pinia";
const pinia = createPinia();
export default pinia;
2. Pinia를 메인 앱에 연결 : main.js에서 Pinia를 앱에 추가함
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import pinia from "./stores"; // Pinia 가져오기
const app = createApp(App);
// createApp(App)
// Vue 애플리케이션을 시작하겠다는 의미
// 이 함수는 Vue에서 앱을 만드는 함수
// 이 함수는 우리가 만든 메인 컴포넌트인 App.vue를 기반으로 새로운 Vue 앱을 만들어줌
app.use(router);
app.use(pinia);
app.mount("#app");
3. 간단한 Store 생성 : src/stores/counter.js 파일을 생성하고 기본 Store를 정의함
import { defineStore } from "pinia";
export const useCounterStore = defineStore("counter", {
state: () => ({
count: 0, // 중앙에서 관리할 초기 데이터
}),
// state에 정의된 데이터는 모든 컴포넌트에서 접근할 수 있음
actions: {
increment() {
this.count++;
},
decrement() {
this.count--;
},
},
});
설명
definStore
Pinia에서 Store를 정의하는 함수로 이 함수를 통해 새로운 Store를 만들고, 상태와 동작을 정의할 수 있음
useCounterStore = defineStore("counter",{ .... });
사용자가 만든 Store를 가져오는데 사용하는 이름
컴포넌트에서 useCounterStore()를 호출하면 여러 Store를 관리할 수 있으므로, 각 Store를 구분하기 위해 이름 (counter)을 지정함
ex) 쇼핑몰에서 상품을 관리하는 productStore, 사용자 로그인 상태를 관리하는 userStore처럼 여러 Store를 구분할 수 있음
4. Store의 사용
src/coponents/Counter.vue 파일 작성
<script setup>
import { useCounterStore } from "../stores/counter"; // Store 가져오기
const counter = useCounterStore(); // Store 인스턴스 생성
</script>
<template>
<section>
<h1>Counter: {{ counter.count }}</h1>
<!-- Store의 state 사용 -->
<button @click="counter.increment">Increment</button>
<!-- Store의 action 호출 -->
<button @click="counter.decrement">Decrement</button>
<!-- Store의 action 호출 -->
</section>
</template>
<style scoped>
section {
margin-top: 2rem;
}
button {
margin: 0.5rem;
padding: 0.5rem 1rem;
font-size: 1rem;
cursor: pointer;
border: 1px solid #646cff;
background-color: white;
color: #646cff;
border-radius: 5px;
}
button:hover {
background-color: #646cff;
color: white;
}
</style>
Home.vue와 About.vue 파일 수정
// Home.vue
<script setup>
import Counter from "../components/Counter.vue"; // Counter 컴포넌트 가져오기
</script>
<template>
<div>
<h1>Home Page</h1>
<Counter />
<!-- Counter 컴포넌트 사용 -->
</div>
</template>
<style scoped>
h1 {
color: #646cff;
}
</style>
// About.vue
<script setup>
import Counter from "../components/Counter.vue"; // Counter 컴포넌트 가져오기
</script>
<template>
<div>
<h1>About Page</h1>
<Counter />
<!-- Counter 컴포넌트 사용 -->
</div>
</template>
<style scoped>
h1 {
color: #42b883;
}
</style>
설명
앞서 언급한 것 처럼 Vue에서 함수를 정의하거나 사용할 시 script setup을 바탕으로 함수를 호출하거나 정의해서 사용할 수 있음.
5. 테스트
npm run dev


페이지가 전환되어도 Counter가 잘 전달 되는 것을 확인할 수 있음.
이제 지금까지 기본기를 익히는 시간이었고, 다음 주 목요일까지 간단한 부동산 홈 페이지를 script setup 방식으로 작성할 예정
'VUE 공부' 카테고리의 다른 글
| 소규모 Project 제작 -2 (2) | 2024.12.03 |
|---|---|
| 소규모 Project 제작 -1 (1) | 2024.11.26 |
| VUE 공부 4일차 (1) | 2024.11.18 |
| VUE 공부 3일차 (0) | 2024.11.18 |
| VUE 공부 2일차 (2) | 2024.11.15 |