# Nuxt์˜ ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ

๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ๋ž€ ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

# ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ ์†Œ๊ฐœ

nuxt ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‚˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚˜๋ฉด layouts/default.vue ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

page-folder

URL์— /login๊ณผ /main์„ ๊ฐ๊ฐ ์ ‘๊ทผํ•˜๋ฉด login.vue ์ปดํฌ๋„ŒํŠธ์™€ main.vue ์ปดํฌ๋„ŒํŠธ์— ์ •์˜๋œ ๋‚ด์šฉ์ด ํ™”๋ฉด์— ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ ์ฝ”๋“œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

<!-- login.vue -->
<template>
  <div>
    <h1>login ํŽ˜์ด์ง€</h1>
    <form></form>
  </div>
</template>
<!-- main.vue -->
<template>
  <div>
    <h1>main ํŽ˜์ด์ง€</h1>
    <main></main>
  </div>
</template>

์ด์ œ ๊ฐ URL๋กœ ์ ‘๊ทผํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” layouts/default.vue ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.




ย 



<!-- default.vue -->
<template>
  <div>
    <Nuxt />
  </div>
</template>

์œ„ ์ปดํฌ๋„ŒํŠธ์˜ <Nuxt/>๊ฐ€ ๋ฐ”๋กœ ํŠน์ • URL์— ํ•ด๋‹นํ•˜๋Š” ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฟŒ๋ฆฌ๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. /login๊ณผ /main์€ ๊ฐ๊ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.




ย 



<!-- '/login'์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ -->
<template>
  <div>
    <!-- ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ -->
  </div>
</template>



ย 



<!-- '/main'์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ -->
<template>
  <div>
    <!-- ๋ฉ”์ธ ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ -->
  </div>
</template>

์ด ๋•Œ ํŽ˜์ด์ง€๋งˆ๋‹ค ๋ฐ˜๋ณต๋˜๋Š” UI ์˜์—ญ์ธ ํ—ค๋”๋ฅผ ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




ย 




<!-- default.vue -->
<template>
  <div>
    <h1>{{ $route.name }} ํŽ˜์ด์ง€</h1>
    <Nuxt />
  </div>
</template>

์ด์ œ ๊ฐ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(page ํด๋”์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ)์—๋Š” ํ—ค๋” ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ UI ์š”์†Œ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



ย 


<!-- login.vue -->
<template>
  <form></form>
</template>


ย 


<!-- main.vue -->
<template>
  <main></main>
</template>

# ์ปค์Šคํ…€ ๋ ˆ์ด์•„์›ƒ

์•ž์—์„œ ๋‹ค๋ฃฌ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ default.vue ์ด์™ธ์—๋„ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ ˆ์ด์•„์›ƒ ํด๋”์— ์ƒˆ๋กœ์šด ๋ทฐ ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

<!-- layouts/blog.vue -->
<template>
  <div>
    <nav>๋„ค๋น„๊ฒŒ์ด์…˜ ์˜์—ญ</nav>
    <Nuxt />
  </div>
</template>

์ด์ œ ์œ„ ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•  ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

// pages/main.vue
export default {
  layout: 'blog'
}