본문 바로가기
홈페이지

VUE 1일차-(1)

by 초코몽몽 2025. 2. 22.
728x90

📌 Vue 기본 개념 이해

1. Vue.js란?

Vue.js(뷰)는 프론트엔드 프레임워크로, 웹 애플리케이션의 UI(User Interface)를 만들기 위해 사용돼.
React나 Angular 같은 프레임워크와 비슷하지만, 더 가볍고 배우기 쉬운 구조를 가지고 있어.

✅ Vue의 주요 특징
반응형(Reactivity): 데이터가 변경되면 UI도 자동으로 업데이트됨
컴포넌트 기반(Component-Based): UI를 작은 블록(컴포넌트) 단위로 재사용 가능
가상 DOM(Virtual DOM) 사용: 성능 최적화
쉽고 유연한 학습 곡선: HTML, CSS, JS 기본만 알면 빠르게 배울 수 있음

2. MVVM 패턴

Vue는 MVVM(Model-View-ViewModel) 아키텍처 패턴을 기반으로 동작해.

  • Model: 데이터 (state)
  • View: 사용자 화면 (HTML)
  • ViewModel: Model과 View를 연결하는 중간 역할 (Vue 인스턴스)

예를 들어, 사용자가 입력한 데이터를 화면에 표시할 때, Model이 바뀌면 자동으로 View도 바뀌어!

3. Vue 2 vs Vue 3 차이점

현재 Vue 3이 최신 버전이야. Vue 2와 비교하면 몇 가지 중요한 차이가 있어.

비교 항목 Vue 2 Vue 3

Composition API ❌ (옵션 API만 제공) ✅ (새로운 Composition API 지원)
Reactivity 시스템 Object.defineProperty 사용 Proxy 사용 (더 빠르고 강력함)
Teleport ✅ (DOM 위치 변경 가능)
Suspense ✅ (비동기 컴포넌트 지원)

Vue 3에서는 Composition API가 추가돼서, 더 구조적인 코드 작성이 가능해!
Vue 3을 기준으로 공부하는 게 좋아. 🚀

💡 여기까지 이해됐어? 
이제 개발 환경 설정을 알려줄게. 😃

 

📌 2. 개발 환경 설정

Vue를 사용하려면 개발 환경을 먼저 설정해야 해.
방법은 크게 Vue CLI 사용Vite 사용 두 가지가 있어.


✅ 1) Node.js 및 npm 설치

Vue 프로젝트를 만들려면 Node.js와 **npm(Node Package Manager)**가 필요해.
(이미 설치되어 있다면 이 단계는 건너뛰어도 돼.)

📌 Node.js 설치 방법

  1. 공식 사이트에 접속
  2. LTS(Long Term Support) 버전 다운로드
  3. 설치 후, 터미널(또는 명령 프롬프트)에서 다음 명령어 입력하여 설치 확인
    node -v  # Node.js 버전 확인
    npm -v   # npm 버전 확인
    
    버전 번호가 나오면 정상적으로 설치된 거야.

✅ 2) Vue CLI 설치 및 프로젝트 생성

Vue CLI(Vue Command Line Interface)는 Vue 프로젝트를 쉽게 만들고 관리할 수 있도록 도와줘.

📌 Vue CLI 설치

터미널에서 다음 명령어 실행:

npm install -g @vue/cli

설치 확인:

vue --version

버전 번호가 출력되면 정상적으로 설치된 거야.

📌 Vue 프로젝트 생성

vue create my-project

이 명령어를 실행하면 프로젝트 설정 옵션이 나와.
기본 설정(기본 Vue 3 + Babel + ESLint)으로 진행하려면 Default 선택하면 돼.

설정이 끝나면 프로젝트 폴더로 이동 후 실행:

cd my-project
npm run serve

이제 브라우저에서 http://localhost:8080을 열어보면 Vue 앱이 실행될 거야! 🎉


✅ 3) Vite를 이용한 프로젝트 생성

Vite는 Vue CLI보다 더 빠르고 가벼운 빌드 도구야.
최근에는 Vite를 더 많이 사용하니까, 이 방법도 배워두는 게 좋아.

📌 Vite 프로젝트 생성

npm create vite@latest my-project

