<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>A Full Stack Develpor</title>
    <link>https://vicapor.tistory.com/</link>
    <description>Programming Language : Python, JavaScript, HTML, CSS
FrontEnd Framework : Bootstrap, Bulma, Vue.js, Nuxt.js
BackEnd  Framework : Django, Wagtail, Django-Ninja
Deploy : Docker, Gunicorn, Nginx, AWS</description>
    <language>ko</language>
    <pubDate>Tue, 30 Jun 2026 11:55:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Vicapor</managingEditor>
    <image>
      <title>A Full Stack Develpor</title>
      <url>https://tistory1.daumcdn.net/tistory/4822580/attach/1b759ea373984f4297138bdfa3afad9f</url>
      <link>https://vicapor.tistory.com</link>
    </image>
    <item>
      <title>Nuxt.js window or document undefined</title>
      <link>https://vicapor.tistory.com/184</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/concepts/server-side-rendering#window-or-document-undefined&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nuxtjs.org/docs/concepts/server-side-rendering#window-or-document-undefined&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646436561420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Server Side Rendering&quot; data-og-description=&quot;Server-side rendering (SSR), is the ability of an application to contribute by displaying the web-page on the server instead of rendering it in the browser.&quot; data-og-host=&quot;nuxtjs.org&quot; data-og-source-url=&quot;https://nuxtjs.org/docs/concepts/server-side-rendering#window-or-document-undefined&quot; data-og-url=&quot;https://nuxtjs.org/docs/concepts/server-side-rendering/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7M34j/hyNB0ErOX3/Lb3bTIYwgcLVSTiTzTf9I1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/Cu2OX/hyNBXucjzo/C4nQtq8vvcC6fkLKmlr4IK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/concepts/server-side-rendering#window-or-document-undefined&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nuxtjs.org/docs/concepts/server-side-rendering#window-or-document-undefined&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7M34j/hyNB0ErOX3/Lb3bTIYwgcLVSTiTzTf9I1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/Cu2OX/hyNBXucjzo/C4nQtq8vvcC6fkLKmlr4IK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Server Side Rendering&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Server-side rendering (SSR), is the ability of an application to contribute by displaying the web-page on the server instead of rendering it in the browser.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nuxtjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nuxt.js에서 window 객체를 사용을 하려면 문제가 생긴다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;window is undefined&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646475492559&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window is undefined&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인의 오류는 Nuxt.js는 SSR (Server Side Rendering)이기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 nuxt를 실행하면 각종 설정과 lifecycle을 실행하게 되는데 이때, Server Side에는 window 객체가 없으므로 문제가 생기는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 오류를 종종 본다. html에서는 &amp;lt;client-only&amp;gt;를 통해 해결할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터에서는 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;process.client 를 사용할 수 있다. client side rendering일 때, 실행시키라는 의미이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/184</guid>
      <comments>https://vicapor.tistory.com/184#entry184comment</comments>
      <pubDate>Sat, 5 Mar 2022 09:02:23 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js Quill Editor</title>
      <link>https://vicapor.tistory.com/182</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Quill Editor 공식 사이트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://quilljs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://quilljs.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646324901181&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Quill - Your powerful rich text editor&quot; data-og-description=&quot;Sailec Light Sofia Pro Slabo 27px Roboto Slab Inconsolata Ubuntu Mono Quill Rich Text Editor Quill is a free, open source WYSIWYG editor built for the modern web. With its modular architecture and expressive API, it is completely customizable to fit any ne&quot; data-og-host=&quot;quilljs.com&quot; data-og-source-url=&quot;https://quilljs.com/&quot; data-og-url=&quot;https://quilljs.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SmTR5/hyNA0kHOvP/A5UK5cTfO8KoBG8CtmPUoK/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/e51wz/hyNAYf7rZv/q4sxbNJP6xOqZ9Y9d47U5K/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;https://quilljs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://quilljs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SmTR5/hyNA0kHOvP/A5UK5cTfO8KoBG8CtmPUoK/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/e51wz/hyNAYf7rZv/q4sxbNJP6xOqZ9Y9d47U5K/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Quill - Your powerful rich text editor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sailec Light Sofia Pro Slabo 27px Roboto Slab Inconsolata Ubuntu Mono Quill Rich Text Editor Quill is a free, open source WYSIWYG editor built for the modern web. With its modular architecture and expressive API, it is completely customizable to fit any ne&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;quilljs.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Vue-Quill-Editor&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Vue&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/surmon-china/vue-quill-editor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/surmon-china/vue-quill-editor&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Nuxt&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/surmon-china/surmon-china.github.io/tree/source/projects/vue-quill-editor/nuxt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/surmon-china/surmon-china.github.io/tree/source/projects/vue-quill-editor/nuxt&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;적용 가이드 (중국어 주의)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hamsterism.com/articles/how-to-use-vue-quill-editor-in-nuxt/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hamsterism.com/articles/how-to-use-vue-quill-editor-in-nuxt/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 필요 모듈 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646325074657&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install vue-quill-editor --save 
# 또는 
yarn add vue-quill-editor

