프론트엔드 개발 · 중급
Vue 컴포넌트 간 통신에서 'props'와 'emit'은 기본적인 부모-자식 통신 방식입니다. 이 외에 복잡한 컴포넌트 트리에서 부모-자식 관계가 아닌 컴포넌트 간 효율적인 통신 방법들(예: provide/inject, Pinia/Vuex)을 설명하고, 각 방법의 장단점을 비교해주세요.
힌트 · provide/inject는 깊은 계층의 컴포넌트 간 통신에 적합하며, Pinia/Vuex는 전역 상태 관리에 사용됩니다.
propsemitprovide/injectPinia/Vuex전역 상태 관리
모범답안
네, Vue 컴포넌트 간 통신 방법에 대해 설명드리겠습니다.
'props'와 'emit'은 부모-자식 관계에서 가장 기본적인 통신 방식이지만, 컴포넌트 트리가 복잡해지면 효율성이 떨어질 수 있습니다.
이러한 문제를 해결하기 위해 'provide/inject'와 'Pinia/Vuex' 같은 방법들을 사용할 수 있습니다. 'provide/inject'는 부모 컴포넌트에서 데이터를 제공(provide)하고, 하위 컴포넌트에서 해당 데이터를 주입(inject)받는 방식입니다. 깊은 계층 구조에서 props를 여러 단계 거쳐 전달할 필요 없이 직접 데이터를 공유할 수 있다는 장점이 있지만, 컴포넌트 간의 결합도가 높아지고, 데이터 흐름 추적이 어려워질 수 있다는 단점이 있습니다.
'Pinia/Vuex'는 전역 상태 관리 라이브러리입니다. 여러 컴포넌트에서 공유해야 하는 상태를 중앙 집중식으로 관리하여 컴포넌트 간의 통신을 간소화합니다. 상태 변화를 예측 가능하게 만들고, 디버깅을 용이하게 한다는 장점이 있지만, 규모가 작은 프로젝트에서는 오히려 오버헤드가 될 수 있습니다. 프로젝트 규모와 복잡성을 고려하여 적절한 방법을 선택하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Vue.js / Nuxt 면접 질문
- Vue.js에서 컴포넌트 기반 개발의 이점은 무엇이며, 하나의 컴포넌트는 일반적으로 어떤 구조(template, script, style)로 이루어져 있는지 설명해 주세요.
- Vue 3 Composition API에서 'ref'와 'reactive'는 반응형 데이터를 생성하는 데 사용됩니다. 이 두 함수의 주요 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 더 적절한지 구체적인 예시와 함께 설명해주세요.
- Vue 컴포넌트에서 'computed' 속성과 'watch' 옵션(또는 watch effect)은 모두 반응형 데이터의 변화에 따라 특정 로직을 수행할 수 있습니다. 이 둘의 주요 차이점을 설명하고, 각각 어떤 상황에 더 적합한지 실무 예시를 들어 설명해주세요.
- Vue Router의 내비게이션 가드(Navigation Guards)는 무엇이며, 어떤 종류(전역, 라우트별, 컴포넌트 내)가 있고 각각 어떤 시점에 호출되는지 설명하고 실제 애플리케이션에서 활용 사례를 들어주세요.
- Vue 컴포넌트에서 'slot'을 사용하는 목적은 무엇이며, 'named slot'과 'scoped slot'의 차이점을 구체적인 예시와 함께 설명해주세요.
- Nuxt.js 3에서 서버 사이드 렌더링(SSR) 환경에서 데이터를 비동기적으로 가져오는 주요 방법들(예: useAsyncData, useFetch)을 설명하고, 각각의 특징과 사용 시나리오를 비교해주세요.