옵션 선택 시 Vue를 선택하고, Vue 3 버전을 골라.
그다음 프로젝트 폴더로 이동해서 의존성 설치:

cd my-project
npm install
npm run dev

Vite는 기본적으로 http://localhost:5173에서 실행돼. 🚀


💡 CLI vs Vite 차이점

비교 항목 Vue CLI Vite

속도 상대적으로 느림 빠름 (ES 모듈 기반)
설정 방식 Webpack 기반 Rollup 기반 (더 간단함)
개발 서버 npm run serve npm run dev

CLI와 Vite 중 Vite를 추천하지만, CLI도 사용법을 알아두면 좋아!


이제 Vue 프로젝트가 실행되는 걸 확인했을 거야!
다음은 프로젝트 폴더 구조를 분석하는 방법을 알려줄게. 😃

 

📌 3. 프로젝트 폴더 구조 분석

Vue 프로젝트를 생성하면 여러 폴더와 파일이 생기는데, 각각 어떤 역할을 하는지 알아보자.
아래는 Vite 기준의 폴더 구조지만, Vue CLI도 비슷해!

my-project/         # 프로젝트 루트
├── node_modules/   # 설치된 npm 패키지 (건드릴 필요 없음)
├── public/         # 정적 파일 (이미지, favicon 등)
├── src/            # 핵심 소스 코드
│   ├── assets/     # 이미지, CSS 등 정적 리소스
│   ├── components/ # 재사용 가능한 Vue 컴포넌트
│   ├── views/      # 페이지 단위 컴포넌트 (라우팅 사용 시)
│   ├── App.vue     # 최상위 컴포넌트
│   ├── main.js     # Vue 앱의 진입점
│   ├── router.js   # (옵션) Vue Router 설정 파일
│   ├── store.js    # (옵션) 상태 관리(Vuex, Pinia)
├── index.html      # 앱이 실행될 기본 HTML
├── package.json    # 프로젝트 설정 및 의존성 목록
├── vite.config.js  # Vite 설정 파일
└── README.md       # 프로젝트 설명 파일

📌 주요 폴더 & 파일 설명

✅ src/ (소스 코드 폴더)

이 폴더 안에서 Vue 애플리케이션을 개발해.

  • assets/ → CSS, 이미지, 폰트 등의 정적 파일 저장
  • components/ → Vue 컴포넌트(.vue 파일) 저장
  • views/ → 페이지 단위 컴포넌트 (Vue Router 사용 시)
  • App.vue → 최상위 루트 컴포넌트
  • main.js → Vue 앱의 진입점 (Vue 인스턴스를 생성하는 곳)
  • router.js → (옵션) Vue Router 설정 파일
  • store.js → (옵션) 상태 관리(Vuex, Pinia)

✅ public/ (정적 파일 폴더)

여기에 있는 파일은 그대로 빌드되며, / 경로로 접근 가능해.
예) public/logo.png → http://localhost:5173/logo.png

✅ index.html (Vue의 시작점)

Vue 앱이 로드되는 HTML 파일이야. main.js에서 Vue가 이 파일에 연결됨.

✅ package.json (프로젝트 설정 파일)

  • 프로젝트 정보, npm 패키지 목록이 저장됨.
  • 주요 스크립트:
    "scripts": {
      "dev": "vite",   // 개발 서버 실행
      "build": "vite build",   // 프로젝트 빌드
      "serve": "vite preview"  // 빌드된 파일 실행
    }
    

✅ vite.config.js (Vite 설정 파일)

  • 포트 변경, 별칭 설정 등 프로젝트 설정을 변경하는 곳.
  • 기본적으로 수정할 필요 없지만, 필요하면 수정 가능.

📌 프로젝트 구조 이해 예제

Vue 앱이 동작하는 기본 흐름

  1. index.html → main.js 로 Vue 앱을 로드
  2. main.js → App.vue를 렌더링
  3. App.vue 내부에서 components/에 있는 여러 컴포넌트를 사용

이제 기본적인 폴더 구조와 역할을 이해했을 거야!
다음으로 CDN 방식으로 Vue를 실행하는 방법을 알려줄게. 🚀

 

📌 4. CDN 방식으로 Vue 실행하기