# 추가
npm i vue-debounce
yarn add vue-debounce&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Plugin file 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;plugins/vue-quill-editor.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646325150862&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import Vue from 'vue'
import VueQuillEditor from 'vue-quill-editor'

Vue.use(VueQuillEditor)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Nuxt.config 정의&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;nuxt.config.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646325238084&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  css: [
    'quill/dist/quill.snow.css',
    'quill/dist/quill.bubble.css',
  ],
  
  plugins: [{ src: '~plugins/vue-quill-editor.js', ssr: false }],&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. Quill.vue 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646325268285&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;section&amp;gt;
    &amp;lt;client-only&amp;gt;
      &amp;lt;quill-editor
        ref=&quot;editor&quot;
        v-model.lazy=&quot;editedContent&quot;
        :options=&quot;editorOption&quot;
        class=&quot;editor--border relative&quot;
        @change=&quot;debounceTextChange&quot;
      /&amp;gt;
    &amp;lt;/client-only&amp;gt;
  &amp;lt;/section&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { debounce } from 'vue-debounce'
export default {
name: &quot;QuillEditor&quot;,
  props: {
    content: {
      type: String,
      default: () =&amp;gt; '',
    },
  },
  data() {
    return {
      editedContent: this.content,
      editorOption: {
          theme: 'snow',
          modules: {
            toolbar: [
              ['bold', 'italic', 'underline', 'strike'],
              ['blockquote', 'code-block']
            ]
          }
      }

	// custom
      editorOption: {
        theme: 'bubble',
        modules: {
          toolbar: {
            container: [
              ['bold', 'italic', 'underline', 'strike', 'code'],
              ['blockquote', 'code-block'],
              [{ header: [1, 2, 3, 4, 5, 6, false] }],
              [{ list: 'ordered' }, { list: 'bullet' }],
              [{ script: 'sub' }, { script: 'super' }],
              [{ indent: '-1' }, { indent: '+1' }],
              [{ size: ['small', false, 'large', 'huge'] }],
              [{ color: [] }, { background: [] }],
              [{ align: [] }],
              ['clean'],
              ['link', 'image', 'video'],
            ],
            handlers: {
              image: this.uploadImage,
            },
          },
        },
      },
    }
  },
  methods: {
    debounceTextChange: debounce(function () {
      // don't use arrow function
      this.$emit('text-change', this.editedContent)
    }, 3000),
  },
}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/dhershman1/vue-debounce#readme&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/dhershman1/vue-debounce#readme&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pks2974.medium.com/throttle-%EC%99%80-debounce-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0-2335a9c426ff&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pks2974.medium.com/throttle-%EC%99%80-debounce-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0-2335a9c426ff&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;hrottle 와 Debounce 는 자주 사용 되는 이벤트나 함수 들의 실행되는 빈도를 줄여서, 성능 상의 유리함을 가져오기 위한 개념이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <category>Nuxt Quill</category>
      <category>Quill Editor</category>
      <category>Vue Quill</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/182</guid>
      <comments>https://vicapor.tistory.com/182#entry182comment</comments>
      <pubDate>Fri, 4 Mar 2022 01:37:15 +0900</pubDate>
    </item>
    <item>
      <title>Wagtail Heroku Deploy</title>
      <link>https://vicapor.tistory.com/181</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RQ0eKv6HrpM&quot;&gt;https://www.youtube.com/watch?v=RQ0eKv6HrpM&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wagtail.org/blog/wagtail-heroku-2017/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wagtail.org/blog/wagtail-heroku-2017/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위에 사이트에서 운영체제에 맞는 Heroku를 다운 받도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Heroku 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/heroku-cli&quot;&gt;https://devcenter.heroku.com/articles/heroku-cli&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646122083828&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The Heroku CLI | Heroku Dev Center&quot; data-og-description=&quot;Last updated February 01, 2022 The Heroku Command Line Interface (CLI) lets you create and manage Heroku apps directly from the terminal. It&amp;rsquo;s an essential part of using Heroku. Install the Heroku CLI Pre-requisites The Heroku CLI requires Git, the popul&quot; data-og-host=&quot;devcenter.heroku.com&quot; data-og-source-url=&quot;https://devcenter.heroku.com/articles/heroku-cli&quot; data-og-url=&quot;https://devcenter.heroku.com/articles/heroku-cli&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hMC5d/hyNzQ2ZexF/qkfKv9WnPRm0Ua2IWXyEA0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/heroku-cli&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devcenter.heroku.com/articles/heroku-cli&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hMC5d/hyNzQ2ZexF/qkfKv9WnPRm0Ua2IWXyEA0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The Heroku CLI | Heroku Dev Center&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Last updated February 01, 2022 The Heroku Command Line Interface (CLI) lets you create and manage Heroku apps directly from the terminal. It&amp;rsquo;s an essential part of using Heroku. Install the Heroku CLI Pre-requisites The Heroku CLI requires Git, the popul&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devcenter.heroku.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위에 사이트에서 운영체제에 맞는 Heroku를 다운 받도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Django-toolbelt 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포를 위한 관련 라이브러리를 모아놓은 라이브러리이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;django&lt;/li&gt;
