Vue.js 기본 문법
Template Syntax보간법 : 머스태쉬 구문(중괄호 2개를 겹쳐 씀)안에 데이터를 텍스트 형태로 렌더링함{{ message }} //message 안에 데이터를 동적으로 할당   바인딩 :v-bind 디렉티브를 사용해 HTML 태그에 적는 속성들을 동적으로 바인딩할 수 있다. // dynamicId로 선언해 둔 값이 id 값으로 저장됨    Dynamic Data Binding데이터를 동적으로 바꿔가며 HTML 속성을 조작하거나 활용할 수 있다. 단방향 바인딩 : 동적인 데이터를 화면 상에 반영되도록 하는 바인딩.양방향 바인딩 : 동적인 데이터를 화면 상에 반영되도록 하고, 화면 상에 입력된 값이 데이터를 바꿀 수도 있음.       Event Handlingv-on 디렉티브를 사용하여 DOM 이..
2024.11.06
Front: Vue란?, CSR과 SSR, Vue 기본 구조
Vue.js 란?JavaScript의 프레임워크 중 하나.  (react.js, angular 등 다른 프레임워크들도 있음)다른 프레임워크에 비해 직관적이기 때문에 배우기가 더 용이함템플릿 기반의 구문을 사용해 HTML과 JavaScript를 명확히 분리 가능 (가독성 좋음)         CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)  CSR :장점-  초기 로딩 후에는 모든 렌더링이 클라이언트 측에서 처리됨 -> 빠르게 느껴짐-  서버 부하가 감소, 서버는 단지 데이터(JSON)만 전송하면 됨단점- 애플리케이션의 자바스크립트 전체를 다운로드해야하므로 초기 속도는 느릴 수 있음-  검색 엔진이 제대로 반영되지 못할 수 있음SSR :장점-  서버에서 H..
2024.11.05
Front: AJAX란, 비동기와 동기, 비동기 동작 순서, XMLHttpRequest, Promise
AJAX란?Asynchronous JavaScrpt and XML비동기적인 방식으로 서버와 통신새로고침을 하지 않아도 서버와 통신해 웹페이지를 갱신할 수 있다.한번에 서버의 데이터를 모두 받아오기 때문에 처음엔 느리지만, 이후로는 빠르게 처리할 수 있음서버 입장에서는 부하가 감소하는 효과클라이언트 입장에서는 더 빠르게 느낌 AJAX의 동작 방식: 동기 vs 비동기 동기 :- 요청을 보낸 이후 서버로부터 응답을 받아야 다음 작업을 진행.- 코드가 단순하고 직관적이기에 개발자 입장에서는 더 용이할 수 있음- 하지만 한 가지 요청이 막히면, 다음 요청까지 막혀 멈춰버리는 현상 발생비동기 :- 페이지를 처음 불러들일 때, 대부분의 데이터를 모두 받아둠.- 어떠한 요청이 막혀도, 바로 다음 작업을 진행할 수 있기..
2024.11.03

Vue.js 기본 문법

친환경 개발자
|2024. 11. 6. 23:51

Template Syntax

  • 보간법 : 
    머스태쉬 구문(중괄호 2개를 겹쳐 씀)안에 데이터를 텍스트 형태로 렌더링함
<span>{{ message }}</span>	//message 안에 데이터를 동적으로 할당

 

 

 

  • 바인딩 :
    v-bind 디렉티브를 사용해 HTML 태그에 적는 속성들을 동적으로 바인딩할 수 있다.
<div v-bind:id="dynamicId"></div>	// dynamicId로 선언해 둔 값이 id 값으로 저장됨

 

 

 

 

Dynamic Data Binding

데이터를 동적으로 바꿔가며 HTML 속성을 조작하거나 활용할 수 있다.

 

  • 단방향 바인딩 : 동적인 데이터를 화면 상에 반영되도록 하는 바인딩.


  • 양방향 바인딩 : 동적인 데이터를 화면 상에 반영되도록 하고, 화면 상에 입력된 값이 데이터를 바꿀 수도 있음.

<input v-model="message" />



 

 

 

 

 

 

 

Event Handling

v-on 디렉티브를 사용하여 DOM 이벤트를 듣고, 그에 대한 반응으로 메소드를 실행하는 기능

 

