Vue Academy · 강의

앱 수준 상태를 위한 Provide/Inject

전역 상태, 테마, i18n에 app.provide()를 사용하고 간단한 경우 Pinia를 피하는 방법을 알아봅니다.

레슨 4/413개 단계

앱 수준 상태를 위한 Provide/Inject은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

애플리케이션 수준 provide

컴포넌트 수준의 provide 외에도 app.provide를 사용하여 앱 인스턴스에서 값을 제공할 수 있습니다. 그러면 해당 값은 앱의 모든 컴포넌트에서 사용할 수 있습니다.

const app = createApp(App);
app.provide("appVersion", "1.0.0");

전역 서비스 제공하기

애플리케이션 수준 provide는 인증 서비스, HTTP 클라이언트 또는 로거처럼 앱 전체에서 필요할 수 있는 싱글턴에 적합합니다.

import { authService } from "./auth";
app.provide("auth", authService);

전역 서비스 사용하기

어떤 컴포넌트든 트리의 어느 위치에서나 프롭 전달이나 추가 연결 구성 없이 키로 서비스를 주입할 수 있습니다.

const auth = inject("auth");
auth.login(credentials);

전역용 심벌 키

앱 전체에서 사용하는 서비스에는 내보낸 심벌 키를 사용하세요. 가능하면 타입도 지정하면 코드베이스 전체에서 안전하고 쉽게 파악할 수 있는 주입이 됩니다.

// keys.ts
export const authKey: InjectionKey<AuthService> = Symbol("auth");
// main.ts
app.provide(authKey, authService);

조회 순서

애플리케이션 수준 provide와 컴포넌트 수준 provide가 같은 키를 사용하면 해당 컴포넌트의 하위 컴포넌트에는 가장 가까운 제공자가 적용됩니다. 애플리케이션 수준 provide는 전역 대체값으로 동작합니다.

읽기 위주 상황

많은 컴포넌트가 테마, 지역 설정, config와 같은 공유 데이터를 읽기만 할 때 provide/주입이 특히 유용합니다. 소비자가 값을 쓸 필요가 없으므로 이 패턴은 간단하고 예측 가능합니다.

Pinia와 비교하기

Pinia는 Vue의 공식 상태 관리 라이브러리입니다. 개발자 도구, 모듈식 저장소, 동작, 게터, 시간 여행 디버깅을 제공하므로 복잡하고 자주 변경되는 전역 상태에 적합합니다.

import { defineStore } from "pinia";
export const useAuth = defineStore("auth", { /* ... */ });

provide/주입만으로 충분한 경우

대부분 읽기 전용인 공유 값에는 저장소의 추가 부담 없이 provide/주입을 사용할 수 있습니다. 테마, 국제화 또는 주입된 서비스에 적합한 더 가볍고 내장된 명확한 방식입니다.

Pinia를 선택할 때

여러 곳에서 상태를 변경하거나, 개발자 도구가 필요하거나, 상태를 유지해야 하거나, 파생 데이터가 복잡하다면 Pinia를 선택하세요. 흩어진 provide/주입 쌍보다 로직을 더 효과적으로 중앙화할 수 있습니다.

둘 다 함께 사용하기

두 방식은 서로 배타적이지 않습니다. 앱 데이터에는 Pinia를 사용하고 폼이나 UI 테마 같은 가벼운 컴포넌트 트리 컨텍스트에는 provide/주입을 사용할 수 있습니다.

provide("formContext", { register, errors });

테스트 시 고려 사항

주입을 사용하는 컴포넌트를 단위 테스트할 때는 테스트 마운트 옵션의 global.provide를 통해 값을 제공하여 컴포넌트가 스텁을 받도록 하세요.

mount(MyComponent, {
  global: { provide: { auth: fakeAuth } }
});

빠른 확인

Pinia보다 provide/주입을 우선하는 경우는 언제입니까?

복습

app.provide는 모든 컴포넌트에서 키를 통해 전역 서비스를 사용할 수 있게 하며, 어디서나 inject로 해당 서비스를 가져올 수 있다는 것을 배웠습니다. provide/주입은 읽기 위주의 공유 컨텍스트에 적합하고, Pinia는 개발자 도구를 지원하는 복잡하고 자주 변경되는 전역 상태에 적합합니다.

무료로 시작

AI 튜터와 함께 HTML을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
42
레슨
156

자주 묻는 질문

“앱 수준 상태를 위한 Provide/Inject” 강의는 무료인가요?

네 — “앱 수준 상태를 위한 Provide/Inject” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“앱 수준 상태를 위한 Provide/Inject”에서 뭘 배우나요?

전역 상태, 테마, i18n에 app.provide()를 사용하고 간단한 경우 Pinia를 피하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Vue Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“앱 수준 상태를 위한 Provide/Inject” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Prop 전달 문제
  2. 부모 컴포넌트에서 provide() 사용하기
  3. 자식 컴포넌트에서 inject() 사용하기
  4. 앱 수준 상태를 위한 Provide/Inject
← Vue Academy(으)로 돌아가기