<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>lyj-ooz.log</title>
        <link>https://velog.io/</link>
        <description>사는 것도 디버깅의 연속. feel lucky to be different🌈 나의 작은 깃허브는 https://github.com/lyj-ooz</description>
        <lastBuildDate>Sun, 01 Aug 2021 15:10:09 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>lyj-ooz.log</title>
            <url>https://images.velog.io/images/lyj-ooz/profile/10766b73-e9b1-4340-965d-690ede70b62e/IMG_5108.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. lyj-ooz.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/lyj-ooz" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[nuxt: vue의 확장판]]></title>
            <link>https://velog.io/@lyj-ooz/nuxt-vue%EC%9D%98-%ED%99%95%EC%9E%A5%ED%8C%90</link>
            <guid>https://velog.io/@lyj-ooz/nuxt-vue%EC%9D%98-%ED%99%95%EC%9E%A5%ED%8C%90</guid>
            <pubDate>Sun, 01 Aug 2021 15:10:09 GMT</pubDate>
            <description><![CDATA[<p>nuxt는 vue를 좀 더 편하게 사용할 수 있기 위해 몇 가지 기능을 더 추가한 vue의 확장판이다. 그래서 vue에서 하던 것들을 그대로 하되 nuxt에서만 추가된 속성, 기능들이 있다.</p>
<p>예) layout: {...}, head: {...}</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[layouts: 레이아웃도 여러 개일 수 있다.]]></title>
            <link>https://velog.io/@lyj-ooz/layouts-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83%EB%8F%84-%EC%97%AC%EB%9F%AC-%EA%B0%9C%EC%9D%BC-%EC%88%98-%EC%9E%88%EB%8B%A4</link>
            <guid>https://velog.io/@lyj-ooz/layouts-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83%EB%8F%84-%EC%97%AC%EB%9F%AC-%EA%B0%9C%EC%9D%BC-%EC%88%98-%EC%9E%88%EB%8B%A4</guid>
            <pubDate>Sun, 01 Aug 2021 15:01:39 GMT</pubDate>
            <description><![CDATA[<p>로그인된 유저의 레이아웃, 로그인 하지 않은 유저의 레이아웃, 관리자의 레이아웃 등...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[:key에 index를 써도 되는 경우, 안되는 경우]]></title>
            <link>https://velog.io/@lyj-ooz/key%EC%97%90-index%EB%A5%BC-%EC%8D%A8%EB%8F%84-%EB%90%98%EB%8A%94-%EA%B2%BD%EC%9A%B0-%EC%95%88%EB%90%98%EB%8A%94-%EA%B2%BD%EC%9A%B0</link>
            <guid>https://velog.io/@lyj-ooz/key%EC%97%90-index%EB%A5%BC-%EC%8D%A8%EB%8F%84-%EB%90%98%EB%8A%94-%EA%B2%BD%EC%9A%B0-%EC%95%88%EB%90%98%EB%8A%94-%EA%B2%BD%EC%9A%B0</guid>
            <pubDate>Sun, 01 Aug 2021 14:25:38 GMT</pubDate>
            <description><![CDATA[<p>*<em>key에 들어있는 값은 화면을 다시 그려야할지 말지 판단하는 기준이 된다.
*</em></p>
<ol>
<li><p>index가 변하지 않는 경우에는 key에 index를 넣어도 괜찮을 듯! </p>
<ul>
<li>예: [1, 2, 3, 4, 5] 라는 배열이 있을 때 이 배열의 원소가 계속 늘어나거나 수정만 될 때. 계속 늘어나거나 원소 값이 수정되어도 인덱스는 같으니까.</li>
</ul>
</li>
<li><p>index가 변하는 경우에는 key에 다른 값을.. </p>
<ul>
<li>예: [1, 2, 3, 4, 5, 6, 7] 라는 배열에서 만약 3이 지워지면 3에 대한 것만 업데이트 될 것 같지만 사실은 그 다음에 있는 4, 5, 6, 7의 인덱스도 바뀌기 때문에 4, 5, 6, 7 모두 다시 그려지게 됨. 불필요한 렌더링 발생</li>
</ul>
</li>
<li><p>그럼 무엇을 key로 사용하나...?</p>
<ul>
<li>index + math.random() .. 정도..</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[자식 컴포넌트에 데이터 전달하는 2가지 방법]]></title>
            <link>https://velog.io/@lyj-ooz/%EC%9E%90%EC%8B%9D-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94-2%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@lyj-ooz/%EC%9E%90%EC%8B%9D-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94-2%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sun, 01 Aug 2021 14:12:12 GMT</pubDate>
            <description><![CDATA[<ol>
<li>props로 전달</li>
<li>slot 사용: 여는 태그, 닫는 태그 사이에 또 다른 태그를 넣어준다. 해당 자식 컴포넌트에 가서 새로 추가한 태그가 들어올 자리를 &lt;slot&gt;이라고 적는다. <pre><code>&lt;div&gt;
&lt;table-component&gt;
 &lt;tr&gt;
   &lt;td&gt;1&lt;/td&gt;
   &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
&lt;/table-component&gt;
&lt;/div&gt;
</code></pre></li>
</ol>
<!-- TableComponent.vue -->
<table>
  <slot />
</table>
```
3. slot을 여러 개 사용할 수도 있고, slot에 이름도 줄 수 있고, slot 기본값도 설정할 수 있다. 

<ul>
<li>슬롯을 사용하는 장점?
slot에 들어가는 태그들에 사용되는 메소드나 데이터들은 다 부모 컴포넌트에 있다. 즉 부모 컴포넌트의 데이터, 메소드, computed 등에 접근할 수 있다는 것이 장점! -&gt; IoC현상(inversion of control: 원래 자식 컴포넌트에서 컨트롤 되어야 했을 것들을 부모 컴포넌트에서 컨트롤한다)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[export default...]]></title>
            <link>https://velog.io/@lyj-ooz/export-default</link>
            <guid>https://velog.io/@lyj-ooz/export-default</guid>
            <pubDate>Fri, 30 Jul 2021 15:23:15 GMT</pubDate>
            <description><![CDATA[<p>export default .. : 한 파일에서 가장 중요한 딱 하나만 export default.. 붙인다.
나머지 자잘한 것들은 export const number 이런 식으로 여러 개 만들 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[object dynamic property]]></title>
            <link>https://velog.io/@lyj-ooz/object-dynamic-property</link>
            <guid>https://velog.io/@lyj-ooz/object-dynamic-property</guid>
            <pubDate>Fri, 30 Jul 2021 15:16:24 GMT</pubDate>
            <description><![CDATA[<p>vue에서의 동적 속성 (es2016이기도 함)</p>
<pre><code class="language-javascript">export const SET_NUMBER = &#39;SET_NUMBER&#39;;
//위처럼 모듈로 만들어 다른 파일에서도 사용할 수 있음.
//string으로 놔두면 오타가 생길 우려가 있기 때문에 변수명으로 바꾼것.
mutations: {
    [SET_NUMBER](state, number){
      ...
    }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Vue.set & this.$set]]></title>
            <link>https://velog.io/@lyj-ooz/Vue.set-this.set</link>
            <guid>https://velog.io/@lyj-ooz/Vue.set-this.set</guid>
            <pubDate>Fri, 30 Jul 2021 14:45:49 GMT</pubDate>
            <description><![CDATA[<p>vue에서 데이터를 변경하면 그에 따라 화면도 업데이트 된다고 했다. </p>
<p>그런데 배열로된 데이터를 인덱스로 접근하여 업데이트 했는데 화면은 그대로인 경우가 있다. </p>
<p>이럴 때는 Vue.set 또는 this.$set을 사용하여 배열 데이터의 인덱스를 사용하여 데이터를 업데이트 하고 화면도 업데이트 되도록 할 수 있다. </p>
<pre><code class="language-javascript">import Vue from &#39;vue&#39;
...
Vue.set(...)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[vuex]]></title>
            <link>https://velog.io/@lyj-ooz/vuex</link>
            <guid>https://velog.io/@lyj-ooz/vuex</guid>
            <pubDate>Fri, 30 Jul 2021 14:37:57 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>vuex는 store 파일이 여러 개여도 괜찮다.</p>
</li>
<li><p>vuex 필수 4요소</p>
<ul>
<li>state: vue의 데이터(data)와 비슷</li>
<li>getters: vue의 computed와 비슷</li>
<li>mutations: 위의 state를 수정할 때 사용. state를 수정할 때는 mutation를 통해 바꿔야 한다. 동기적인 작업할 때. 하나씩 하나씩 작동.</li>
<li>actions: 비동기를 사용할 때. 여러 mutation을 연달아 실행할 때.</li>
</ul>
</li>
<li><p>mutation의 함수 이름은 대문자로!</p>
</li>
<li><p>vue 컴포넌트에서 vuex의 state를 가져오려면 computed 에서 불러야 한다. </p>
<ul>
<li>이 때, vuex의 state가 너무 많으면 이것도 번거로울 수 있는데 이 때는 mapState를 이용하면 훨씬 코드가 간결해진다 (공식문서 참고)</li>
<li>mapState, mapGetters, mapActions... 다 있음</li>
</ul>
</li>
<li></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[EventBus]]></title>
            <link>https://velog.io/@lyj-ooz/EventBus</link>
            <guid>https://velog.io/@lyj-ooz/EventBus</guid>
            <pubDate>Fri, 30 Jul 2021 14:12:03 GMT</pubDate>
            <description><![CDATA[<p>EventBus: 이벤트를 중앙에서 통제
Vuex는 데이터를 중앙에서 통제</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[async]]></title>
            <link>https://velog.io/@lyj-ooz/async</link>
            <guid>https://velog.io/@lyj-ooz/async</guid>
            <pubDate>Wed, 21 Jul 2021 15:13:30 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>모든 함수 앞에는 async를 붙일 수 있다.</p>
</li>
<li><p>async는 await을 사용하기 위해서, await은 promise 처리를 위해서 사용.</p>
</li>
<li><p>async &amp; await은 콜백 hell에서 벗어나게 해줌. 또는 비동기 작업을 깔끔하게 처리하거나.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[vue-devtools & 성능]]></title>
            <link>https://velog.io/@lyj-ooz/vue-devtools-%EC%84%B1%EB%8A%A5</link>
            <guid>https://velog.io/@lyj-ooz/vue-devtools-%EC%84%B1%EB%8A%A5</guid>
            <pubDate>Wed, 21 Jul 2021 15:10:50 GMT</pubDate>
            <description><![CDATA[<p>크롬 확장 프로그램을 설치하면 사용할 수 있는 vue-devtools의 기능 중에 1초에 몇 프레임이 그려지는지, 퍼포먼스가 어떤지 보여주는 탭이 있다. </p>
<ul>
<li><p>Frames per second
: 초당 60프레임 이하면 눈에 조금 버벅거리는게 보이기 때문에 최소 초당 60 프레임 이상이 되도록 노력해야 한다. </p>
</li>
<li><p>component render
: 라이프사이클 관련 메소드들이 각 몇 번 호출되고 있는지 나온다. 컴포넌트가 하나 업데이트 되었을때 count도 하나만 올라가는지 유심히 살펴보자. 필요 이상의 숫자가 증가하면 쓸데없는 컴포넌트도 다시 렌더링 되고 있다는 뜻이다. </p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Lifecycle]]></title>
            <link>https://velog.io/@lyj-ooz/Lifecycle</link>
            <guid>https://velog.io/@lyj-ooz/Lifecycle</guid>
            <pubDate>Wed, 21 Jul 2021 14:25:28 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>없다가 생기는 순간(아직 화면에 보이기 전임, template에 데이터들 붙이고..그러고 난 후에)에 created()</p>
</li>
<li><p>실제 화면에 그려지는 순간에, 화면에 보인 후에 mounted()</p>
</li>
<li><p>데이터가 바뀌거나 해서 화면이 바뀔 때, 화면이 다시 그려질 때, updated()</p>
</li>
<li><p>컴포넌트가 화면에서 사라질 때 destroyed()</p>
</li>
<li><p>beforeDestroy(): 컴포넌트가 화면에서 사라지기 전에 정리할 것들 정리하기 (메모리 누수 방지)</p>
</li>
</ul>
<p>** 메모리 누수? 쓸데없는 것이 계속 실행되고 있거나 남아있는 것</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[template 사용하기]]></title>
            <link>https://velog.io/@lyj-ooz/template-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@lyj-ooz/template-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 20 Jul 2021 14:36:42 GMT</pubDate>
            <description><![CDATA[<p>단순히 감싸는 용도로 div를 사용했다면 div 대신에 template을 사용할 수 있다.</p>
<ul>
<li>다만 가장 상위 태그는 template을 사용할 수는 없다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[v-show와 v-if]]></title>
            <link>https://velog.io/@lyj-ooz/v-show%EC%99%80-v-if</link>
            <guid>https://velog.io/@lyj-ooz/v-show%EC%99%80-v-if</guid>
            <pubDate>Tue, 20 Jul 2021 14:33:57 GMT</pubDate>
            <description><![CDATA[<ul>
<li>v-show: dom이 생성되어 있고 그 요소에는 display:none이 적용되어 있음.(태그는 있으나 안보일뿐)</li>
<li>v-if: 화면에 아예 없음(태그 자체가 없음)</li>
</ul>
<p>태그 하나가 있냐 없냐는 전체 레이아웃 구조에 영향을 줄 수 있기 때문에 태그의 유무는 중요하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[computed 사용하기]]></title>
            <link>https://velog.io/@lyj-ooz/computed-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@lyj-ooz/computed-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 20 Jul 2021 14:27:09 GMT</pubDate>
            <description><![CDATA[<p>조금이라도 data들이 가공된다거나 data가 그 자체로 사용되지 않고 data에 뭔 짓(?)을 해야한다! 라고 하면 computed로 사용하자</p>
<p>computed는 성능과 관련이 많기 때문에 신경 쓰는 것이 좋다고 한다. </p>
<p>그리고 data가 바뀌면 computed도 알아서 바뀌어 다시 계산을 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[RxJS 1]]></title>
            <link>https://velog.io/@lyj-ooz/RxJS-1</link>
            <guid>https://velog.io/@lyj-ooz/RxJS-1</guid>
            <pubDate>Mon, 19 Jul 2021 15:07:14 GMT</pubDate>
            <description><![CDATA[<h2 id="rxjs-개발-방법">RxJS 개발 방법</h2>
<ol>
<li>데이터를 Observable로 변경</li>
<li>오퍼레이터를 통해 변경 또는 추출 또는 여러 개의 Observable을 결합 또는 분리</li>
<li>원하는 데이터를 처리할 Observer를 생성</li>
<li>Observable의 subscribe를 통해 Observer를 등록</li>
<li>Observable의 구독을 정지하고 자원을 해제</li>
</ol>
<h3 id="리액티브-프로그래밍의-기본-패턴">리액티브 프로그래밍의 기본 패턴</h3>
<ul>
<li><p>어떠한 동작을 하기 위해 데이터/이벤트를 Observable로 생성 -&gt; .pipe() 메소드 안에서 필요한 오퍼레이터로 데이터를 조작/가공 -&gt; 이렇게 나온 데이터를 구독하여 어떤 행위를 할 것인지 observer 전달</p>
</li>
<li><p>observer에는 Observable을 가지고 어떤 행위를 할 것인지가 정의되어 있다. next, error, complete 함수를 가진 객체.</p>
<pre><code>const user$ = from(...).pipe(
  switchMap(data =&gt; ...),
  filter(user =&gt; ...),
  map(user =&gt; ...)
)
const observer = {
  next : x =&gt; console.log(`Observer가 Observable로 받은 데이터: ${x}`),
  error: err =&gt; console.error(`Observer가 Observable로 받은 에러 데이터: ${error}`),
  complete: () =&gt; console.log(`Observer가 Observable로 부터 종료 되었다는 알림 메시지`)
}
user$.subscribe(observer)</code></pre></li>
<li><p>데이터를 쓸데없이 계속 전달받지 않아야 할 때는 구독 취소하여 자원을 해제해야 한다. (이벤트 핸들러, interval 같은 것들..)</p>
<pre><code>const sub = user$.subscribe(observer)
sub.unsubscribe() </code></pre></li>
<li><p>Observable로 생성된 객체는 변수 끝에 $을 붙인다.</p>
</li>
<li><p>Observable을 생성하는 메소드: from(), fromEvent()</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[dom 요소 직접 접근할 필요가 있을 때: ref ]]></title>
            <link>https://velog.io/@lyj-ooz/dom-%EC%9A%94%EC%86%8C-%EC%A7%81%EC%A0%91-%EC%A0%91%EA%B7%BC%ED%95%A0-%ED%95%84%EC%9A%94%EA%B0%80-%EC%9E%88%EC%9D%84-%EB%95%8C-ref</link>
            <guid>https://velog.io/@lyj-ooz/dom-%EC%9A%94%EC%86%8C-%EC%A7%81%EC%A0%91-%EC%A0%91%EA%B7%BC%ED%95%A0-%ED%95%84%EC%9A%94%EA%B0%80-%EC%9E%88%EC%9D%84-%EB%95%8C-ref</guid>
            <pubDate>Wed, 14 Jul 2021 13:30:23 GMT</pubDate>
            <description><![CDATA[<p>데이터는 아닌데 직접 html 태그에 접근해야 하는 경우에는 ref를 사용한다. </p>
<pre><code class="language-javascript">&lt;input type=&quot;text&quot; ref=&quot;answer&quot;/&gt;</code></pre>
<p>이제 위 input태그는 vue에서 &#39;answer&#39;라는 이름으로 접근할 수 있게 된다.  (this.$refs.answer 이런 식으로 접근)</p>
<ul>
<li>다만 남발하지 말고 데이터로 도저히 컨트롤이 되지 않는 상황에서만 ref를 사용하자.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[입력하는 값과 data를 연결해주는 v-model]]></title>
            <link>https://velog.io/@lyj-ooz/%EC%9E%85%EB%A0%A5%ED%95%98%EB%8A%94-%EA%B0%92%EA%B3%BC-data%EB%A5%BC-%EC%97%B0%EA%B2%B0%ED%95%B4%EC%A3%BC%EB%8A%94-v-model</link>
            <guid>https://velog.io/@lyj-ooz/%EC%9E%85%EB%A0%A5%ED%95%98%EB%8A%94-%EA%B0%92%EA%B3%BC-data%EB%A5%BC-%EC%97%B0%EA%B2%B0%ED%95%B4%EC%A3%BC%EB%8A%94-v-model</guid>
            <pubDate>Wed, 14 Jul 2021 13:14:14 GMT</pubDate>
            <description><![CDATA[<p>input에서 바뀌는 값을 data에도 받고 싶다...? -&gt; <strong>v-model</strong></p>
<p><strong>v-model이 input과 data를 연결하는 것임.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[vue 1]]></title>
            <link>https://velog.io/@lyj-ooz/vue-1</link>
            <guid>https://velog.io/@lyj-ooz/vue-1</guid>
            <pubDate>Wed, 14 Jul 2021 12:59:02 GMT</pubDate>
            <description><![CDATA[<p>데이터만 잘 컨트롤하면 뷰가 화면은 알아서 바꿔준다.
그러니 데이터(data) 잘 만들고, 메소드(methods) 잘 만드는 것에 집중해야 한다. 
<strong>vue나 react나 코드 작성할 때, 항상 무엇이 바뀔지를 먼저 생각해야 한다.</strong>
(인풋의 입력도 &#39;바뀌는 행위&#39; 중 하나이다.) 
<strong>바뀌는 부분이 데이터 data가 된다.</strong></p>
<p>그리고 v-on, v-if 처럼 &#39;v-&#39;가 붙은 속성의 따옴표 안에는 자바스크립트 코드를 작성할 수 있다. </p>
<pre><code class="language-javascript">&lt;button v-if=&quot;data + 1 === 5&quot;&gt;&lt;/button&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[v-model = ? + ?]]></title>
            <link>https://velog.io/@lyj-ooz/v-model</link>
            <guid>https://velog.io/@lyj-ooz/v-model</guid>
            <pubDate>Sun, 11 Jul 2021 13:06:24 GMT</pubDate>
            <description><![CDATA[<p>v-model = v-bind:value + v-on:input\</p>
<p>그래서 v-model을 사용하면 그 하위 컴포넌트에서 value라는 props를 받게 된다.</p>
<p>아직 vue가 어색하니 일단 이렇게 외운다..........</p>
]]></description>
        </item>
    </channel>
</rss>