Programming Language/Vue

[Vue] 01)Basic & Basic 실습

Sergemeow 2023. 4. 27. 16:39

개요

  • Front-end 개발은 Web App 또는 Web Site의 UI/UX를 제작하고 관리하는 과정
  • Front-end 프레임워크와 라이브러리(React, Angular, Vue.js)를 사용하여 개발 효율성을 높잉고, Web App의 복잡성을 관리
  • Front-end 개발에 사용되는 주요 기술은 HTML, CSS, JavaScript

Web App 이란?

  • 웹 브라우저에서 구동되는 서비스
  • 웹 페이지가 그대로 보이는 것이 아닌 디바이스에 설치된 App처럼 보이는 것
  • 웹 페이지가 디바이스에 맞는 적절한 UX/UI로 표현되는 형태

SPA(Single Page Application)

  • 이전까지는 사용자의 요청에 대해 적절한 페이지 별 template을 반환
  • SPA는 서버에서 최초 1장의 HTML만 전달받아 모든 요청에 대응하는 방식
    • CSR(Client Side Rendering) 방식으로 요청을 처리하기 때문

[참고] Server Side Rendering

  • 기존의 요청 처리 방식
  • Server가 사용자의 요청에 적합한 HTML을 응답

CSR이란

  • 최초 하나의 HTML을 받아옴
  • 각 요청에 대한 대응을 JavaScript를 사용하여 필요한 부분만 다시 렌더링
    • 필요한 페이지를 서버에 AJAX로 요청
    • 서버는 화면을 그리기 위해 필요한 데이터를 JSON 방식으로 전달
    • JSON 데이터를 JavaScript로 처리, DOM 트리에 반영(렌더링)

CSR의 장점

  • 모든 HTML 페이지를 서버로부터 받아서 표시하지 않아도 됨
    • 클라이언트-서버간 통신 즉, 트래픽 감소
    • 트래픽 감소 - 응답 속도가 빨라짐
  • 문서 전체를 매번 새로고침하는 것이 아니라 필요한 부분만 고쳐나가므로 각 요청이 끊김없이 진행
    • UX 향상
  • BE와 FE의 작업 영역을 명확히 분리 할 수 있음
    • 협업이 용이

반면,

  • 첫 구동 시 필요한 데이터가 많으면 많을수록 최초 작동 시작까지 오랜 시간이 소요
  • Naver, Netflix, Disney+ 등 모바일에 설치된 Web-App을 실행하게되면 잠깐의 로딩시간이 필요
  • 검색 엔진 최적화(Search Engine Optimization)가 어려움
    • 서버가 제공하는 것은 텅 빈 HTML
    • 내용을 채우는 것은 AJAX 요청으로 얻은 JSON 데이터로 클라이언트(브라우저)가 진행
  • 대체적으로 HTML에 작성된 내용을 기반으로 하는 검색 엔진에 빈 HTML을 공유하는 SPA 서비스가 노출되기는 어려움

Front-end Framework = HTML+CSS+JS를 더 편하게 작업하기 위한 틀


Vue

MVVM Pattern

  • 소프트웨어 아키텍처 패턴의 일종
  • 마크업 언어로 구현하는 그래픽 사용자 인터페이스의 개발을 Backend(model)로부터 분리시켜 view가 어느 특정한 모델 플랫폼에 종속되지 않도록 함
  • View - 우리 눈에 보이는 부분 = DOM
  • Model - 실제 데이터 = JSON
  • View Model(Vue)
    • View를 위한 Model
    • View와 연결(binding)되어 Action을 주고 받음
    • Model이 변경되면 View Model도 변경되고 바인딩된 View도 변경됨
    • View에서 사용자가 데이터를 변경하면 View Model의 데이터가 변경되고 바인딩된 다른 View도 변경됨

MVVM Pattern 정리

  • MVC 패턴에서 Controller를 제외하고 View Model을 넣은 패턴
  • View는 Model을 모르고, Model도 View를 모름
    • DOM은 Data를 모름. Data도 DOM을 모름(독립성 증가, 적은 의존성)
  • View에서 데이터를 변경하면 View Model의 데이터가 변경되고, 연관된 다른 View도 함께 변경됨

Vue instance

