Nuxt.js 주니어 성능 최적화 기술면접

Nuxt.js 주니어 (1~3년) 성능 최적화 7문항 조회수 35 · 2026-08-04 (화) 12:37:14
1 렌더링 최적화
Easy

Q. Nuxt.js에서 SSR(Server-Side Rendering)과 CSR(Client-Side Rendering)의 성능 차이를 설명하고, 각각 어떤 상황에서 유리한지 말씀해주세요.

초기 로딩 속도와 SEO, 그리고 서버 부하 측면에서 생각해보세요.

A. 모범답안

SSR은 서버에서 HTML을 완성해서 보내기 때문에 초기 로딩 속도가 빠르고 SEO에 유리합니다. 반면 CSR은 JavaScript를 다운로드하고 실행한 후 렌더링하므로 초기 로딩은 느리지만 이후 페이지 전환이 빠릅니다. SSR은 콘텐츠 중심 페이지나 랜딩 페이지에 적합하고, CSR은 대시보드나 관리자 페이지처럼 인터랙션이 많은 경우에 유리합니다. Nuxt.js에서는 페이지별로 ssr 옵션을 설정하여 하이브리드 렌더링을 구현할 수 있습니다.

핵심 포인트
  • • SSR은 초기 로딩 속도와 SEO에 유리
  • • CSR은 페이지 전환 속도와 서버 부하 측면에서 유리
  • • 페이지 특성에 따라 렌더링 방식을 선택해야 함
답변에 넣으면 좋은 키워드
SSR CSR 초기 로딩 SEO 하이브리드 렌더링 Time to First Byte
실무에서는

전자상거래 사이트에서 상품 상세 페이지는 SSR로, 마이페이지는 CSR로 구성하여 성능을 최적화합니다.

Follow-up 질문

Nuxt.js에서 특정 페이지만 CSR로 전환하려면 어떻게 설정해야 할까요?

2 이미지 최적화
Easy

Q. Nuxt.js 프로젝트에서 이미지 로딩으로 인해 페이지 로딩 속도가 느려지는 문제가 발생했습니다. 어떤 최적화 방법들을 적용할 수 있을까요?

이미지 포맷, 로딩 방식, 그리고 Nuxt의 이미지 모듈을 생각해보세요.

A. 모범답안

먼저 @nuxt/image 모듈을 사용하여 자동으로 이미지를 최적화하고 반응형 이미지를 제공할 수 있습니다. lazy loading을 적용하여 뷰포트에 보이는 이미지만 먼저 로드하고, loading='lazy' 속성을 활용합니다. WebP나 AVIF 같은 최신 이미지 포맷을 사용하여 파일 크기를 줄이고, 적절한 크기로 리사이징하여 제공합니다. 또한 중요한 above-the-fold 이미지는 preload를 적용하고, 나머지는 지연 로딩하는 전략을 사용합니다.

핵심 포인트
  • • @nuxt/image 모듈 활용
  • • lazy loading 적용
  • • WebP/AVIF 포맷 사용 및 이미지 리사이징
답변에 넣으면 좋은 키워드
@nuxt/image lazy loading WebP AVIF preload responsive images
실무에서는

블로그나 쇼핑몰에서 수십 개의 상품 이미지를 보여줄 때 lazy loading으로 초기 로딩 시간을 크게 단축시킵니다.

Follow-up 질문

이미지 CDN을 사용할 때 Nuxt Image 모듈에서 어떻게 설정할 수 있나요?

3 번들 최적화
Medium

Q. Nuxt.js 프로젝트의 JavaScript 번들 크기가 너무 커서 초기 로딩이 느립니다. 번들 크기를 분석하고 최적화하는 방법을 설명해주세요.

번들 분석 도구와 코드 스플리팅, 트리 쉐이킹을 고려해보세요.

A. 모범답안