// 이벤트 리스너 추가
<button v-on:click="handleClick">Click me</button>


//////////////////////////////////////////////////
// 자바스크립트 파트에서 메소드 정의
methods: {
  handleClick() {
    alert('Button clicked!');
  }
}

 

 

 

 

Event Handling

 

폼 입력 바인딩은 v-model을 사용하여 입력 폼 요소와 애플리케이션 데이터 사이의 양방향 바인딩을 생성

 

// 텍스트 입력
<input v-model="username" placeholder="Enter your name">

// 체크박스
<input type="checkbox" v-model="checked">


// 라디오 버튼
<input type="radio" v-model="picked" value="One">
<input type="radio" v-model="picked" value="Two">


// 셀렉트 박스
<select v-model="selected">
  <option disabled value="">Please select one</option>
  <option>A</option>
  <option>B</option>
</select>



<script src="https://cdn.jsdelivr.net/npm/vue@3.2.37/dist/vue.global.prod.min.js"></script>
    <script>
      // Vue 애플리케이션을 생성하고 관리합니다.
      const { createApp, ref } = Vue;

      const app = createApp({
        setup() {
        	const username = ref('');	// 텍스트 입력 값이 여기에 들어감
            const checked = ref(false);	// 체크박스 true/false 값이 여기에 들어감
			const picked = ref('');		// 라디오버튼 선택 값이 여기에 들어감
            const selected = ref('');	// 셀렉트박스 선택 값이 여기에 들어감

          // setup 함수에서 반환하는 객체는 템플릿에서 사용됩니다.
          return { username, checked, picked, selected };
        },
      });

      // Vue 인스턴스를 #app 요소에 마운트합니다.
      app.mount('#app');
    </script>
</body>
</html>

Vue.js 란?

  • JavaScript의 프레임워크 중 하나.  (react.js, angular 등 다른 프레임워크들도 있음)
  • 다른 프레임워크에 비해 직관적이기 때문에 배우기가 더 용이함

  • 템플릿 기반의 구문을 사용해 HTML과 JavaScript를 명확히 분리 가능 (가독성 좋음)

 

 

 

 

 

 

 

 

 

CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)

 

  1. CSR :

    장점

    -  초기 로딩 후에는 모든 렌더링이 클라이언트 측에서 처리됨 -> 빠르게 느껴짐

    -  서버 부하가 감소, 서버는 단지 데이터(JSON)만 전송하면 됨


    단점

    - 애플리케이션의 자바스크립트 전체를 다운로드해야하므로 초기 속도는 느릴 수 있음

    -  검색 엔진이 제대로 반영되지 못할 수 있음


  2. SSR :


    장점

    -  서버에서 HTML을 완성해 보내기 때문에, 검색엔진 최적화에는 더 적절

    - 첫 페이지에서 모든 정보를 다운로드할 필요가 없으므로 첫 페이지 로딩은 더 빠


    단점

    - 모든 요청이 서버에서 렌더링되므로 부하가 증가

    - 클라이언트와 서버 간 상태를 동기화하는 것이 복잡할 수 있음.

 



 

 

 

 

 

 

 

기본 구조

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <title>FirstVueApp</title>
    ///////////////////////////////////////
    // Vue를 사용하기 위해 필수. CDN방식 
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  </head>

  <body>
    <div id="app">
      <h1>{{ message }}</h1>
      <button v-on:click="count++">Count is: {{ count }}</button>
    </div>
    
    ///////////////////////////////////////////
    <script>
    
      // Vue 객체에서 createApp과 ref를 구조분해 할당으로 생성
      const { createApp, ref } = Vue;

	  // createApp 함수 호출하여 Vue 앰 인스턴스를 생성
      const app = createApp({	
        setup() {	// <- Composition API에서 컴포넌트의 반응형 상태와 함수를 정의
        
          // ref로 반응형 데이터 생성
          const message = ref("Hello vue");
          const count = ref(0);
		
          // setup함수에서 반환하는 객체들. 템플릿에서 사용하려면 반드시 반환해주어야 함
          return {
            message,
            count,
          };
        },
      });

      app.mount("#app");
    </script>
    /////////////////////////////////////////////
  </body>
</html>

 

 

 

createApp 함수를 사용해 앱 객체를 생성하고, 반응형 데이터 생성을 위해 ref객체를 생성한다.

 

