FrontEnd/Vue

Vue.js란?

Raconer 2023. 4. 15. 20:14
728x90

참고 문서

do it vue.js

Vue.js란?

웹페이지 화면을 개발하기 위한 Frontend 프레임워크이다.
기존 웹 개발자 뿐 아니라 HTML, CSS, Javascript 기초만 알아도 개발하기 쉬운 Frontend 프레임워크이다.

창시자

에반 유(Evan You)

설명

뷰 코어 라이브러리는 화면단 데이터 표현에 관한 기능들을 중점적으로 지원하지만 프레임워크의 기능인 라우터, 상태 관리, 테스팅 등을 쉽게 결합할수 있는 형태로도 제공됩ㄴ다. 즉. 라이브러리 역할 뿐 아니라 프레임워크 역할도 할수있다.

장점

  1. 배우기가 쉽다.
  2. 리액트와 앵귤러에 비해 성능이 우수하고 빠르다.
    • Vue 제작팀에서 리액트와 앵귤러를 가지고 같은 테스트 케이스에서 성능을 비교한 결과 vue가 가장 빨랐다.
  3. 리액트의 장점과 앵귤러의 장점을 갖고 있다.
    • 앵귤러의 데이터 바인딩 특성
    • 리액트의 가상 돔 기반 렌더링 특징

Vue.js 특징

UI 화면단 라이브러리

MVVM(Model, View, ViewModel) 패턴의 뷰 모델에 해당하느 화면단 라이브러리 이다.

용어 설명

  • 뷰(View) : 사용자에게 보이는 화면
  • 돔(Dom) : HTML 문서에 들어가는 요소(태그, 클래스, 속성 등)의 정보를 담고있는 데이터 트리
  • 돔 리스너 (Dom Listener) :돔의 변경 내역에 대해 즉각적으로 반응하여 특정 로직을 수행하는 장치
  • 모델(Model) : 데이터를 담는 용기. 보통은 서버에서 가져온 데이터를 자바스크립트 객체 형태로 저장
  • 데이터 바인딩 (Data Binding) : 뷰(View)에 표시되는 내용과 모델의 데이터를 동기화
  • 뷰 모델(View Model) : 뷰와 모델의 중간 영역. 돔 리스너와 데이터 바인딩을 제공하는 영역

컴포넌트 기반 프레임워크

컴포넌트란 마치 레고 블록과 같습니다. 레고 블록을 잘 조합해서 쌓으면 원하는 모형을 만들수 있듯이 뷰의 컴포넌트를 조합하여 화면을 구성할수있습니다.

기본 Vue.js 코드

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue Sample</title>
  </head>
  <body>
    <div id="app">
      {{message}}
      <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
      <script>
        // 인스턴스
        new Vue({
          el: "#app", // el 속성
          data: {
            // 데이터 속성
            message: "Hello Vue.js!",
            // template : 화면에 표시할 HTML, CSS등의 마크업 요소를 정의하는 속성, 뷰의 데이터 및 기타 속성 들도 함께 화면에 그릴수 있으며 05장 뷰 템플리셍서 자세히 설명합니다.
            // methods : 화면 로직 제어와 관계된 메서드를 정의하는 속성, 마우스 클릭 이벤트 처리와 같이 화면의 전반적인 이벤트와 화면 동작과 관련된 로직을 추가할 수있습니다.
            // created : 뷰 인스턴스가 생성되자마자 실행할 로직을 정의 할 수 있는 속성, 뷰 인스턴스 라이프 사이클 부분에서 추가로 설명합니다.
          },
        });
      </script>
    </div>
  </body>
</html>

뷰 인스턴스 유효 범위

뷰 인스턴스를 생성하면 HTML의 특정 범위 안에서만 옵션 속성들이 적용되어 나타납니다. 이를 인스턴스 유효범위라고 합니다.
지역 컴포넌트와 전역 컴포넌트 차이를 알기 위해 필요한 개념입니다.

뷰 인스턴스 속성 적용 과정

  1. 뷰 라이브러리 파일 로딩
  2. 인스턴스 객체 생성(옵션 속성 포함)
  3. 특정 화면 요소에 인스턴스를 붙임
  4. 인스턴스 내용ㅇ이 화면 요소로 변환
  5. 변환된 화면 요소를 사용자가 최종 확인

뷰 인스턴스 라이프 사이클 속성

created, beforeCreate, beforeMount, mounted 등 인스턴스의 생성, 변경, 소멸과 관련되어 총 8개가 존재 한다.