CDN(Content Delivery Network)을 사용하면 설치 없이 바로 Vue를 실행할 수 있어.
Vue CLI나 Vite를 쓰기 전에 빠르게 실험해볼 때 유용해!


✅ 1) 기본 Vue 앱 만들기

📌 아래 코드를 index.html 파일에 저장하고 브라우저에서 열어봐!

    
    
    

{{ message }}


        // Vue 앱 생성
        const { createApp } = Vue;
        createApp({
            data() {
                return {
                    message: "안녕하세요! Vue입니다 🚀"
                };
            },
            methods: {
                changeMessage() {
                    this.message = "버튼을 클릭했어요! 🎉";
                }
            }
        }).mount("#app"); // id="app"인 요소에 Vue 연결
    

✅ 2) 코드 설명

  1. Vue 3 CDN 추가위 코드가 Vue를 불러오는 역할을 해!
  2. Vue 앱 생성Vue 3에서는 createApp()을 사용해 앱을 만들고, mount("#app")으로 연결해.
  3. const { createApp } = Vue; createApp({
  4. 데이터 바인딩 ({{ message }})
    • data() 함수에서 message라는 변수를 만들었어.
    • HTML에서 {{ message }}를 쓰면, Vue가 자동으로 값을 표시해 줘.
  5. 이벤트 핸들러 (@click="changeMessage")
    • <button>을 클릭하면 changeMessage() 함수가 실행돼!
    • this.message 값을 변경하면 화면에 자동으로 반영돼.

✅ 3) 실행 방법

  1. 위 코드를 index.html로 저장
  2. 브라우저에서 index.html 파일 열기
  3. 화면에 "안녕하세요! Vue입니다 🚀"가 보이면 성공!
  4. 버튼을 클릭하면 "버튼을 클릭했어요! 🎉"로 변경됨!

✅ 4) CDN 방식의 장점과 단점

장점 단점

✅ 장점 - 설치 없이 빠르게 Vue 사용 가능 - 간단한 테스트 및 프로토타이핑에 적합  
❌ 단점 - 프로젝트 규모가 커지면 유지보수 어려움 - Vue CLI/Vite보다 성능 최적화 기능 부족  

결론: 빠른 테스트용으로는 CDN이 좋지만, 실제 프로젝트에서는 Vue CLI 또는 Vite를 사용하는 게 좋아!


이제 Vue를 실행하는 기본 방법을 알았어!
다음으로 Vue DevTools 설치 및 활용법을 알려줄게. 🚀

 

📌 5. Vue DevTools 설치 및 활용

Vue DevTools는 Vue 애플리케이션을 디버깅하고 상태를 확인하는 도구야.
컴포넌트 상태, 반응형 데이터, 이벤트 등을 실시간으로 확인할 수 있어!


✅ 1) Vue DevTools 설치 방법

🔹 ① 크롬 브라우저 확장 프로그램 설치

  1. Vue DevTools 크롬 웹스토어 방문
  2. "Chrome에 추가" 버튼 클릭
  3. 확장 프로그램 활성화

설치 후, F12(개발자 도구) → "Vue" 탭이 생겼는지 확인해 봐!


🔹 ② Firefox 사용자는?


🔹 ③ Vue DevTools가 안 보일 때?

Vue 3에서는 개발 모드에서만 작동하기 때문에,
Vite 또는 Vue CLI에서 실행한 상태에서 확인해야 해!

npm run dev  # Vite 사용 시
npm run serve  # Vue CLI 사용 시

또한, CDN 방식을 사용할 때는 Vue DevTools가 작동하지 않을 수 있어.
이 경우, 개발자 모드 활성화가 필요해!

위 코드를 다음과 같이 수정하면 DevTools에서 Vue가 감지될 수 있어:


