<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Jin__A.log</title>
        <link>https://velog.io/</link>
        <description>병아리 삐약삐약🐣</description>
        <lastBuildDate>Mon, 17 Jan 2022 06:02:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Jin__A.log</title>
            <url>https://images.velog.io/images/jina__lee/profile/fe2015ea-2943-44c1-a0ca-7f388d287e45/3472395150498107940_20190209020636701.JPG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Jin__A.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jina__lee" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[오픈소스: react-markdown]]></title>
            <link>https://velog.io/@jina__lee/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-react-markdown</link>
            <guid>https://velog.io/@jina__lee/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-react-markdown</guid>
            <pubDate>Mon, 17 Jan 2022 06:02:23 GMT</pubDate>
            <description><![CDATA[<h1 id="react-markdown">react-markdown</h1>
<h2 id="오픈소스-분석기-🔎">오픈소스 분석기 🔎</h2>
<p>react-markdown 은 <strong>리액트 내에서 마크다운을 랜더링 시켜주는 라이브러리</strong>이다. 사용법이 쉽고 간단하다고 생각하는 라이브러리 중 하나이다.</p>
<p>실제로 사용해본 오픈소스를 분석해보는게 좋지 않을까 싶어서 시작하였는데 쉽지 않았다는 점 🥲</p>
<p><a href="https://github.com/remarkjs/react-markdown">react-markdown github</a> 에서 먼저 현재도 활성화된 오픈소스인지를 확인했는데, issue 와 pr 도 꾸준히 closed, merged 되고 있는 오픈소스였다. 🙌</p>
<h3 id="인기가-얼마나-많게요-">인기가 얼마나 많게요 ~?</h3>
<p><img src="https://images.velog.io/images/jina__lee/post/c955cc8a-7554-4aa0-8cbf-d28edb2759d4/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-12-28%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.05.18.png" alt="react-markdown screenshot"></p>
<ul>
<li>현재 글을 작성하고 있는 시점(22/01/17)에는 스크린샷보다 star, 배포버전, forks 수도 더 많아졌다. 😂<ul>
<li>7.1.2 버전</li>
<li>714 forks</li>
<li>8.2k stars </li>
</ul>
</li>
</ul>
<h3 id="간단한-사용법">간단한 사용법</h3>
<ul>
<li>react-markdown 을 설치후 import 해온 뒤 render 하려는 jsx 구문을 <ReactMarkdown>으로 감싼다.<ul>
<li><code>$ npm install react-markdown</code></li>
</ul>
</li>
<li>해당 객체에 필요에 따라 props 값을 전달한다.</li>
</ul>
<pre><code class="language-typescript">import React from &#39;react&#39;
import ReactMarkdown from &#39;react-markdown&#39;
import ReactDom from &#39;react-dom&#39;
import remarkGfm from &#39;remark-gfm&#39;

const markdown = `A paragraph with *emphasis* and **strong importance**.

&gt; A block quote with ~strikethrough~ and a URL: https://reactjs.org.

* Lists
* [ ] todo
* [x] done

A table:

| a | b |
| - | - |
`

ReactDom.render(
  &lt;ReactMarkdown children={markdown} remarkPlugins={[remarkGfm]} /&gt;,
  document.body
)</code></pre>
<h3 id="테스트-도구">테스트 도구</h3>
<ul>
<li>주로 사용하는 테스트 api 로는 uvu 를 사용</li>
<li>github action 이용 <ul>
<li>gihub action: github 내에서 개발 워크플로우를 자동화 시켜준다 (e.g) test, build, release ... )</li>
<li><a href="https://docs.github.com/en/actions">github action docs</a> 에서 자세한 내용은 참고하길 바란다. </li>
</ul>
</li>
</ul>
<h3 id="주요-객체-및-core-한-코드는">주요 객체 및 core 한 코드는?</h3>
<ul>
<li>API 에 나와있는것과 같이 <strong>ReactMarkdown</strong> 이 주요 객체라 생각.</li>
<li>markdown editor 에서 core 한 부분은 아무래도 파서를 이용해서 react element 를 사용하는 부분이 아닐까 생각했다.<ul>
<li><a href="https://github.com/remarkjs/react-markdown/blob/main/lib/react-markdown.js">react-markdown/lib/react-markdown.js </a></li>
</ul>
</li>
</ul>
<blockquote>
<p>솔직히 지금 글을 작성하는 병아리 단계에서 뭐가 core 한 코드인지 제대로 파악할지 잘 모르겠지만, 완전 헛다리 짚고있다면 둥글둥글 댓글 남겨주시면 수정하도록 하겠다. 😂
  그래도 계속해서 코드를 읽다보면 뭐가 중요한지 파악할수있지않을까 🥲 </p>
</blockquote>
<h3 id="끝으로">끝으로</h3>
<p>내가 이해한 내용을 토대로 정리를 하려고 하다보니 너무 내용이 없어서 이렇게 작성해도 되나 싶었다. 😂
아무래도 중요한 내용을 많이 이해하지 못했기 때문이겠지.. 
다음에는 좀 더 구체적이고 딥한 작성을 하길 바라면서 마무리하려고 한다. </p>
<blockquote>
<p>출처: <a href="https://github.com/remarkjs/react-markdown">react-markdown github</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[이진탐색(binary search)]]></title>
            <link>https://velog.io/@jina__lee/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89</link>
            <guid>https://velog.io/@jina__lee/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89</guid>
            <pubDate>Mon, 20 Dec 2021 14:44:47 GMT</pubDate>
            <description><![CDATA[<h1 id="💁-이진탐색">💁‍ 이진탐색</h1>
<pre><code>const list = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, ...]</code></pre><h2 id="🤷-탐색">🤷‍ 탐색?</h2>
<ul>
<li>이러한 배열이 있을때, 원하는 값을 찾는 문제를 <strong>탐색문제</strong></li>
<li>&#39;a&#39; 부터 하나씩 찾는 방법을 <strong>단순 탐색(simple search)</strong></li>
<li>배열의 중간부터 찾기 시작하는 방법 <strong>이진 탐색(binary search)</strong><ul>
<li>이진 탐색 알고리즘은 리스트에 원하는 원소가 있다면 그 원소의 위치를 반환</li>
<li>그렇지 않을때에는 -1 이나 null 과 같은 값을 반환</li>
</ul>
</li>
</ul>
<h3 id="예제-🔎">예제 🔎</h3>
<pre><code class="language-javascript">function binarySearch(list, item){
  // low 와 high 는 탐색해야하는 범위
  let low = 0
  let high = list.length - 1

  while (low &lt;= high) { // 탐색해야 하는 범위 제한
    let mid = parseInt((low + high)/2) // 중간
    let guess = list[mid]
    if(guess === item){
      return mid
    } 
    if(guess &gt; item){
      high = mid - 1
    } else {
      low = mid + 1 
    }
  }

const myList = [1, 3, 5, 7, 9]

console.log(binarySearch(myList, 7)) // 3
console.log(binarySearch(myList, -1)) // -1
</code></pre>
<h2 id="🙆-뭐가-좋은건데">🙆‍ 뭐가 좋은건데?</h2>
<ul>
<li><strong>시간 절약 -&gt; 즉 비용이 절약 된다.</strong><ul>
<li>단순 탐색 방법을 이용하면 처음부터 찾는 item 까지 계속해서 확인해야한다. 즉 추측해야 할 최대 횟수는 리스트의 길이와 같다.(이런것을 <strong>선형시간(linear time)</strong> 이라고 한다.)</li>
<li>하지만 이진 탐색은 리스트에 8개가 있다면 최대 3번만 확인해도 된다. (<strong>로그시간(logarithmic time)</strong>)</li>
</ul>
</li>
</ul>
<blockquote>
<p>hello coding 그림으로 개념을 이해하는 알고리즘 을 참고하여 작성하였습니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Redux  - 기초 개념]]></title>
            <link>https://velog.io/@jina__lee/Redux-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0</link>
            <guid>https://velog.io/@jina__lee/Redux-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0</guid>
            <pubDate>Fri, 12 Feb 2021 04:56:02 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-redux---개념잡기-💫">💻 Redux - 개념잡기 💫</h1>