먼저 nuxt.config.ts에서 build.analyze 옵션을 true로 설정하거나 webpack-bundle-analyzer를 사용하여 번들 구성을 시각화합니다. 큰 라이브러리는 동적 import를 사용해 코드 스플리팅을 적용하고, 필요한 시점에만 로드되도록 합니다. 사용하지 않는 코드는 제거하고, lodash 같은 라이브러리는 필요한 함수만 import하여 트리 쉐이킹이 잘 작동하도록 합니다. 또한 moment.js 대신 day.js처럼 가벼운 대안을 사용하고, 외부 라이브러리를 CDN으로 분리하는 것도 고려할 수 있습니다.

핵심 포인트
  • • webpack-bundle-analyzer로 번들 분석
  • • 동적 import를 통한 코드 스플리팅
  • • 트리 쉐이킹과 경량 라이브러리 사용
답변에 넣으면 좋은 키워드
webpack-bundle-analyzer code splitting dynamic import tree shaking build.analyze
실무에서는

차트 라이브러리처럼 용량이 큰 라이브러리를 동적 import로 분리하여 초기 번들 크기를 30% 이상 줄일 수 있습니다.

Follow-up 질문

Nuxt.js에서 특정 컴포넌트를 동적으로 import하는 코드 예시를 설명해주실 수 있나요?

4 API 호출 최적화
Medium

Q. Nuxt.js 애플리케이션에서 같은 API를 여러 컴포넌트에서 중복 호출하여 성능 문제가 발생하고 있습니다. 이를 해결하기 위한 방법을 설명해주세요.

Nuxt의 데이터 페칭 방식과 상태 관리, 캐싱을 생각해보세요.

A. 모범답안

useFetch나 useAsyncData의 key 옵션을 활용하여 동일한 요청을 자동으로 중복 제거할 수 있습니다. 이 composable들은 같은 key를 가진 요청을 캐싱하여 재사용합니다. 또한 Pinia 같은 상태 관리 라이브러리를 사용하여 API 응답을 전역 상태로 관리하고, 필요한 컴포넌트에서 공유할 수 있습니다. getCachedData 옵션을 사용하면 커스텀 캐싱 로직을 구현할 수 있고, 서버 사이드에서는 payload를 통해 클라이언트로 데이터를 전달하여 중복 요청을 방지합니다.

핵심 포인트
  • • useFetch/useAsyncData의 key 옵션으로 자동 캐싱
  • • Pinia를 활용한 전역 상태 관리
  • • getCachedData로 커스텀 캐싱 구현
답변에 넣으면 좋은 키워드
useFetch useAsyncData key Pinia getCachedData payload 중복 제거
실무에서는

사용자 프로필 정보를 여러 컴포넌트에서 사용할 때 한 번만 API를 호출하고 결과를 공유하여 네트워크 비용을 절감합니다.

Follow-up 질문

useFetch에서 캐시를 무효화하고 데이터를 다시 가져와야 할 때는 어떻게 해야 하나요?

5 렌더링 성능
Medium

Q. Nuxt.js에서 긴 리스트를 렌더링할 때 스크롤 성능이 저하되는 문제가 발생했습니다. 어떤 최적화 기법을 적용할 수 있을까요?

가상 스크롤링과 Vue의 최적화 디렉티브를 고려해보세요.

A. 모범답안

가상 스크롤링(Virtual Scrolling) 라이브러리인 vue-virtual-scroller를 사용하여 화면에 보이는 항목만 렌더링하고 나머지는 DOM에서 제거합니다. v-for를 사용할 때는 반드시 unique한 key를 지정하여 Vue가 효율적으로 DOM을 업데이트하도록 합니다. 리스트 아이템이 변경되지 않는다면 v-once 디렉티브를 사용하고, 무거운 컴포넌트는 lazy hydration을 적용합니다. 또한 페이지네이션이나 무한 스크롤을 구현하여 한 번에 렌더링하는 데이터 양을 제한하는 것도 효과적입니다.