✅ 2) Vue DevTools 활용 방법

  1. Vue DevTools 활성화
    • F12(개발자 도구) → "Vue" 탭 클릭
  2. 컴포넌트 확인
    • 현재 렌더링된 Vue 컴포넌트 트리를 볼 수 있어!
    • 특정 컴포넌트를 클릭하면, 데이터(data), props, computed 값을 확인 가능
  3. 데이터 실시간 수정
    • "Vue" 탭에서 message 값을 직접 변경하면, 화면도 즉시 업데이트돼!
    • 예제:
      data() {
          return { message: "안녕하세요!" };
      }
      
      → Vue DevTools에서 message 값을 "반가워요!"로 수정하면?
      → 브라우저 화면에서도 "반가워요!"로 즉시 반영됨!
  4. 이벤트 확인 (Events 탭)
    • 컴포넌트에서 발생하는 이벤트 확인 가능
    • 예를 들어, 버튼 클릭 시 어떤 이벤트가 발생하는지 체크 가능
  5. Vuex / Pinia 상태 관리 디버깅 (선택)
    • Vuex 또는 Pinia 사용 시, 상태(state) 변경 내역을 추적 가능

✅ 3) Vue DevTools 활용 예제

아래 예제를 실행한 후, Vue DevTools에서 데이터 값을 변경해 보자!

    
    

{{ message }}


        const { createApp } = Vue;
        createApp({
            data() {
                return {
                    message: "Vue DevTools로 값을 바꿔보세요!"
                };
            },
            methods: {
                changeMessage() {
                    this.message = "버튼 클릭됨!";
                }
            }
        }).mount("#app");
    

🔹 실행 후 Vue DevTools에서 확인할 것

Vue 탭에서 message 데이터 변경 → 브라우저 화면에서 바로 반영됨
버튼 클릭 후 이벤트 확인 (Events 탭에서 어떤 이벤트가 발생했는지 체크)


✅ 4) Vue DevTools 사용 시 주의할 점

  1. 배포 환경에서는 DevTools가 비활성화됨
    • 기본적으로 npm run build로 빌드한 후 배포하면 Vue DevTools가 작동하지 않아!
    • 개발 환경에서만 사용하도록 설계된 기능이야.
  2. Vue DevTools가 작동하지 않을 때
    • npm run dev를 실행하지 않았다면 실행할 것
    • Vue 3 사용 시, CDN 방식이면 devtools가 제한될 수 있음
    • vite.config.js에 define: { __VUE_OPTIONS_API__: true, __VUE_PROD_DEVTOOLS__: true } 설정 추가 가능

이제 Vue DevTools도 활용할 수 있게 됐어!
다음으로, Vue의 데이터 바인딩과 기본 문법을 알려줄게. 🚀

 

📌 6. Vue의 데이터 바인딩과 기본 문법

Vue에서는 데이터를 **HTML에 쉽게 연결(바인딩)**할 수 있어.
이제 데이터 바인딩의 개념과 기본 문법을 배워보자! 🚀


✅ 1) 데이터 바인딩이란?

**데이터 바인딩(Data Binding)**이란, Vue 인스턴스의 데이터와 HTML을 연결하는 것이야.
Vue에서는 {{ }}(Mustache Syntax)와 v-bind 디렉티브를 사용해 데이터를 바인딩할 수 있어.


✅ 2) 데이터 바인딩 문법

🔹 ① {{ }} (Mustache Syntax) - 텍스트 바인딩

{{ }}를 사용하면 Vue의 data()에 있는 변수를 HTML에 출력할 수 있어.

<div id="app">
    <h1>{{ message }}</h1>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                message: "안녕하세요! Vue입니다 🚀"
            };
        }
    }).mount("#app");
</script>

📌 실행하면 화면에 "안녕하세요! Vue입니다 🚀"이 출력돼!


🔹 ② v-bind - 속성(attribute) 바인딩

v-bind는 HTML 속성에 Vue 데이터를 바인딩할 때 사용해.
축약형(:)을 사용할 수도 있어.

Vue 로고

마우스를 올려보세요!


    const { createApp } = Vue;
    createApp({
        data() {
            return {
                imageUrl: "<a href=https://vuejs.org/images/logo.png>https://vuejs.org/images/logo.png</a>",
                tooltip: "Vue는 쉽고 강력해요!"
            };
        }
    }).mount("#app");

📌 v-bind:src="imageUrl"을 사용해서 이미지 경로를 Vue 데이터에서 가져와!
📌 :title="tooltip"은 v-bind:title="tooltip"의 축약형이야!