뷰 라이프 사이클 다이어 그램 (1.생성 -> 2.부착 -> 3.갱신 -> 4.소멸)

  1. 생성단계 : -> 인스턴스 생성
  2. 부착단계 : -> 이벤트 및 라이프 사이클 초기화 -> beforeCreate -> 화면에 반응성 주입 -> created -> el, template송성 확인 -> template 속성 내용을 render()로 변환 -> beforeMount -> $el 생성후 디 속성값을 대입 -> mounted -> 인스턴스를 화면에 부착
  3. 갱신단계 : -> 인스턴스의 데이터 변경 -> beforeUpdate -> 화면 재 렌더링 및 데이터 갱신 -> upload -> 인스턴스 내용 갱신
  4. 소멸단계 : -> 인스턴스 접근 가능 -> beforeDestroy -> 컴포넌트, 인스턴스, 디렉티브 등 모두 해제 -> destroyed -> 인스턴스 소멸

라이플 사이클 속성

  • beforeCreate
    • 인스턴스 생성후 최초 실행
    • data, methods 속성 아직 정의 X
    • 돔 접근 X
  • created
    • data, methods정의 (this.data or this.fetchData() 등과 같은 로직을 이용하여 data, methods에 접근 하여 로직 실행 가능)
    • 화면에 부착 전 이기 때문에 templates는 접근 X
    • 서버에 데이터를 요청하여 받아 오는 로직 수행하기 적합하다.
  • beforeMount
    • template 속성에 지정한 마크업 속성을 render()함수로 변환한 후 el 속성에 지정한 화면 요소에 인스턴스를 부착하기 전에 호출되는 단계
    • render() 함수가 호출되기 직전의 로직을 추가 하기 좋다.
  • mounted
    • el 속성에서 지정한 화면 요소에 인스턴스 부착 하면 호출
    • template속성에 정의한 화면 요소에 접근 할수 있어 화면 요소를 제어 하는 로직을 수행하기 좋다.
    • 단 돔에 인스턴스가 부착 되자 마자 호출되기 때문에 하위 컴포넌트나 외부 라이브러리에 의해 추가된 화면 요소들이 최종 HTML코드로 변환되는 시점과 다를수있다.
  • beforeUpdate
    • el 속성에서 지정한 화면 요소에 인스턴스가 부착되고 나면 인스턴스에 정의한 속성들이 화면에 치환됩니다.
    • 치환된 값은 뷰의 반응성을 제공하기 위해 $watch속성으로 감시 한다. 이를 데이터 관찰이라 한다.
    • 데이터 관찰시 데이터가 변경되면 가상 돔으로 화면을 다시 그리기 전에 호출되는 단계이며, 변경 예정인 새 데이터에 접근 할 수있어 변경 예정 데이터의 값과 관련된 로직을 미리 넣을수있다. 만약 여기에 값을 변경하는 로직을 넣더라도 화면이 다시 그려지지 않는다.
  • updated
    • 데이터가 변경되고 나서 가상 돔으로 다시 화면을 그리고 나면 실행되는 단계이다.
    • 데이터 변경으로 인한 화면 요소 변경 까지 완료된 시점 이므로, 데이터 변경 후 화면 요소 제어와 관련된 로직을 추가하기 좋은 단계이다.
    • 이 단계에서 데이터를 변경하면 무한 루프에 빠질수있기때문에 변경시 Computed, watch와 같은 속성을 사용해야한다.
      • 따라서 데이터 값을 갱신하는 로직은 가급적이면 beforeUpdate에 추가 하고, updated에서는 변경 데이터의 화면 요소와 관련된 로직을 추가 하는것이좋다.
  • beforeDestroy
    • 뷰 인스턴스가 파괴되기 직전에 호출되는 단계
    • 아직 인스턴스에 접근 할수있다.
    • 따라서 뷰 인스턴스의 데이터를 삭제 하기 좋은 단계
  • destroyed
    • 뷰 인스턴스가 파괴되고 나서 호출되는 단계
    • 뷰 인스턴스에 정의한 모든 속성이 제거되고 하위에 선언한 인스턴스들 또한 모두 파괴 된다.
728x90

'FrontEnd > Vue' 카테고리의 다른 글

Vue.js Module  (0) 2023.04.15
Vue.js 프로젝트 생성  (0) 2023.04.15
[Vue.js] Router 기초  (0) 2023.04.15
[Vue.js] 컴포넌트 등록  (0) 2023.04.15
Vue.js + spring 프로젝트 생성  (0) 2023.04.15