핵심 포인트
  • • 가상 스크롤링으로 보이는 항목만 렌더링
  • • v-for에 unique key 지정
  • • 페이지네이션 또는 무한 스크롤 구현
답변에 넣으면 좋은 키워드
virtual scrolling vue-virtual-scroller v-for key lazy hydration 무한 스크롤
실무에서는

수천 개의 상품 목록이나 댓글 목록을 표시할 때 가상 스크롤링으로 메모리 사용량과 렌더링 시간을 대폭 줄일 수 있습니다.

Follow-up 질문

가상 스크롤링을 사용할 때 SEO에는 어떤 영향이 있을까요?

6 캐싱 전략
Medium

Q. Nuxt.js에서 routeRules를 사용한 페이지 캐싱에 대해 설명하고, 어떤 경우에 유용한지 말씀해주세요.

정적 페이지와 동적 페이지의 캐싱 전략을 구분해서 생각해보세요.

A. 모범답안

routeRules는 nuxt.config.ts에서 페이지별로 캐싱 및 렌더링 전략을 설정할 수 있는 기능입니다. prerender를 사용하면 빌드 시점에 정적 HTML을 생성하고, swr을 사용하면 stale-while-revalidate 전략으로 캐시된 페이지를 제공하면서 백그라운드에서 업데이트합니다. isr을 설정하면 일정 시간마다 페이지를 재생성하는 Incremental Static Regeneration을 구현할 수 있습니다. 자주 변경되지 않는 블로그 글이나 상품 상세 페이지에 적용하면 서버 부하를 크게 줄이고 응답 속도를 향상시킬 수 있습니다.

핵심 포인트
  • • routeRules로 페이지별 캐싱 전략 설정
  • • prerender, swr, isr 등 다양한 전략 제공
  • • 정적 콘텐츠에 적용하여 서버 부하 감소
답변에 넣으면 좋은 키워드
routeRules prerender swr isr stale-while-revalidate 캐싱
실무에서는

뉴스 사이트에서 기사 페이지에 swr을 적용하여 빠른 응답 속도를 유지하면서도 최신 데이터를 제공합니다.

Follow-up 질문

swr과 isr의 차이점과 각각 어떤 상황에 적합한지 설명해주세요.

7 성능 측정
Easy

Q. Nuxt.js 애플리케이션의 성능을 측정하고 병목 지점을 찾기 위해 어떤 도구들을 사용할 수 있나요?

브라우저 내장 도구와 외부 성능 측정 서비스를 모두 고려해보세요.

A. 모범답안

Chrome DevTools의 Lighthouse를 사용하여 성능, 접근성, SEO 등을 종합적으로 측정하고 개선 제안을 받을 수 있습니다. Performance 탭에서는 런타임 성능을 프로파일링하여 느린 함수나 렌더링 병목을 찾을 수 있습니다. Network 탭으로 리소스 로딩 시간과 크기를 분석하고, Vue DevTools로 컴포넌트 렌더링 성능을 확인합니다. 또한 PageSpeed Insights나 WebPageTest 같은 온라인 도구로 실제 사용자 환경에서의 성능을 측정하고, Core Web Vitals(LCP, FID, CLS) 지표를 모니터링합니다.

핵심 포인트
  • • Lighthouse로 종합 성능 측정
  • • Chrome DevTools Performance/Network 탭 활용
  • • Core Web Vitals 지표 모니터링
답변에 넣으면 좋은 키워드
Lighthouse Chrome DevTools Performance Core Web Vitals LCP FID CLS PageSpeed Insights
실무에서는

프로덕션 배포 전 Lighthouse 점수를 기준으로 성능 목표를 설정하고, 지속적으로 모니터링하여 성능 저하를 방지합니다.

Follow-up 질문

Core Web Vitals 중 LCP를 개선하기 위한 구체적인 방법은 무엇이 있을까요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!