- React에 비해 가볍고 빠르게 개발이 필요한 경우 선호
- 최신 릴리즈로 시작한 프레임워크(2014년)
- Virtual Dom 활용으로 양방향 바인딩 처리 등 가능
Single File Component
Vue는 단일 파일 컴포넌트 기반의 프레임워크다. 웹의 view를 구성하는 요소인 HTML, CSS, JavaScript 코드를 .vue 확장자를 가진 하나의 파일에 모두 정의하는 방식으로 적당한 규모의 프로젝트에서 관리의 생산성을 높이고, 협업이 쉬운 것으로 알려져 있다. 뷰 인스턴스(Instance)는 뷰로 화면을 개발하기 위해 필수적으로 생성해야하는 기본 단위이며 new Vue()를 사용하여 뷰 객체를 생성한다.
HTML 기반 템플릿 구문
Vue는 개발한 프론트엔드 파일을 사용자가 볼 수 있도록 브라우저 화면에 렌더링하는 과정에 템플릿이란 문법을 사용한다.
이 템플릿을 구성하는 문법이 HTML 기반으로 이뤄져 있어 이해하기 쉽다.
데이터 바인딩의 기본 형태는 "Mustache" 구문(이중 중괄호)을 사용하는 Text Interpolation(텍스트 보간)이다. Vue가 동작하고 있는 HTML 문서상에서 {{}}로 data 내부에 있는 객체 리터럴 변수에 접근이 가능하다.
HomePage : https://v3-docs.vuejs-korea.org/
Repository : https://github.com/vuejs/vue
개발 환경 설정 및 실행 방법 두 가지
https://lifere.tistory.com/entry/Vuejs-Vue-3-Vuejs-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EC%84%A4%EC%B9%98-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85-CLI-CDN
개발 및 실행 방법1) Vue.js를 CLI 방식(빌드 툴 사용)으로 사용할 수 있다. ---------
Vue 환경 설정 후 실습하기 https://ojava.tistory.com/185
https://data-make.tistory.com/747
개발 및 실행 방법2) Vue.js를 CDN 방식으로 사용하면 빌트 툴 없이 바로 사용할 수 있다. ---------
-- cdn으로 가장 최신 버전의 Vue를 가져옴
<script src="https://unpkg.com/vue@next"></script>
or
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
-- Vue 2.5 버전
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
-- Vue 3.1 버전
<script src="https://unpkg.com/vue@v3.1.1"></script>
웹으로 웹을 구축하는 최신 방법인 StackBlitz Teams(실습환경을 지원) https://stackblitz.com/
ex1)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<title>Vue ex</title>
</head>
<body>
<div id="app">{{message}}</div>
<script type="text/javascript">
new Vue({
el: '#app',
data:{
message : 'Hello world!'
}
});
</script>
</body>
</html>
아래는 Vue 2 코드를 Vue 3로 변환한 예제입니다. Vue 3에서는 앱 인스턴스를 생성할 때 createApp 함수를 사용하고, el 속성 대신 mount 메서드를 사용하여 인스턴스를 DOM 요소에 연결합니다:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Vue 3 CDN 링크 -->
<script src="https://unpkg.com/vue@next"></script>
<title>Vue ex</title>
</head>
<body>
<div id="app">{{ message }}</div>
<script type="text/javascript">
const { createApp } = Vue; // Vue에서 createApp 함수 추출
createApp({
data() {
return {
message: 'Hello world!'
}
}
}).mount('#app'); // #app 요소에 앱 마운트
</script>
</body>
</html>
위 코드는 다음과 같이 동작한다.
- Vue CDN 링크를 Vue 3으로 변경: Vue 3용 CDN 링크를 포함시켜 Vue 3의 모든 기능을 사용할 수 있다.
- createApp 함수 사용: Vue 3에서는 new Vue({}) 대신 createApp({}) 함수를 사용하여 앱 인스턴스를 생성한다.
- mount 메서드로 요소 연결: 이전의 el 속성 대신, mount 메서드를 사용하여 Vue 인스턴스를 원하는 DOM 요소에 연결한다.
Vue 객체 주요 속성
속성 | 설명 |
template | 화면에 표시할 HTML, CSS 등의 마크업 요소를 정의하는 역할. |
methods | 화면 로직 제어와 관계된 메소드를 정의하는 속성, 마우스 클릭 이벤트 처리와 같이 화면의 전반적인 이벤트 또는 화면 동작과 관련된 로직 추가 가능. |
created | 뷰 인스턴스가 생성되자마자 실행할 로직을 정의할 수 있는 역할 |
구글 차트 사용 : https://developers-dot-devsite-v2-prod.appspot.com/chart
<script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.prod.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
*** 라이프사이클 다이어그램 ***
인스턴스 라이프 사이클이란 뷰의 인스턴스가 생성되어 소멸되기까지 거치는 과정을 의미한다.
인스턴스가 생성되고 나면 라이브러리 내부적으로 다음과 같은 과정이 진행된다.
인스턴스의 상태에 따라서 호출할 수 있는 속성들이 있다. 속성마다 개발자가 추가한 커스텀 로직을 Life Cycle Hook 이라고 하며, 뷰 인스턴스는 객체이기 때문에 생명주기를 갖고 있다. 구현할 때 주로 사용하는 라이프 사이클 훅은 아래와 같다.
👓beforeCreate
인스턴스가 생성되고 나서 가장 처음으로 실행되는 라이프 사이클
뷰 인스턴스의 data와 methods 속성이 정의되어 있지 않고 화면 요소(ex. dom)에 접근 불가
👓created
data와 methods 속성 정의되어 있음. 따라서 두 속성 값에 접근 가능
아직 화면 요소에 인스턴스가 부착되기 전이기 때문에 template 속성에 정의된 돔 요소에 접근하는 코드 구현 불가
👓beforeMount
render()함수가 호출되기 직전의 단계로 created 이후에 template 속성에 지정한 마크업 속성을 render() 함수로 변환한 후 el 속성에 지정한 화면 요소에 인스턴스를 부착하기 직전 호출됨
화면에 붙이기 전 실행해야 할 코드 구현
👓mounted
el 속성에서 지정한 화면 요소에 인스턴스가 부착되고 난 후 호출되는 단계로 template 속성에서 정의한 화면 요소에 접근 가능.
화면 요소를 제어하는 코드를 구현하며 DOM에 인스턴스가 부착되자마자 호출되기 때문에 하위 컴포넌트나 외부 라이브러리에 의해 추가된 화면 요소들이 최종 html 코드로 변환되는 시점과 다를 수 있음
👓beforeUpdate
el 속성에서 지정한 화면 요소에 인스턴스가 부착되고 난 후에 인스턴스 속성들이 화면에 치환됨
치환된 값을 $watch 속성으로 감시 (관찰)
관찰하고 있는 데이터가 변경되면 가상 돔을 이용해 화면을 다시 그려야 함. 이때, 그리기 직전 호출되는 단계가 beforeUpdate
변경 예정인 데이터 값을 이용해 작업을 해야할 때 이 단계에서 로직 구현.
변경하는 로직 구현해도 다시 화면에 그려지지는 않음
👓updated
beforeUpdate가 끝나고 화면에 다시 그리고 나면 실행되는 단계로 데이터가 변경되고 화면 요소를 제어하고 싶을 때 이 단계에서 로직이 구현됨. 그러나 beforeUpdate -> updated -> beforeUpdate -> .. 무한루프될 가능성 있음
데이터 값 갱신하는 로직은 beforeUpdate에서 처리하는게 좋음
👓beforeDestroy
뷰 인스턴스가 destroy되기 직전에 호출되는 단계로 아직 인스턴스가 없어지지 않았기 때문에 접근이 가능함.
인스턴스의 데이터 삭제 혹은 인스턴스가 사라지기 직전에 해야하는 작업 구현
👓destroyed
뷰 인스턴스가 destroy 되고 난 후 호출되는 단계로 뷰 인스턴스에 정의한 모든 속성이 제거되고 하위에 선언했던 인스턴스 모두 destroy됨
Django 및 Vue 3를 사용하여 풀 스택 소셜 네트워크 구축 https://www.youtube.com/watch?v=xOxN_7coIDw