<script>
	const vm = new Vue()
	console.log(vm)
<script>

el(element)

  • Vue instance와 DOM을 mount(연결)하는 옵션
    • View와 Model을 연결하는 역할
    • HTML id 혹은 class와 마운트 가능
  • Vue instance와 연결되지 않은 DOM 외부는 Vue의 영향을 받지 않음
    • Vue 속성 및 메서드 사용 불가
<script>
	const app = new Vue({
		el: '#app'
	})
	console.log(app)
</script>
  • 새로운 Vue instance 생성
  • 생성자 함수 첫번째 인자로 Object 작성
  • el 옵션에 #app 작성 = DOM 연결
  • 인스턴스 출력
<script>
	const app = new Vue({
		el: '#app'
	})
	console.log(app)
</script>
  • Vue와 연결되지 않은 div 생성
    • 두 div 모두에 {{message}} 작성
  • message 속성이 정의되지 않았다는 경고와 {{message}}가 그대로 출력되는 차이

data

  • Vue instance의 데이터 객체 혹은 인스턴스 속성
  • 데이터 객체는 반드시 기본 객체 {}(Object) 여야 함
  • 객체 내부의 아이템들은 value로 모든 타입의 객체를 가질 수 있음
  • 정의된 속성은 interpolation{{}}을 통해 view에 렌더링 가능함
  • Vue instance에 data 객체 추가
  • data 객체에 message 값 추가
  • 추가된 객체의 각 값들은 this.message 형태로 접근 가능
<script>
	const app = new Vue({
		el: '#app',
		data: {
			message: 'Hello, Vue'
		},
	})
</script>

method

  • Vue instance의 method들을 정의하는 곳
  • methods 객체 정의
    • 객체 내 print method 정의
    • print method 실행 시
    • Vue instance의 data내 message 출력
  • 콘솔창에서 app.print() 실행
<script>
	const app = new Vue({
		el: '#app',
		data: {
			message: 'Hello, Vue!'
		},
		methods: {
			print: function() {
				console.log(this.message)
			},
		}
	})
</script>
  • method를 호출하여 data 변경 가능
    • 객체 내 bye method 정의
    • print method 실행 시
    • Vue instance의 data내 message 변경
  • 콘솔창에서 app.bye() 실행
    • DOM에 바로 변경된 결과 반영
    • Vue의 강력한 반응성(reactivity)

[Caution]

  • 메서드를 정의할 때, Arrow Function을 사용하면 안됨
  • Arrow Function의 this는 함수가 선언될 때 상위 스코프를 가리킴
  • 즉 this가 상위 객체 window를 가리킴
  • 호출은 문제없이 가능하나 this로 Vue의 data를 변경하지 못함

 

  • MBTI 타입을 인풋하면 해당 타입에 대한 설명이 있는 페이지로 이동됨

MBTI 검사기

    const app = new Vue({
      el: '#app',
      data: {
        allTypes : ['istj', 'isfj', 'infj', 'intj', 'istp', 'isfp', 'infp', 'intp', 'estp', 'esfp', 'enfp', 'entp', 'estj', 'esfj', 'enfj', 'entj'],
        mbtiType : 'mbtiType'
      },
      methods: {
        redirection: function(mbtiType, allTypes){
          if(allTypes.includes(mbtiType)){
            window.open(`<a href=https://www.16personalities.com/ko/성격유형-$>https://www.16personalities.com/ko/성격유형-$</a>{mbtiType}`)
          }
        }
      }
    })
  
  • 입력되는 글귀가 합해져서 페이지에 출력

테스트

첫 번째 입력 : {{ message1 }}

두 번째 입력 : {{ message2 }}

합산 입력 : {{message1}} {{message2}}
   var app = new Vue({
        el : '#app',
        data: {
          message1: 'message1',
          message2: 'message2',
        }
   });

'Programming Language > Vue' 카테고리의 다른 글

[Vue] 06)Data Processing  (0) 2023.05.03
[Vue] 05)Vue Component 활용 연습  (0) 2023.05.03
[Vue] 04)Vue CLI  (0) 2023.05.03
[Vue] 03)심화 문법  (0) 2023.05.03
[Vue] 02)기본 문법  (0) 2023.05.03