์ž‘์„ฑ: 2026-03-04 05:39:06์ˆ˜์ •: 2026-03-04 05:39:06

Nuxt.js ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๊ฐ€์ด๋“œ: useFetch์™€ useAsyncData ์™„๋ฒฝ ์ดํ•ด

Nuxt 3์—์„œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ฐฉ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ axios๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ , Nuxt ์ „์šฉ Composable์„ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์™€ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


1. ์™œ ์ „์šฉ API๋ฅผ ์จ์•ผ ํ• ๊นŒ?

์ „ํ†ต์ ์ธ ๋ฐฉ์‹(Axios ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์ค‘๋ณต์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Nuxt์˜ ํŽ˜์นญ API๋Š” **๋ฐ์ดํ„ฐ ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration)**์„ ์ง€์›ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์ค‘๋ณต ํ˜ธ์ถœ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.


2. useFetch vs useAsyncData

โ‘  useFetch (๊ฐ€์žฅ ๊ถŒ์žฅ๋จ)

URL๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

const { data, pending, error, refresh } = await useFetch('/api/users')

โ‘ก useAsyncData

๋ณต์žกํ•œ ๋กœ์ง์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(GraphQL, SDK ๋“ฑ)๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const { data } = await useAsyncData('unique-key', () => $fetch('/api/users'))

3. ์ฃผ์š” ์˜ต์…˜ ํ™œ์šฉ๋ฒ•

  • pick: ์‘๋‹ต ๋ฐ์ดํ„ฐ ์ค‘ ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ ๊ณจ๋ผ์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (์„ฑ๋Šฅ ์ตœ์ ํ™”)
  • watch: ํŠน์ • ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  • server: false: ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

4. ์š”์•ฝ

  1. ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ๋Š” useFetch ํ•˜๋‚˜๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  2. URL ํ˜ธ์ถœ ์ด์ƒ์˜ ๋ณต์žกํ•œ ๋กœ์ง์ด ํ•„์š”ํ•˜๋ฉด **useAsyncData**๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”.
  3. ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํ•ญ์ƒ **pick**์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋œ์–ด๋‚ด์„ธ์š”.