&lt;li&gt;psycopg2&lt;/li&gt;
&lt;li&gt;gunicorn&lt;/li&gt;
&lt;li&gt;dj-database-url&lt;/li&gt;
&lt;li&gt;dj-static&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 라이브러리들이 설치된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646122329918&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;requirements.txt파일을 업데이트 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 데이터 베이스 설정 (PostreSQL)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vicapor.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vicapor.tistory.com/142&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vicapor.tistory.com/122&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vicapor.tistory.com/122&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Procfile 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Procfile&lt;/p&gt;
&lt;pre id=&quot;code_1646122995427&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;web: gunicorn 프로젝트이름.wsgi --log-file -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. runtime.txt 파일 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://devcenter.heroku.com/articles/python-support&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://devcenter.heroku.com/articles/python-support&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사이트에서 지원되는 파이썬 버전을 확인해 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646122947442&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python-3.8.12&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 프로젝트에서 사용한 3.8.12버전으로 진행해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. settings/production.py 수정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646123203318&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()
	
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 Heroku url을 모르기 때문에 ALLOWED_HOSTS는 모두 허용을 해놓는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. .gitIgnore 파일 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646123254977&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;*.pyc
.DS_Store
*.swp
/venv/
/static/
/media/
.env&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 git에 연결했으면 .gitignore파일이 존재할 것이다. 위의 내용을 추가해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. .env 파일생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.env&lt;/p&gt;
&lt;pre id=&quot;code_1646123355328&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DJANGO_SETTINGS_MODULE=project_title.settings.production
SECRET_KEY='####'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. Production.py 파일 수정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646123494196&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from __future__ import absolute_import, unicode_literals
from .base import *
import dj_database_url
import os

env = os.environ.copy()
SECRET_KEY = env['SECRET_KEY']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 것은 __future__은 제일 먼저 import 되어야 하므로 맨 위에 적는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10. Heroku 배포&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;배포전에 git에 push를 해놓자!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646123889409&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git init
git add .
git commit -m &quot;first commit to heroku&quot;
heroku create 
# Creates a new Heroku app and connects it to your initialised git repo
git push heroku master 
# Pushes your commited code up to your new ap
heroku plugins:install heroku-config
# Install plugin that allows us to push settings to heroku
heroku config:push
# Pushes settings to heroku, if you get an error check your spaces.
heroku run python manage.py migrate 
# Heroku allows you to run shell commands remotely with the 'heroku run' command.
heroku run python manage.py createsuperuser
# Creates a new superuser on Heroku
heroku ps:scale web=1 
# Ensures that a new Dyno is running for your project&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;issue)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dependency on app with no migrations: user 오류가 발생했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;user app의 migrations폴더에 &lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;0001_initial.py을 .gitignore에 포함시키고 git push를 해주면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;user app에 user model이 정의 되어 있는데 diary app에서 user를 사용하기 때문에 dependency오류가 발생하는 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;11. whitenoise제거&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646127407503&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install whitenoise&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646127873718&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MIDDLEWARE = [

	...
    'whitenoise.middleware.WhiteNoiseMiddleware',

]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;settings/production.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646127791222&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