<h2 id="💡-리덕스란-">💡 리덕스란 ?</h2>
<p>JS로 만든 APP 들을 위한 예측가능한 상태의 저장소</p>
<ul>
<li>단일 스토어 ( App 의 상태가 궁금할때는 reducer 이용 )</li>
<li>중앙 집중적인 데이터 스토어를 통해 앱을 쉽게 개발</li>
<li>Redux dev Tool 을 통해 파일 다운 -&gt; Import -&gt; 내역 복원 가능 
<span style="color:gray;">(시간 여행 가능 ! : 내가 선택하고 바꾼 값을 비디오처럼 확인 가능)</span></li>
<li>부품끼리의 의존적이지 않은 코드 </li>
</ul>
<h3 id="👉-리덕스-동작">👉 리덕스 동작</h3>
<ul>
<li>state</li>
<li>render : state를 기반으로 화면에 그린다.</li>
<li>dispatch : 값 변경하기</li>
<li>subscribe : 값이 변경되었을때 구동될 함수를 등록 </li>
<li>getState : 값 가져오기 
_<span style="color:gray;">state 에 직접 접근하는것이 금지되어있기 때문에 해당 동작들을 이용한다.</span>_</li>
<li>reducer: state 값을 변경한다.
_<span style="color:gray;">state 라는 문서에 값을 수정하는 사람이라고 생각!</span>_</li>
</ul>
<h3 id="👉-reducer-초기화">👉 reducer 초기화</h3>
<pre><code class="language-javascript"> function reducer (state, action){
     if(state === undefined){
           // 최초의 초기화 단계 
           // state 값이 정의되어 있지 않는 상태에서 reducer 가 호출되었다.
            return { color: &quot;yellow&quot;}
        }
    }

    var store = Redux.createStore(reducer);

    function red() {
        var state = store.getState()
        document.querySelector(&#39;#red&#39;).innerHTML = `
        &lt;div class=&quot;container&quot; id=&quot;component_red&quot; style=&quot;background-color:${state.color}&quot;&gt;
            &lt;h1&gt;red&lt;/h1&gt;
        &lt;/div&gt;
    `
    }
    red()
</code></pre>
<h3 id="👉-reducer의-역할">👉 Reducer의 역할</h3>
<pre><code class="language-javascript">// reducer function 안에서..
 var newState;
if(action.type === &quot;CHANGE_COLOR&quot;){
  newState = Object.assign({}, state, {color: action.color})
  // 두번째 인자가 첫번째 빈 객체에 복제되서 그 객체가 리턴된다. 
  // 세번째 인자가 덮어쓰게된다.  -&gt; 그 결과를 리턴
  // 불변성 때문에 복제 방법 사용
}
return newState</code></pre>
<ul>
<li>store 의 state 값을 변경해준다. </li>
<li>action의 state 값과 이전의 state 값을 이용해서 새로운 state 값을 return 해주면, 그 return 된 값이 <strong>새로운 state값</strong>이 된다
_<span style="color:gray;">원본을 바꾸는 것이 아닌 복제한 결과를 return 해야 함 (Redux를 최대한으로 활용 하기 위해서)</span>_</li>
</ul>
<h3 id="👉-subscribe-의-역할">👉 Subscribe 의 역할</h3>
<ul>
<li>state의 값이 변동되는지 구독 -&gt; subscribe <pre><code class="language-javascript">store.subscribe(구독할 함수이름)</code></pre>
</li>
</ul>
<p>🐥<a href="https://github.com/jina95/redux-tutorial/blob/master/main.html">샘플코드 : main.html</a></p>
<blockquote>
<p>출처 : 생활코딩 Redux 
<a href="https://www.inflearn.com/course/redux-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9">https://www.inflearn.com/course/redux-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9</a></p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>