🔹 ③ v-model - 양방향 데이터 바인딩

v-model을 사용하면 사용자 입력값과 Vue 데이터가 자동으로 동기화돼!

<div id="app">
    <input v-model="name" placeholder="이름을 입력하세요">
    <p>입력한 이름: {{ name }}</p>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                name: ""
            };
        }
    }).mount("#app");
</script>

📌 사용자가 <input>에 입력하면, name 값이 자동으로 업데이트돼!
📌 v-model은 input, textarea, select 태그에서 사용 가능해!


🔹 ④ v-if, v-show - 조건부 렌더링

v-if와 v-show는 특정 조건에 따라 요소를 보이거나 숨기는 데 사용돼.

<div id="app">
    <button @click="isVisible = !isVisible">토글</button>
    <p v-if="isVisible">v-if: 이 문장은 조건이 참일 때만 표시돼요.</p>
    <p v-show="isVisible">v-show: 이 문장은 CSS로 숨겨졌다가 보여요.</p>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                isVisible: true
            };
        }
    }).mount("#app");
</script>

📌 v-if는 요소를 DOM에서 완전히 제거하거나 추가해.
📌 v-show는 CSS의 display: none을 사용해서 숨기는 방식이라 빠르게 전환 가능!


🔹 ⑤ v-for - 리스트 렌더링

v-for를 사용하면 배열을 반복해서 HTML 요소를 만들 수 있어.

<div id="app">
    <ul>
        <li v-for="(fruit, index) in fruits" :key="index">
            {{ index + 1 }}. {{ fruit }}
        </li>
    </ul>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                fruits: ["사과", "바나나", "포도"]
            };
        }
    }).mount("#app");
</script>

📌 v-for="(item, index) in 배열"을 사용해서 리스트를 자동 생성할 수 있어.
📌 :key는 Vue가 리스트를 더 효율적으로 업데이트할 수 있도록 돕는 고유값이야.


🔹 ⑥ @click, @input - 이벤트 바인딩

Vue에서는 v-on을 사용해서 이벤트를 연결할 수 있어.
축약형(@)을 사용하면 더 간단해져!

<div id="app">
    <button @click="increaseCount">카운트 증가</button>
    <p>카운트: {{ count }}</p>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                count: 0
            };
        },
        methods: {
            increaseCount() {
                this.count++;
            }
        }
    }).mount("#app");
</script>

📌 @click="increaseCount" → 버튼 클릭 시 increaseCount() 함수 실행
📌 this.count++ → count 값을 증가시키고, 자동으로 화면 업데이트!


🔹 ⑦ computed - 계산된 속성

computed는 데이터 변경 시 자동으로 값을 업데이트하는 속성이야.
기존 methods와 다르게, 캐싱(저장)되어 불필요한 연산을 줄일 수 있어!

<div id="app">
    <p>이름: <input v-model="name"></p>
    <p>반갑습니다, {{ greeting }}!</p>
</div>

<script>
    const { createApp } = Vue;
    createApp({
        data() {
            return {
                name: "홍길동"
            };
        },
        computed: {
            greeting() {
                return this.name ? this.name + "님" : "이름을 입력하세요!";
            }
        }
    }).mount("#app");
</script>

📌 computed는 name 값이 변경될 때만 다시 계산돼.
📌 methods를 사용할 수도 있지만, computed가 더 효율적이야!


✅ 3) 정리

기능 디렉티브/문법 설명

텍스트 바인딩 {{ message }} Vue 데이터를 HTML에 출력
속성 바인딩 v-bind:src="imageUrl" (:src 가능) HTML 속성에 데이터 바인딩
양방향 바인딩 v-model="name" input 값과 Vue 데이터 동기화
조건부 렌더링 v-if="조건", v-show="조건" 조건에 따라 요소 표시/숨김
리스트 렌더링 v-for="(item, index) in 배열" 배열을 반복하여 리스트 생성
이벤트 바인딩 @click="함수명" 버튼 클릭 등의 이벤트 처리
계산된 속성 computed 데이터를 자동 계산 & 캐싱

이제 Vue의 기본 문법을 배웠어!
다음으로 Vue의 컴포넌트 개념과 사용법을 알려줄게. 🚀

댓글