InfoGrab DocsInfoGrab Docs

Vue 3 마이그레이션

요약

Vue 2에서 Vue 3으로의 마이그레이션은 에픽 &6252에서 추적됩니다. Vue 3.x로의 마이그레이션을 용이하게 하기 위해, 코드베이스에서 다음의 더 이상 사용되지 않는 기능을 사용하지 못하도록 방지하는 ESLint 규칙을 추가했습니다.

Vue 2에서 Vue 3으로의 마이그레이션은 에픽 &6252에서 추적됩니다.

Vue 3.x로의 마이그레이션을 용이하게 하기 위해, 코드베이스에서 다음의 더 이상 사용되지 않는 기능을 사용하지 못하도록 방지하는 ESLint 규칙을 추가했습니다.

GitLab에서 Vue 3 (@vue/compat) 사용 가능#

GitLab 프론트엔드 팀은 GDK와 같은 개발 환경에서 Vue 3 (@vue/compat)을 활성화했습니다. 아직 프로덕션에 사용할 준비는 되지 않았지만, 로컬에서 opt-in하여 클라이언트 코드가 Vue 3과 순방향 호환되는지 확인할 수 있습니다.

어떻게 동작하나요? 빌드 도구(Vite 또는 Webpack)가 VUE_VERSION=3 환경 변수를 감지하면, 모듈 에일리어싱(module aliasing)을 사용하여 Vue 자체를 포함한 특정 의존성을 Vue 3 호환 버전으로 교체합니다.

이 대체 라이브러리 중 일부는 팀에서 유지 관리합니다. 이 라이브러리들은 기존 라이브러리를 감싸는 얇은 래퍼(thin wrapper) 역할을 하여, 컨슈머(consumer) 코드를 변경하지 않고도 Vue 3와 호환되도록 합니다.

GDK에서 Vue 3 (@vue/compat) 설정#

이 가이드는 GitLab Development Kit (GDK)에서 Vite를 빌드 도구로 사용하여 Vue 3을 설정하는 방법을 안내합니다.

사전 요구 사항#

  • GDK가 설치 및 구성되어 있어야 합니다.

  • Vue.js와 Vite에 대한 기본 지식이 있어야 합니다.

  • GDK 환경에서 Vite가 구성되어 있어야 합니다(GDK Vite Settings 참고).

초기 설정#

Vue 버전 간 전환#

Vue 2와 Vue 3 사이를 전환하려면 다음 단계를 따르세요:

원하는 Vue 버전을 설정합니다:

gdk config set vite.vue_version 3  # or 2

GDK를 재구성합니다:

gdk reconfigure

GDK를 재시작합니다:

gdk restart # or `gdk start` if running for the first time

중요: Vue 버전을 전환할 때 문제가 발생하면 yarn clean 또는 gdk kill vite로 캐시를 지울 수 있습니다.

설정 확인#

gdk.yml 파일을 확인하여 Vite 구성을 검증할 수 있습니다:

gdk config get vite

이 명령은 활성화 상태와 Vue 버전을 포함한 현재 Vite 설정을 표시합니다. GDK도 실행 중이어야 합니다.

---
enabled: true
hot_module_reloading: true
https:
  enabled: true
port: 3038
vue_version: 3

문제 해결#

일반적인 디버깅#

문제가 발생하면 Vite 로그를 먼저 확인하세요:

gdk tail vite

이 명령은 실시간 Vite 출력 및 오류 메시지를 표시하여 문제를 파악하는 데 도움이 됩니다.

버전 전환 후 빌드 오류#

Vue 버전 전환 후 빌드 오류가 발생하면:

yarn clean으로 Vite 캐시를 지웠는지 확인하세요.

node_modules를 삭제하고 의존성을 재설치해 보세요:

rm -rf node_modules
yarn install

Vite가 시작되지 않는 경우#

Vite가 시작에 실패하면:

  • vite.enabledtrue로 설정되어 있는지 확인하세요.

  • Node.js 버전이 Vite의 요구 사항을 충족하는지 확인하세요.

  • 특정 오류 메시지를 확인하기 위해 GDK 로그를 검토하세요.

추가 리소스#

호환성 변경 사항#

Vue 필터#

이유

필터는 Vue 3 API에서 완전히 제거되었습니다.

대신 사용할 것

컴포넌트의 computed 속성 / 메서드 또는 외부 헬퍼를 사용하세요.

이벤트 허브#

이유

$on, $once, $off 메서드가 Vue 인스턴스에서 제거되었으므로, Vue 3에서는 이벤트 허브를 생성하는 데 사용할 수 없습니다.

사용 시기

이벤트 허브를 사용하지 않는 Vue 앱에 있다면, 꼭 필요한 경우가 아니면 새 이벤트 허브를 추가하지 마세요. 예를 들어, 자식 컴포넌트가 부모의 이벤트에 반응해야 하는 경우, prop을 아래로 전달하는 것이 좋습니다. 그런 다음, 자식 컴포넌트에서 해당 prop의 watch 속성을 사용하여 원하는 사이드 이펙트를 생성하세요.

서로 다른 Vue 앱 간의 크로스 컴포넌트 통신이 필요한 경우, 허브를 도입하는 것이 올바른 결정일 수 있습니다.

대신 사용할 것

새로운 mitt 유사 이벤트 허브를 인스턴스화하는 데 사용할 수 있는 팩토리를 만들었습니다.

이를 통해 기존 이벤트 허브를 새로운 권장 방식으로 마이그레이션하거나 새로운 이벤트 허브를 생성하기가 더 쉬워집니다.

import createEventHub from '~/helpers/event_hub_factory';

export default createEventHub();

팩토리로 생성된 이벤트 허브는 Vue 2 이벤트 허브와 동일한 메서드($on, $once, $off, $emit)를 노출하여 이전 방식과 하위 호환됩니다.