COMPRESS_OFFLINE = True
COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter',
]
COMPRESS_CSS_HASHING_METHOD = 'content'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646128561291&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push heroku master&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heroku에 대한 자세한 설명이 보고싶다면&lt;/p&gt;
&lt;pre id=&quot;code_1646143725595&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;heroku help&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;추가)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Heroku에서는 Local에서 makemigrations를 진행하고 migrations 파일까지 전부 git에 업로드 해야한다. 그리고 heroku에서 migrate를 해줘야한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Back-End/Wagtail, Django 배포</category>
      <category>heroku</category>
      <category>heroku wagtail</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/181</guid>
      <comments>https://vicapor.tistory.com/181#entry181comment</comments>
      <pubDate>Tue, 1 Mar 2022 19:05:50 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js Auth (Naver)</title>
      <link>https://vicapor.tistory.com/180</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://auth.nuxtjs.org/schemes/oauth2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://auth.nuxtjs.org/schemes/oauth2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646118093761&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Introduction&quot; data-og-description=&quot;Zero-boilerplate authentication support for Nuxt.js!&quot; data-og-host=&quot;auth.nuxtjs.org&quot; data-og-source-url=&quot;https://auth.nuxtjs.org/schemes/oauth2&quot; data-og-url=&quot;https://auth.nuxtjs.org&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cWfkfT/hyNzJbGRuf/sn8GpHaqp4pgrB7P2BWUNK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/dnkiTg/hyNzVb5GJs/brqd6j0kCIRQYlTSwyl1V1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://auth.nuxtjs.org/schemes/oauth2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://auth.nuxtjs.org/schemes/oauth2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cWfkfT/hyNzJbGRuf/sn8GpHaqp4pgrB7P2BWUNK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/dnkiTg/hyNzVb5GJs/brqd6j0kCIRQYlTSwyl1V1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Introduction&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Zero-boilerplate authentication support for Nuxt.js!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;auth.nuxtjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vicapor.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vicapor.tistory.com/80&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;nuxt.config.js&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646118149842&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      naver: {
        scheme: 'oauth2',
        clientId: process.env.NAVER_CLIENT_ID,
        codeChallengeMethod: '',
        responseType: 'code',
        // grantType: 'authorization_code',
        endpoints: {
          authorization: 'https://nid.naver.com/oauth2.0/authorize',
          token: `${baseURL}/social-login/naver/`,
          userInfo: `${baseURL}/user/`,
        },
        token: {
          property: 'access_token',
          type: 'Bearer',
          maxAge: 18000
        },
      },&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646118199310&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;this.$auth.loginWith(&quot;naver&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://auth.nuxtjs.org/api/auth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://auth.nuxtjs.org/api/auth&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646118291958&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Introduction&quot; data-og-description=&quot;Zero-boilerplate authentication support for Nuxt.js!&quot; data-og-host=&quot;auth.nuxtjs.org&quot; data-og-source-url=&quot;https://auth.nuxtjs.org/api/auth&quot; data-og-url=&quot;https://auth.nuxtjs.org&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cLmFuq/hyNzMGevZK/RiVyLUcllKkVMtOkrFfqd1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/RqssA/hyNzKIq458/KaymkZTXP2bw1QoFWEFLK0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://auth.nuxtjs.org/api/auth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://auth.nuxtjs.org/api/auth&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cLmFuq/hyNzMGevZK/RiVyLUcllKkVMtOkrFfqd1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/RqssA/hyNzKIq458/KaymkZTXP2bw1QoFWEFLK0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Introduction&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Zero-boilerplate authentication support for Nuxt.js!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;auth.nuxtjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/180</guid>
      <comments>https://vicapor.tistory.com/180#entry180comment</comments>
      <pubDate>Tue, 1 Mar 2022 16:04:52 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js Lottie 사용하기</title>
      <link>https://vicapor.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645889340436&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Using Lottie in Nuxt.js&quot; data-og-description=&quot;There is no Lottie plugin for Nuxt, but you can install &amp;ldquo;vue-lottie&amp;rdquo; instead. I am writing this article because I cannot find a proper doc&amp;hellip;&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&quot; data-og-url=&quot;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzECoQ/hyNxRGOz7Y/BvjhKFuDnF9uRs53UJ0EJk/img.png?width=1200&amp;amp;height=524&amp;amp;face=0_0_1200_524,https://scrap.kakaocdn.net/dn/bXvq6R/hyNxH5gMIX/jMBOzbmhjOuS1dkr3y3SOK/img.png?width=1400&amp;amp;height=612&amp;amp;face=0_0_1400_612&quot;&gt;&lt;a href=&quot;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@fonto.design/using-lottie-in-nuxt-js-554949d19063&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzECoQ/hyNxRGOz7Y/BvjhKFuDnF9uRs53UJ0EJk/img.png?width=1200&amp;amp;height=524&amp;amp;face=0_0_1200_524,https://scrap.kakaocdn.net/dn/bXvq6R/hyNxH5gMIX/jMBOzbmhjOuS1dkr3y3SOK/img.png?width=1400&amp;amp;height=612&amp;amp;face=0_0_1400_612');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Using Lottie in Nuxt.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;There is no Lottie plugin for Nuxt, but you can install &amp;ldquo;vue-lottie&amp;rdquo; instead. I am writing this article because I cannot find a proper doc&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/chenqingspring/vue-lottie&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/chenqingspring/vue-lottie&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645889349676&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - chenqingspring/vue-lottie: Render After Effects animations on Vue based on Bodymovin&quot; data-og-description=&quot;Render After Effects animations on Vue based on Bodymovin - GitHub - chenqingspring/vue-lottie: Render After Effects animations on Vue based on Bodymovin&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/chenqingspring/vue-lottie&quot; data-og-url=&quot;https://github.com/chenqingspring/vue-lottie&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/npi3P/hyNxCpmanx/7na9rBYkOBAknBtTO7Q0t1/img.png?width=1200&amp;amp;height=600&amp;amp;face=958_112_1040_202&quot;&gt;&lt;a href=&quot;https://github.com/chenqingspring/vue-lottie&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/chenqingspring/vue-lottie&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/npi3P/hyNxCpmanx/7na9rBYkOBAknBtTO7Q0t1/img.png?width=1200&amp;amp;height=600&amp;amp;face=958_112_1040_202');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - chenqingspring/vue-lottie: Render After Effects animations on Vue based on Bodymovin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Render After Effects animations on Vue based on Bodymovin - GitHub - chenqingspring/vue-lottie: Render After Effects animations on Vue based on Bodymovin&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;vue-lottie 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645889387043&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save vue-lottie

or

yarn add vue-lottie&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645889458172&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;!-- width and height are optional --&amp;gt;
    &amp;lt;lottie :width=&quot;1024&quot; :height=&quot;1024&quot; :options=&quot;lottieOptions&quot; v-on:animCreated=&quot;handleAnimation&quot; /&amp;gt;
&amp;lt;/template&amp;gt;


import lottie from 'vue-lottie/src/lottie.vue'
import * as animationData from &quot;~/assets/animation.json&quot;;
export default {
  components: {
    lottie
  },
  data() {
    return {
      anim: null, // for saving the reference to the animation
      lottieOptions: { animationData: animationData.default }
    };
  },
  methods: {
    handleAnimation: function (anim) {
      this.anim = anim;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 사용법 + 옵션설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645889623120&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;div id=&quot;app&quot;&amp;gt;
        &amp;lt;lottie :options=&quot;defaultOptions&quot; :height=&quot;400&quot; :width=&quot;400&quot; v-on:animCreated=&quot;handleAnimation&quot;/&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;p&amp;gt;Speed: x{{animationSpeed}}&amp;lt;/p&amp;gt;
            &amp;lt;input type=&quot;range&quot; value=&quot;1&quot; min=&quot;0&quot; max=&quot;3&quot; step=&quot;0.5&quot;
                   v-on:change=&quot;onSpeedChange&quot; v-model=&quot;animationSpeed&quot;&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;button v-on:click=&quot;stop&quot;&amp;gt;stop&amp;lt;/button&amp;gt;
        &amp;lt;button v-on:click=&quot;pause&quot;&amp;gt;pause&amp;lt;/button&amp;gt;
        &amp;lt;button v-on:click=&quot;play&quot;&amp;gt;play&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
  import Lottie from './lottie.vue';
  import * as animationData from './assets/pinjump.json';

  export default {
    name: 'app',
    components: {
      'lottie': Lottie
    },
    data() {
      return {
        defaultOptions: {animationData: animationData},
        animationSpeed: 1
      }
    },
    methods: {
      handleAnimation: function (anim) {
        this.anim = anim;
      },

      stop: function () {
        this.anim.stop();
      },

      play: function () {
        this.anim.play();
      },

      pause: function () {
        this.anim.pause();
      },

      onSpeedChange: function () {
        this.anim.setSpeed(this.animationSpeed);
      }
    }
  }
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;추가) Component화&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법대로 사용해도 작동은 하나 불편한 점이 있다. lottie를 다양한 페이지에서 사용하고 싶을 때에 직접 lottie파일을 import해야한다는 점이다. 그래서 Nuxt에서 사용할 컴포넌트로 바꿔보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lottie.vue&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645893653885&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;lottie
      :options=&quot;defaultOptions&quot;
      :height=&quot;400&quot;
      :width=&quot;400&quot;
      @animCreated=&quot;handleAnimation&quot;
    /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import lottie from 'vue-lottie/src/lottie.vue';

export default {
  name: 'LottieComponent',
  components: {
    lottie
  },
  props: {
    animationData: {
      type: String,
      required: true,
    }
  },
  data() {
    return {
      defaultOptions: { animationData: null },
      animationSpeed: 1,
    }
  },
  created() {
    this.defaultOptions.animationData = require(&quot;~/assets/lottie/test-lottie.json&quot;);
  },

  methods: {
    handleAnimation (anim) {
      this.anim = anim;
    },

    stop() {
      this.anim.stop()
    },

    play() {
      this.anim.play()
    },

    pause() {
      this.anim.pause()
    },

    onSpeedChange() {
      this.anim.setSpeed(this.animationSpeed)
    },
  },
}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모든 페이지에서 다음과 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1645893696820&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Lottie animation-data=&quot;~/assets/lottie/test-lotte.json&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <category>Lottie</category>
      <category>Nuxt Lottie</category>
      <category>Vue Lottie</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/179</guid>
      <comments>https://vicapor.tistory.com/179#entry179comment</comments>
      <pubDate>Sun, 27 Feb 2022 01:42:06 +0900</pubDate>
    </item>
    <item>
      <title>Eslint Babel정리</title>
      <link>https://vicapor.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://eslint.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://eslint.org/&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;외부 모듈&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;globals&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nuxt.config.js에서 전역으로 script를 선언하고 페이지나 컴포넌트에서 사용하려고 하면 no-def 오류가 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴경우 eslint의 설정을 바꿔주는 것으로 해결 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.eslintrc.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645887770301&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  ...
  &quot;globals&quot;: {
    'daum': true
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 외부 모듈파일인 js 파일도 eslint를 적용시키는데 .eslintignore 파일을 통해 무시할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.eslintignore&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645887874548&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static/vendor/brython/brython-runner.bundle.js&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;console.log&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://eslint.org/docs/rules/no-console&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://eslint.org/docs/rules/no-console&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;eslint에서 console.log를 사용하면 경고를 표시한다.&lt;/p&gt;
&lt;pre id=&quot;code_1645888092263&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;rules&quot;: {
        &quot;no-console&quot;: &quot;off&quot;,
        &quot;no-restricted-syntax&quot;: [
            &quot;error&quot;,
            {
                &quot;selector&quot;: &quot;CallExpression[callee.object.name='console'][callee.property.name!=/^(log|warn|error|info|trace)$/]&quot;,
                &quot;message&quot;: &quot;Unexpected property on console object was called&quot;
            }
        ]
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 통해 console.log에 대한 경고 표시를 종료할 수 있다.&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/178</guid>
      <comments>https://vicapor.tistory.com/178#entry178comment</comments>
      <pubDate>Sun, 27 Feb 2022 00:08:48 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js Buefy Pagination</title>
      <link>https://vicapor.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Buefy의 Pagination을 이용해서 Nuxt에서 pagination을 구현해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645880684093&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;section&amp;gt;
        &amp;lt;b-pagination
            :total=&quot;200&quot; &amp;lt;!-- 전체 아이템 갯수 --&amp;gt;
            v-model=&quot;current&quot;
            :per-page=&quot;10&quot;&amp;gt; &amp;lt;!-- 페이지당 아이템 갯수 --&amp;gt;

            &amp;lt;template #default=&quot;props&quot;&amp;gt;
                &amp;lt;b-pagination-button
                    :page=&quot;props.page&quot;
                    :id=&quot;`page${props.page.number}`&quot;
                    tag=&quot;router-link&quot;
                    :to=&quot;`/documentation/pagination#page${props.page.number}`&quot;&amp;gt; &amp;lt;!-- hash를 사용한 url --&amp;gt;
                    {{ props.page.number }}
                &amp;lt;/b-pagination-button&amp;gt;
            &amp;lt;/template&amp;gt;


            &amp;lt;template #previous=&quot;props&quot;&amp;gt;
                &amp;lt;b-pagination-button
                    :page=&quot;props.page&quot;
                    tag=&quot;router-link&quot;
                    :to=&quot;`/documentation/pagination#page${props.page.number}`&quot;&amp;gt;
                    Previous
                &amp;lt;/b-pagination-button&amp;gt;
            &amp;lt;/template&amp;gt;

            &amp;lt;template #next=&quot;props&quot;&amp;gt;
                &amp;lt;b-pagination-button
                    :page=&quot;props.page&quot;
                    tag=&quot;router-link&quot;
                    :to=&quot;`/documentation/pagination#page${props.page.number}`&quot;&amp;gt;
                    Next
                &amp;lt;/b-pagination-button&amp;gt;
            &amp;lt;/template&amp;gt;

        &amp;lt;/b-pagination&amp;gt;
    &amp;lt;/section&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
    export default {
        data() {
            return {
                current: 10,
            }
        },
        watch: {
            $route: {
                immediate: true,
                handler(newVal, oldVal) {
                    if (newVal.hash) {
                        this.current = parseInt(newVal.hash.replace(/#page/g, '')) // url에서 #page 를 ''로 바꾸고 남은 숫자 (페이지 숫자를 가져온다.)
                    }
                },
            },
        }
    }
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;참고)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Replace()에서&amp;nbsp;치환을&amp;nbsp;당담하는것은,&amp;nbsp;정규식의&amp;nbsp;g&amp;nbsp;부분이다.&amp;nbsp;해당위치에&amp;nbsp;오는&amp;nbsp;문자에&amp;nbsp;따라서 &lt;br /&gt;&lt;br /&gt;g&amp;nbsp;:&amp;nbsp;문자열&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;패턴&amp;nbsp;체크 &lt;br /&gt;&lt;br /&gt;i&amp;nbsp;:&amp;nbsp;대소문자를&amp;nbsp;구별하지&amp;nbsp;않음 &lt;br /&gt;&lt;br /&gt;m&amp;nbsp;:&amp;nbsp;여러줄에&amp;nbsp;걸쳐서&amp;nbsp;체크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645881458014&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;v-for=&quot;(item, idx) in posts.slice(sliceStart, sliceEnd)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slice를 통해 데이터를 자른다음에 보여주면 된다. 페이지네이션이 되면 hash값으로 숫자를 얻을 수 있기 때문에 이를 계산하는 함수로 데이터를 처리해주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 만약에 페이지당 10개씩 데이터를 보여주게 된다면 sliceStart는 0이되고 sliceEnd는 10이 된다. 이후에 페이지 네이션이 될때마다 계산을 해주면 되는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;sliceEnd = 페이지네이션 번호 * 페이지당 보여줄 데이터 수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;sliceStart = sliceEnd - 페이지당 보여줄 데이터 수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 함수를 만들어서 계산하면 된다.&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <category>Nuxt Pagination</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/177</guid>
      <comments>https://vicapor.tistory.com/177#entry177comment</comments>
      <pubDate>Sat, 26 Feb 2022 22:21:30 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js 유용한 모듈 정리</title>
      <link>https://vicapor.tistory.com/176</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;nuxt-highlight.js&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/Llang8/nuxt-highlightjs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Llang8/nuxt-highlightjs&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645867861017&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - Llang8/nuxt-highlightjs: Highlight.js syntax highlighting for Nuxt.js&quot; data-og-description=&quot;Highlight.js syntax highlighting for Nuxt.js. Contribute to Llang8/nuxt-highlightjs development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Llang8/nuxt-highlightjs&quot; data-og-url=&quot;https://github.com/Llang8/nuxt-highlightjs&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/piB9L/hyNxOiPXxB/nZdinPiIdXaeKxsz7leH70/img.png?width=1200&amp;amp;height=600&amp;amp;face=973_151_1048_233&quot;&gt;&lt;a href=&quot;https://github.com/Llang8/nuxt-highlightjs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Llang8/nuxt-highlightjs&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/piB9L/hyNxOiPXxB/nZdinPiIdXaeKxsz7leH70/img.png?width=1200&amp;amp;height=600&amp;amp;face=973_151_1048_233');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - Llang8/nuxt-highlightjs: Highlight.js syntax highlighting for Nuxt.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Highlight.js syntax highlighting for Nuxt.js. Contribute to Llang8/nuxt-highlightjs development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pre태그와 code 태그를 사용하여 각 프로그래밍 언어를 하이라이트해주는 모듈이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;vue-dompurify-html&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/LeSuisse/vue-dompurify-html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/LeSuisse/vue-dompurify-html&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645867954814&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - LeSuisse/vue-dompurify-html: Safe replacement for the v-html directive&quot; data-og-description=&quot;Safe replacement for the v-html directive. Contribute to LeSuisse/vue-dompurify-html development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/LeSuisse/vue-dompurify-html&quot; data-og-url=&quot;https://github.com/LeSuisse/vue-dompurify-html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cIEGkK/hyNwVjzseX/EnXg7k6IrMLeXOKzxVK7jK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/LeSuisse/vue-dompurify-html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/LeSuisse/vue-dompurify-html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cIEGkK/hyNwVjzseX/EnXg7k6IrMLeXOKzxVK7jK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - LeSuisse/vue-dompurify-html: Safe replacement for the v-html directive&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Safe replacement for the v-html directive. Contribute to LeSuisse/vue-dompurify-html development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Editor로 작성된 데이터는 v-html을 통해 파싱해서 보여줘야한다. 다만 v-html은 xss공격에 취약해서 eslint 경고가 뜬다. 그럴경우 위 모듈을 사용해서 작성하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;moment-module&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/nuxt-community/moment-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/nuxt-community/moment-module&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645868104102&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - nuxt-community/moment-module: Efficient Moment.js integration for Nuxt&quot; data-og-description=&quot;Efficient Moment.js integration for Nuxt. Contribute to nuxt-community/moment-module development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/nuxt-community/moment-module&quot; data-og-url=&quot;https://github.com/nuxt-community/moment-module&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfxW80/hyNxIiBBvI/ZfnqpP61Hsv13zTBkTtqD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/nuxt-community/moment-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/nuxt-community/moment-module&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfxW80/hyNxIiBBvI/ZfnqpP61Hsv13zTBkTtqD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - nuxt-community/moment-module: Efficient Moment.js integration for Nuxt&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Efficient Moment.js integration for Nuxt. Contribute to nuxt-community/moment-module development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;new Date() 시간 객체를 지역 설정에 맞게 표시해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/176</guid>
      <comments>https://vicapor.tistory.com/176#entry176comment</comments>
      <pubDate>Sat, 26 Feb 2022 18:40:17 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js SCSS 사용</title>
      <link>https://vicapor.tistory.com/175</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Nuxt.js에서 SCSS를 사용하는 방법이다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/features/configuration/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nuxtjs.org/docs/features/configuration/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645856178783&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Configuration&quot; data-og-description=&quot;By default, Nuxt is configured to cover most use cases. This default configuration can be overwritten with the nuxt.config.js file.&quot; data-og-host=&quot;nuxtjs.org&quot; data-og-source-url=&quot;https://nuxtjs.org/docs/features/configuration/&quot; data-og-url=&quot;https://nuxtjs.org/docs/features/configuration/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdaY38/hyNxMyrpOD/k1ndi09a0hfkIEn1Lxl9xK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/LpkHy/hyNxMd72x8/1k4vV5DaoXc2dNIVKwKgtk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/features/configuration/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nuxtjs.org/docs/features/configuration/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdaY38/hyNxMyrpOD/k1ndi09a0hfkIEn1Lxl9xK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/LpkHy/hyNxMd72x8/1k4vV5DaoXc2dNIVKwKgtk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Configuration&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;By default, Nuxt is configured to cover most use cases. This default configuration can be overwritten with the nuxt.config.js file.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nuxtjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SASS Loader 설치&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1645856282237&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add --dev sass sass-loader@10
npm install --save-dev sass sass-loader@10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;nuxt.config.js 정의&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1645856604610&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default {
  css: [
    // Load a Node.js module directly (here it's a Sass file)
    'bulma',
    // CSS file in the project
    '~/assets/css/main.css',
    // SCSS file in the project
    '~/assets/css/main.scss'
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;추가)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCSS에서 Variable을 사용하고 싶을 때가 있을 것이다. 그럴경우 추가 Module을 설치해야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/nuxt-community/style-resources-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/nuxt-community/style-resources-module&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645857595189&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - nuxt-community/style-resources-module: Nobody likes extra @import statements!&quot; data-og-description=&quot;Nobody likes extra @import statements! Contribute to nuxt-community/style-resources-module development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/nuxt-community/style-resources-module&quot; data-og-url=&quot;https://github.com/nuxt-community/style-resources-module&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MVyOb/hyNxN5b0a8/fKHTCW6tChIFiYPMvhRKQk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/nuxt-community/style-resources-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/nuxt-community/style-resources-module&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MVyOb/hyNxN5b0a8/fKHTCW6tChIFiYPMvhRKQk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - nuxt-community/style-resources-module: Nobody likes extra @import statements!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Nobody likes extra @import statements! Contribute to nuxt-community/style-resources-module development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Style Resource라는 모듈이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645857694701&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add -D @nuxtjs/style-resources&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;nuxt.config.js&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1645857705535&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default {
  buildModules: ['@nuxtjs/style-resources'],
  styleResources: {
    scss: [
      './assets/vars/*.scss',
      './assets/abstracts/_mixins.scss' // use underscore &quot;_&quot; &amp;amp; also file extension &quot;.scss&quot;
      ]
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/175</guid>
      <comments>https://vicapor.tistory.com/175#entry175comment</comments>
      <pubDate>Sat, 26 Feb 2022 15:47:35 +0900</pubDate>
    </item>
    <item>
      <title>Nuxt.js Transition</title>
      <link>https://vicapor.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645849683829&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Transition | Vue.js&quot; data-og-description=&quot;&quot; data-og-host=&quot;vuejs.org&quot; data-og-source-url=&quot;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&quot; data-og-url=&quot;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2gpoV/hyNwWWU9BH/4jGtktoMX6k5IoEj8oakM1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://vuejs.org/guide/built-ins/transition.html#css-based-transitions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2gpoV/hyNwWWU9BH/4jGtktoMX6k5IoEj8oakM1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Transition | Vue.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;vuejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/features/transitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nuxtjs.org/docs/features/transitions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645849696204&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Transitions&quot; data-og-description=&quot;Nuxt uses the&amp;nbsp;transition component to let you create amazing transitions/animations between your routes.&quot; data-og-host=&quot;nuxtjs.org&quot; data-og-source-url=&quot;https://nuxtjs.org/docs/features/transitions&quot; data-og-url=&quot;https://nuxtjs.org/docs/features/transitions/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bPJ583/hyNw2JBX5N/xgQd0xUdVcsKrUxhR6uic0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bAPeHu/hyNxGkCnKD/BAYaBfFBCbmI4tqxJtq7y0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://nuxtjs.org/docs/features/transitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nuxtjs.org/docs/features/transitions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bPJ583/hyNw2JBX5N/xgQd0xUdVcsKrUxhR6uic0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bAPeHu/hyNxGkCnKD/BAYaBfFBCbmI4tqxJtq7y0/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Transitions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Nuxt uses the&amp;nbsp;transition component to let you create amazing transitions/animations between your routes.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nuxtjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Nuxt에서 transition을 사용하는 방법에 대해서 알아보자.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645860644801&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default {
  // Can be a String
  transition: ''
  // Or an Object
  transition: {}
  // or a Function
  transition (to, from) {}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;지역 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pages/index.vue&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645860699445&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default {
  transition: 'home'
}

&amp;lt;style&amp;gt;
  .home-enter-active, .home-leave-active { transition: opacity .5s; }
  .home-enter, .home-leave-active { opacity: 0; }
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;transition의 name을 home으로 설정했기 때문에 .home이 된다. test로 설정하면 .test이런식으로 설정이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전역 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;main.css&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;page변경 시 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645861577121&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.page-enter-active,
.page-leave-active {
  transition: opacity 0.5s;
}
.page-enter,
.page-leave-to {
  opacity: 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1645861591920&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default {
  css: ['~/assets/main.css']
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;layout변경 시 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645861649348&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.layout-enter-active,
.layout-leave-active {
  transition: opacity 0.5s;
}
.layout-enter,
.layout-leave-active {
  opacity: 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 default 설정을 바꾸고 싶다면 다음처럼 설정 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;nuxt.config.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645861776469&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Pages

export default {
  pageTransition: 'my-page'
  // or
  pageTransition: {
    name: 'my-page',
    mode: 'out-in',
    beforeEnter (el) {
      console.log('Before enter...');
    }
  }
}


// Layouts

export default {
  layoutTransition: 'my-layouts'
  // or
  layoutTransition: {
    name: 'my-layouts',
    mode: 'out-in'
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;추가)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;mode : out-in과 in-out이 있는데 기본 값은 out-in이다. in-out으로도 설정할 수 있다. transition이 안에서 밖으로 효과가 나타날것인지 아니면 반대로 나타날 것인지 설정해준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;:name=&quot;transitionName&quot; 동적으로 transition을 설정하여 사용할 수도 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front-End/Vue &amp;amp; Nuxt</category>
      <author>Vicapor</author>
      <guid isPermaLink="true">https://vicapor.tistory.com/174</guid>
      <comments>https://vicapor.tistory.com/174#entry174comment</comments>
      <pubDate>Sat, 26 Feb 2022 13:25:57 +0900</pubDate>
    </item>
  </channel>
</rss>