const {createApp, ref} = Vue   -> 구조분해할당으로 객체 생성

 

 

 

 

 

템플릿 영역에서의 unwrap

 

 

Vue에서는 동적으로 화면을 바꾸고, 렌더링하기 위해

 

ref() 를 사용해 반응형 데이터를 생성한다.

 

즉 ref() 객체 안에 값을 집어 넣는 것.

 

이를 자바스크립트 안에서 값을 참조하기 위해선

 

.value를 사용해 값을 참조할 수 있고,

 

템플릿(HTML) 영역에서는 알아서 unwrap해주기 때문에 .value를 사용할 필요가 없다!!

 

 

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8" />
  <title>FirstVueApp</title>
  ///////////////////////////////////////
  // Vue를 사용하기 위해 필수. CDN방식
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>

<body>
  <div id="app">
    <h1>{{ message }}</h1>
    <button v-on:click="count++">Count is: {{ count }}</button>
  </div>

  <script>
    const App = {
      setup() {
        const count = ref(0);

        function increment() {
          count.value++;
        }

        return { count, increment }
      }
    };

    const app = createApp(App);
    app.mount('#app');
  </script>
</body>

 

AJAX란?

  • Asynchronous JavaScrpt and XML

  • 비동기적인 방식으로 서버와 통신

  • 새로고침을 하지 않아도 서버와 통신해 웹페이지를 갱신할 수 있다.

  • 한번에 서버의 데이터를 모두 받아오기 때문에 처음엔 느리지만, 이후로는 빠르게 처리할 수 있음

  • 서버 입장에서는 부하가 감소하는 효과

  • 클라이언트 입장에서는 더 빠르게 느낌

 

AJAX의 동작 방식: 동기 vs 비동기

 

  1. 동기 :

    - 요청을 보낸 이후 서버로부터 응답을 받아야 다음 작업을 진행.

    - 코드가 단순하고 직관적이기에 개발자 입장에서는 더 용이할 수 있음

    - 하지만 한 가지 요청이 막히면, 다음 요청까지 막혀 멈춰버리는 현상 발생




  2. 비동기 :

    - 페이지를 처음 불러들일 때, 대부분의 데이터를 모두 받아둠.

    - 어떠한 요청이 막혀도, 바로 다음 작업을 진행할 수 있기 때문에 빠른 반응속도 유도할 수 있음

    - 코드가 복잡해져 개발 시 어려울 수 있음


AJAX는 비동기 방식!



 

 

비동기 처리 순서

AJAX의 비동기적 처리는 XMLHttpRequest 객체를 이용하거나 Promise 방식을 사용해 진행된다.

1. XMLHttpRequest 객체를 생성하고, 요청을 초기화한다.

 

2. 요청을 서버로 비동기적으로 전송한다.

 

3. 서버로부터 응답 대기. 그동안 사용자는 페이지 다른 부분을 사용할 수 있다.

 

4. 응답이 도착하면 지정해둔 콜백 함수가 실행돼 응답 처리.

 

 

 

XMLHttpRequest 방식

XMLHttpRequest는 서버와 HTTP 통신을 가능하게 하는 객체이다.

 

var xhr = new XMLHttpRequest();	// 객체 생성

xhr.open("GET", "data.json", true); // 메서드와 URL 설정(초기화)

// 요청 성공 시 발생할 콜백함수를 지정
xhr.onload = function () {
	// 서버 응답 결과를 처리할 콜백함수
    if (xhr.status === 200) {
        console.log("Received: " + xhr.responseText);
    }
};
// 요청 전송
xhr.send();

 

 

 

 

Promise 방식

Promise는 비동기 작업을 더 쉽게 처리하도록 하는 객체.

동기 코드처럼 읽고 쓸수 있어 가독성도 상승함.

 

 

function fetchData() {
	// resolve : 요청 성공 시 호출할 함수
    // reject : 요청 실패 시 호출할 함수
    return new Promise((resolve, reject) => {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "data.json");
        xhr.onload = function () {
            if (xhr.status === 200) {
                resolve(xhr.responseText);
            } else {
                reject("Failed to fetch data");
            }
        };
        xhr.onerror = function () {
            reject("Network error");
        };
        xhr.send();
    });
}

fetchData().then(data => console.log(data)).catch(err => console.error(err));