<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>brandy의 개발계발</title>
    <link>https://brandycoding.tistory.com/</link>
    <description>brandy의 개발자 성장 이야기 
Github : https://github.com/seungmiKim1</description>
    <language>ko</language>
    <pubDate>Sat, 22 Aug 2026 12:16:57 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bran_dy</managingEditor>
    <image>
      <title>brandy의 개발계발</title>
      <url>https://tistory1.daumcdn.net/tistory/4377860/attach/18d30072d16843c4a258516082959643</url>
      <link>https://brandycoding.tistory.com</link>
    </image>
    <item>
      <title>주식 책 공유</title>
      <link>https://brandycoding.tistory.com/190</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/unscripted87/222651213532&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/unscripted87/222651213532&lt;/a&gt;&lt;/p&gt;</description>
      <category>Book</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/190</guid>
      <comments>https://brandycoding.tistory.com/190#entry190comment</comments>
      <pubDate>Thu, 28 Jul 2022 13:44:36 +0900</pubDate>
    </item>
    <item>
      <title>웹 TIL) label,검색쿼리구조,드롭다운,value</title>
      <link>https://brandycoding.tistory.com/189</link>
      <description>&lt;pre id=&quot;code_1654837278495&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Forms Demo&amp;lt;/h1&amp;gt;

&amp;lt;form action=&quot;/tacos&quot;&amp;gt;
  &amp;lt;label for=&quot;username&quot;&amp;gt;Enter a Username:&amp;lt;/label&amp;gt;
  
  &amp;lt;p&amp;gt;
      &amp;lt;input id=&quot;username&quot; 
             type=&quot;text&quot; placeholder=&quot;username&quot;&amp;gt;
  &amp;lt;/p&amp;gt;
  
  &amp;lt;p&amp;gt;
  &amp;lt;label for=&quot;password&quot;&amp;gt;Enter a Password&amp;lt;/label&amp;gt;
       &amp;lt;input type=&quot;password&quot; placeholder=&quot;passsword&quot; id=&quot;password&quot;&amp;gt;
  &amp;lt;/p&amp;gt;
  
  &amp;lt;p&amp;gt;
    &amp;lt;label for=&quot;color&quot;&amp;gt;Enter a color&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;color&quot; id=&quot;color&quot;&amp;gt;
  &amp;lt;/p&amp;gt;
  
  &amp;lt;p&amp;gt;
      &amp;lt;label for=&quot;number&quot;&amp;gt;Enter a number&amp;lt;/label&amp;gt;
         &amp;lt;input type=&quot;number&quot; 
         placeholder=&quot;enter a number&quot; id=&quot;number&quot;&amp;gt;
  &amp;lt;/p&amp;gt;
       
&amp;lt;/form&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;b&gt;검색 쿼리 구조&amp;nbsp;&lt;/b&gt;&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;https://www.youtube.com/results&lt;b&gt;?search_query=dog&lt;/b&gt; &lt;br /&gt;//&amp;nbsp;네이버&amp;nbsp;https://search.naver.com/search.naver?where=nexearch&amp;amp;sm=top_hty&amp;amp;fbm=1&amp;amp;ie=utf8&lt;b&gt;&amp;amp;query=%EC%9E%94%EB%82%98%EB%B9%84&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;//Reddit &lt;/b&gt;https://www.reddit.com/search/&lt;b&gt;?q=rabbit&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;label&amp;gt; : 그동안 &amp;lt;label&amp;gt; 태그에 대해서 거의 잊다시피 했는데 웹부캠 강의를 들으면서 다시 한 번 상기할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;label&amp;gt;은 UI항목(버튼,텍스트 등) 등의 설명을 나타내는 태그이며&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;label&amp;gt; + &amp;lt;input&amp;gt;의 조합으로 쓴다. ScreenReader은 폼 입력에서 label을 읽어들어와 사용자가 입력해야 하는 텍스트가 무엇인지 설명한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드에서 만약 Enter a Password! 라는 문구를 커서로 클릭해보면 옆에 있는 password input 창이 활성화된다. 입력하라고 커서가 깜빡거린다. 나머지 항목들도 마찬가지이다.&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;lt;label&amp;gt;+&amp;lt;input&amp;gt;의 조합으로 쓸 때에는 반드시 태그 안에 id값을 지정해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 &amp;lt;label&amp;gt;에서는 id와 같은 값의 for 속성을 넣는다. (id가 color면 label for도 color)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clv6sH/btrEtaDhN7P/HBhAxxKxdioWitGRl5SBZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clv6sH/btrEtaDhN7P/HBhAxxKxdioWitGRl5SBZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clv6sH/btrEtaDhN7P/HBhAxxKxdioWitGRl5SBZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclv6sH%2FbtrEtaDhN7P%2FHBhAxxKxdioWitGRl5SBZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1051&quot; height=&quot;658&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 MDN 공식 문서에 따르면 label for ~ 보다는 label calss로 정의하고 for을 분리시켜주는걸 권장한다.&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;&lt;b&gt;드롭다운 메뉴 만들기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;select&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; ....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/select&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AU1Qs/btrErfrNB2q/mOM93f2CZRnwp6Ir1PGhp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AU1Qs/btrErfrNB2q/mOM93f2CZRnwp6Ir1PGhp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AU1Qs/btrErfrNB2q/mOM93f2CZRnwp6Ir1PGhp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAU1Qs%2FbtrErfrNB2q%2FmOM93f2CZRnwp6Ir1PGhp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;367&quot; height=&quot;89&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 submit 버튼을 누르면 form 내의 주소로 다이렉트 되는데 내 코드의 경우 경로 설정을 해주지 않았기 때문에 경로를 찾을 수 없다고 뜬다.&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;&lt;b&gt;value값은 데이터 전송 시 서버로 전송된다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654841186944&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  &amp;lt;h2&amp;gt;More Inputs&amp;lt;/h2&amp;gt;
  &amp;lt;form action=&quot;/birds&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; name=&quot;agree_tos&quot; id=&quot;agree&quot;&amp;gt;
    &amp;lt;label for=&quot;agree&quot;&amp;gt;I agree to everything&amp;lt;/label&amp;gt;
    &amp;lt;p&amp;gt;
      &amp;lt;label for=&quot;xs&quot;&amp;gt;XS:&amp;lt;/label&amp;gt;
      &amp;lt;input type=&quot;radio&quot; name=&quot;size&quot; id=&quot;xs&quot; value=&quot;xs&quot;&amp;gt;
      &amp;lt;label for=&quot;s&quot;&amp;gt;S:&amp;lt;/label&amp;gt;
       &amp;lt;input type=&quot;radio&quot; name=&quot;size&quot; id=&quot;s&quot; value=&quot;s&quot;&amp;gt;
         &amp;lt;label for=&quot;m&quot;&amp;gt;M :&amp;lt;/label&amp;gt;
       &amp;lt;input type=&quot;radio&quot; name=&quot;size&quot; id=&quot;m&quot; value=&quot;m&quot;&amp;gt;
    &amp;lt;/p&amp;gt; 
    &amp;lt;button&amp;gt;submit&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Web</category>
      <category>Brandy</category>
      <category>HTML</category>
      <category>til</category>
      <category>웹</category>
      <category>웹개발</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/189</guid>
      <comments>https://brandycoding.tistory.com/189#entry189comment</comments>
      <pubDate>Sat, 11 Jun 2022 00:58:05 +0900</pubDate>
    </item>
    <item>
      <title>블록체인 TIL) 블록 구조,SHA256</title>
      <link>https://brandycoding.tistory.com/188</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 블록체인은 레코드(SQL에서 행,튜플)이기 때문에 데이터를 갖고 있다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rhaLU/btrEjkyRJiT/aOmNxdee0F4lpclnQdtsxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rhaLU/btrEjkyRJiT/aOmNxdee0F4lpclnQdtsxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rhaLU/btrEjkyRJiT/aOmNxdee0F4lpclnQdtsxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrhaLU%2FbtrEjkyRJiT%2FaOmNxdee0F4lpclnQdtsxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;268&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&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;해시 : 블록의 지문 (이전 해시를 이용해 데이터를 표현하는 숫자. 64길이)&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. SHA256 : 길이 64 (256 bit)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0~9,A,B,C,D,E,F 문자가 올 수 있다 (16진법 해시이기 때문)&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;
&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;&lt;a href=&quot;https://tools.superdatascience.com/blockchain/hash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://tools.superdatascience.com/blockchain/hash&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654702894455&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;Tools - SuperDataScience&quot; data-og-description=&quot;&quot; data-og-host=&quot;tools.superdatascience.com&quot; data-og-source-url=&quot;https://tools.superdatascience.com/blockchain/hash&quot; data-og-url=&quot;https://tools.superdatascience.com/blockchain/hash&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tools.superdatascience.com/blockchain/hash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tools.superdatascience.com/blockchain/hash&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Tools - SuperDataScience&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;tools.superdatascience.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;&lt;b&gt;3. 해싱 알고리즘 조건&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-단방향 (암호&amp;gt;복호는 가능하지만 복호&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-쇄도 효과(Avalanche Effect) 동일한 문서에다가 아주 작은 변형. 즉 1비트에 변형을 가했을 때 아주 작은 변형이라도 해시 값이 완전히 달라져야 한다(안녕하세요,안녕하세요!의 해시값은 완전하비게 다르게 나온다)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-충돌 저항성(비둘기집 원리. A가 슬롯 B의 개수보다 많으면 충돌 발생. B보다 훨씬 큰 A를 B로 옮기면 충돌이 생기고 ~ ..하는데 가능성은 적다.)&amp;nbsp;&lt;/p&gt;</description>
      <category>BlockChain</category>
      <category>Brandy</category>
      <category>SHA256</category>
      <category>블록체인</category>
      <category>블록체인TIL</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/188</guid>
      <comments>https://brandycoding.tistory.com/188#entry188comment</comments>
      <pubDate>Thu, 9 Jun 2022 00:48:54 +0900</pubDate>
    </item>
    <item>
      <title>블록체인 TIL) Truffle,Ganache를 React에 연동하기 + React 오류 해결</title>
      <link>https://brandycoding.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- truffle을 VSCode에 연동 성공하면 아래와 같은 폴더 구성이 완료됨&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;contracts파일, migrations 파일, test,&amp;nbsp; client(Frontend)로 구성된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF5PXf/btrEhZ2CQDz/hY4zV7LbRFQQfiY7eNSZIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF5PXf/btrEhZ2CQDz/hY4zV7LbRFQQfiY7eNSZIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF5PXf/btrEhZ2CQDz/hY4zV7LbRFQQfiY7eNSZIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF5PXf%2FbtrEhZ2CQDz%2FhY4zV7LbRFQQfiY7eNSZIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;385&quot; height=&quot;432&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&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;1&lt;b&gt;. React에서 truffle을 사용해주기 위해 'truffle unbox react'를 사용해준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 CRA(Create-React-App)을 통해 쉽게 React 프로젝트를 VSCode에서 구현할 수 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etxygz/btrEfD0kaRv/v6Wq8bgxDxp9ktX6bYXpgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etxygz/btrEfD0kaRv/v6Wq8bgxDxp9ktX6bYXpgk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etxygz/btrEfD0kaRv/v6Wq8bgxDxp9ktX6bYXpgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fetxygz%2FbtrEfD0kaRv%2Fv6Wq8bgxDxp9ktX6bYXpgk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;177&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contracts 안에서 SimpleStorage.sol에서 컨트랙트 파일 작성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Migrations.sol은 삭제하면 안된다.&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;2. Ganache 시작&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가나쉐를 설치해주고(SW 설치 필요) Quick start를 통해 테스트용 주소 작성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;1005&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdYfRq/btrEgo9vg1Y/SPFsnLOMDQCMz4OSu7TxZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdYfRq/btrEgo9vg1Y/SPFsnLOMDQCMz4OSu7TxZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdYfRq/btrEgo9vg1Y/SPFsnLOMDQCMz4OSu7TxZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdYfRq%2FbtrEgo9vg1Y%2FSPFsnLOMDQCMz4OSu7TxZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1707&quot; height=&quot;1005&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;1005&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이걸 설치하기 전에 윈도우 내부에서 설정 오류가 발생했었는데,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8WnEY/btrEeJTANoc/jhJSgeh2KkSKSd0C8rFXr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8WnEY/btrEeJTANoc/jhJSgeh2KkSKSd0C8rFXr1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8WnEY/btrEeJTANoc/jhJSgeh2KkSKSd0C8rFXr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8WnEY%2FbtrEeJTANoc%2FjhJSgeh2KkSKSd0C8rFXr1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;586&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xUulU/btrEh8yiwxY/3Asn1BbmeTcQllYvxyQok0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xUulU/btrEh8yiwxY/3Asn1BbmeTcQllYvxyQok0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xUulU/btrEh8yiwxY/3Asn1BbmeTcQllYvxyQok0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxUulU%2FbtrEh8yiwxY%2F3Asn1BbmeTcQllYvxyQok0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;970&quot; height=&quot;535&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&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;gt; 업데이트 기능에서 &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;&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;3. truffle-config.js 파일 작성&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654667436173&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = require(&quot;path&quot;);

module.exports = {
  // See &amp;lt;http://truffleframework.com/docs/advanced/configuration&amp;gt;
  // to customize your Truffle configuration!
  contracts_build_directory: path.join(__dirname, &quot;client/src/contracts&quot;),
  networks: {
    development: {
      host:&quot;127.0.0.1&quot;,
      port: 8545,
      network_id:&quot;*&quot;,
    },
  },
  compilers:{
    solc:{
      version:&quot;^0.7.0&quot;,
    },
  },
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 것이 compiler버전이다. 여기서 작성한 버전이 Migration.sol 버전과 SimpleStorage.sol 버전이 일치하지 않으면 오류가 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwAvvV/btrEhXKzMV7/1XjqppsWZdYYkRAowuv4e1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwAvvV/btrEhXKzMV7/1XjqppsWZdYYkRAowuv4e1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwAvvV/btrEhXKzMV7/1XjqppsWZdYYkRAowuv4e1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwAvvV%2FbtrEhXKzMV7%2F1XjqppsWZdYYkRAowuv4e1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1436&quot; height=&quot;192&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나중에 배포할 때 오류가 발생한다. 컨트랙트 버전들을 통일해주고 나니 정상적으로 컴파일 &amp;amp; 배포가 되었다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 Brave 브라우저를 사용하는데, 왠지 모르겠지만 Metamask 지갑 연동이 잘 안된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 크롬 브라우저를 따로 열어서 localhost:3000으로 따로 확인을 해야 한다.&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;
&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;4. React 오류 (Unhandled Rejection)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x7mfK/btrEh775VtK/1FM7uApJqRZyD9bJ47e5T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x7mfK/btrEh775VtK/1FM7uApJqRZyD9bJ47e5T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x7mfK/btrEh775VtK/1FM7uApJqRZyD9bJ47e5T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx7mfK%2FbtrEh775VtK%2F1FM7uApJqRZyD9bJ47e5T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1691&quot; height=&quot;810&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;/figure&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;이거는 Metamask 지갑 문제이다. 아마 네트워크 설정이 잘못 되어있어서 발생하는 오류이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xdG9V/btrEgpaom1p/dRyB1MKn5GsmDlLbqlluY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xdG9V/btrEgpaom1p/dRyB1MKn5GsmDlLbqlluY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xdG9V/btrEgpaom1p/dRyB1MKn5GsmDlLbqlluY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxdG9V%2FbtrEgpaom1p%2FdRyB1MKn5GsmDlLbqlluY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;535&quot; height=&quot;901&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;901&quot;/&gt;&lt;/span&gt;&lt;/figure&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;Ganache와 Truffle에 설정된 네트워크는 8545였는데, 나는 이전에 이더리움 메인넷으로 선택을 하니 위와 같은 오류가 발생했던 것이다. 그래서 네트워크를 Localhost 8545로 변경해주니&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuslWJ/btrEh957neB/4C1sjbxAA6v9pAKMWhirB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuslWJ/btrEh957neB/4C1sjbxAA6v9pAKMWhirB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuslWJ/btrEh957neB/4C1sjbxAA6v9pAKMWhirB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuslWJ%2FbtrEh957neB%2F4C1sjbxAA6v9pAKMWhirB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1475&quot; height=&quot;529&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 React 페이지에서 실행되는 것을 확인할 수 있었다.&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* Truffle : 이더리움 개발 프레임워크&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.0 이상의 Node.js 설치 필요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm을 통해 손쉽게 설치 가능 npm install (or i) -g truffle&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Truffle을 사용하는 이유는 solidity로 작성한 스마트컨트랙트의 컴파일, 컴파일한 스마트컨트랙트의 배포(migrate),배포한 스마트컨트랙트의 테스트(test) 파일을 사용하기 위함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 결국은 스마트컨트랙트를 테스트하기 위해 truffle을 사용하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* Ganache : 개발 편의를 위하여 test RPC를 손쉽게 구동시켜주는 어플리케이션&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어플리케이션을 실행하면 7545번 포트로 test RPC가 구동되며, 마이닝이 활성화 되어있기 때문에 바로 컨트랙트를 배포하거나 트랜잭션 실행할 수 있는 환경이 갖춰진다 (이번 작업에서는 8545로 설정)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* RPC (Remote Procedure Call) 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행할 수 있도록 프로세스 간의 통신을 하는 것. 위치에 상관없이 RPC를 사용하여 원하는 함수 실행 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Client/Server 구조를 기반으로 작동하며 각각의 클라이언트와 서버는 Remote Call을 하기 위한 프로시저에 대한 인터페이스를 통해 서로의 요청에 대한 이해를 할 수 있다.&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;
&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://medium.com/@devAsterisk/truffle%EA%B3%BC-ganache%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-evm-smart-contract%EC%9D%98-%EA%B5%AC%ED%98%84-%EB%B0%8F-%EB%B0%B0%ED%8F%AC-2526bb150daa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/@devAsterisk/truffle%EA%B3%BC-ganache%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-evm-smart-contract%EC%9D%98-%EA%B5%AC%ED%98%84-%EB%B0%8F-%EB%B0%B0%ED%8F%AC-2526bb150daa&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;</description>
      <category>BlockChain</category>
      <category>Brandy</category>
      <category>metamask</category>
      <category>react</category>
      <category>til</category>
      <category>truffle</category>
      <category>가나쉐</category>
      <category>블록체인</category>
      <category>블록체인개발</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/187</guid>
      <comments>https://brandycoding.tistory.com/187#entry187comment</comments>
      <pubDate>Thu, 9 Jun 2022 00:17:43 +0900</pubDate>
    </item>
    <item>
      <title>220603 Web TIL) 시맨틱태그,EntityCode</title>
      <link>https://brandycoding.tistory.com/186</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DvhaY/btrDVLRI86p/uiFme8sFZRDAwMf6LQy5qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DvhaY/btrDVLRI86p/uiFme8sFZRDAwMf6LQy5qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DvhaY/btrDVLRI86p/uiFme8sFZRDAwMf6LQy5qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDvhaY%2FbtrDVLRI86p%2FuiFme8sFZRDAwMf6LQy5qk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1080&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 시맨틱 태그를 사용하는 이유&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- html 코드를 작성할 때 웹 브라우저가 HTML의 소스코드만 보고도 어느 부분이 제목이고 어느 부분이 메뉴이고 본문인지를 쉽게 알 수 있게 하도록 하는 지표.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 검색 엔진이 검색을 수행할 때에는 HTML 태그 내에 있는 태그를 분석하는데 태그들의 의미가 분명하다면 검색 엔진 입장에서 구분하기가 쉬워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드 가독성 및 유지보수가 쉬워진다. 모든 태그가 &amp;lt;div&amp;gt;로 되어있으면 어느 영역(헤더,바디,푸터 등)인지 알기 힘든데 시맨틱 태그를 이용하면 해당 영역에 접근하기 쉬워진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&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;b&gt;2. 시맨틱 태그의 종류&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;header&amp;gt;,&amp;lt;nav&amp;gt;:웹페이지 메뉴 만들때 사용, &amp;lt;main&amp;gt;:메인 콘텐츠를 나타내는데 사용(nav,aside,section,article 등), &amp;lt;article&amp;gt;:개별 콘텐츠 나타냄,&amp;lt;aside&amp;gt;:좌우측 사이드 부분,&amp;lt;footer&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;b&gt;3. block과 inline의 차이&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;block : 새로운 줄로 시작하며 해당 줄의 가로를 다 차지한다 -&amp;gt; display:block 도 있음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;inline : 태그 안의 글자 길이만큼의 영역만 화면에 표시한다.&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;4. &amp;lt;div&amp;gt;,&amp;lt;span&amp;gt;.&amp;lt;p&amp;gt;의 차이&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div&amp;gt;는 영역을 구분하는 요소로 사용되며 &amp;lt;span&amp;gt;은 옆으로 붙는다. &amp;lt;p&amp;gt;는 문자 단락을 구성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;5. &amp;lt;sub&amp;gt;는 &lt;span style=&quot;background-color: #202124; color: #bdc1c6;&quot;&gt;H₂&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 같이 기준값보다 아래에 있는 숫자를 표시한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수소를 표현하려면 H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;로 표현해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;6. Entity Code :&lt;/b&gt; HTML에서 특수문자를 사용하기 위해 사용하는 코드&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Entity Code를 왜 사용하냐면 컴퓨터가 문서를 읽어들일 때 예약문자와 문서내용을 구분하지 못해 생기는 문제를 해결하기 위해서이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://entitycode.com/#about-content&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://entitycode.com/#about-content&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654273806599&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;Entity Code - A Clear and Quick Reference to HTML Entities Codes&quot; data-og-description=&quot;About EntityCode The idea came from my constant need to add those hard to remember HTML entity codes, such as the copyright symbol ( &amp;copy; ), every time I&amp;rsquo;m developing a new website or writing a new article. Usually, I either open one of my previously done &quot; data-og-host=&quot;entitycode.com&quot; data-og-source-url=&quot;https://entitycode.com/#about-content&quot; data-og-url=&quot;https://entitycode.com/#about-content&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://entitycode.com/#about-content&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://entitycode.com/#about-content&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Entity Code - A Clear and Quick Reference to HTML Entities Codes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;About EntityCode The idea came from my constant need to add those hard to remember HTML entity codes, such as the copyright symbol ( &amp;copy; ), every time I&amp;rsquo;m developing a new website or writing a new article. Usually, I either open one of my previously done&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;entitycode.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;amp;nbsp;도 Entity 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;&lt;b&gt;7. &amp;lt;nav&amp;gt;로 메뉴 만들때&amp;nbsp;&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;&amp;lt;nav&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;ol&amp;gt; or &amp;lt;ul&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt; ~ &amp;lt;/li&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;~&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/ol&amp;gt; or &amp;lt;/ul&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;/nav&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;b&gt;8. &amp;lt;div&amp;gt;,&amp;lt;article&amp;gt;,&amp;lt;section&amp;gt;의 차이?&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;article : 문서의 '독립적'인 부분. 따로 떼어놔도 의미가 사라지지 않고 그대로 존재해야 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;웹 상의 실제 내용을 넣는다.&lt;/b&gt; 블로그 포스트, 웹 사이트 내용, 뉴스 기사 등..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;section : 콘텐츠의 덩어리&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;div : 영역 구분하기. 콘텐츠의 CSS를 적용하고 싶을 때 사용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div&amp;gt;만 주구장창 쓰면 이 &amp;lt;div&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;그래서 각 영역에 맞게 &amp;lt;header&amp;gt;,&amp;lt;main&amp;gt;,&amp;lt;footer&amp;gt;로 큰 뼈대를 먼저 세워주고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공지사항이나 FAQ 같은 부분은 &amp;lt;article&amp;gt;을 써주고, 그 외 논리적인 구분을 &amp;lt;section&amp;gt;으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 구분이 필요없고 블럭 요소가 필요하면 &amp;lt;div&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;9.&amp;nbsp; ~ &amp;lt;time datetime=&quot;2022-06-03&quot;&amp;gt;June 3&amp;lt;/time&amp;gt;~ 이라는 코드가 있다고 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계 판독 가능한 포맷에서는 datetime 시맨틱 요소를 사용해야 한다. datetime도 시맨틱 요소이다.&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;10. &amp;lt;figure&amp;gt;~&amp;lt;/figure&amp;gt; : 캡션대상 지정&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;figcaption&amp;gt; : 캡션 설명 붙이기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;div&amp;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;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;한 줄 정리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시맨틱태그는 신문기사를 작성하는 것과 같다.&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/TIL</category>
      <category>Brandy</category>
      <category>웹TIL</category>
      <category>웹개발</category>
      <category>웹개발공부</category>
      <category>웹공부</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/186</guid>
      <comments>https://brandycoding.tistory.com/186#entry186comment</comments>
      <pubDate>Sat, 4 Jun 2022 01:52:46 +0900</pubDate>
    </item>
    <item>
      <title>블록체인 TIL) 크립토좀비 lesson1 complete</title>
      <link>https://brandycoding.tistory.com/185</link>
      <description>&lt;pre id=&quot;code_1653576416282&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pragma solidity ^0.4.25;

contract ZombieFactory {

    event NewZombie(uint zombieId, string name, uint dna);

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        emit NewZombie(id, _name, _dna);
    }

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(abi.encodePacked(_str)));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;알게된 내용&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 모든 solidity 코드는 버전 선언으로 시작한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 상태변수 (state Variable) 컨트랙트 저장소에 영구 저장된다 = 블록체인에 기록된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uint 부호 없는 정수, int 부호 있는 정수&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;uint는 실제로 uint256을 뜻하며, uint8/uint16/uint32 등과 같이 uint를 더 적은 비트로 선언할 수도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특별한 경우가 아니라면 uint만 사용 !&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 복잡한 자료형을 다루기 위해서 struct 구조체를 사용한다. 여러 특성을 가진 자료형들을 struct 안에 한 번에 선언할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. string은 임의의 길이를 가진 UTF-8 데이터를 위해 활용된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 함수 인자명 앞에 _(언더바)를 기입하는 것은 전역변수와 구별하기 위하는데, 이것은 관례이다. (의무는 아님)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 구조체 배열 생성하고 활용하는 법&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1653576988812&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct Person { 
	uint age;
    string name; 
} 

Person[] public people; 

// Person 구조체를 통해 새로운 Person을 생성하고 people 배열에 추가 
// 새로운 사람 생성
Person JeongHoon = Person(31,&quot;JeongHoon&quot;); 

// JeongHoon을 배열에 추가한다. 
people.push(JeongHoon); 

//위의 두 줄을 조합하여 people.push(Person(31,&quot;JeongHoon&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* array.push()는 무언가의 배열 끝에서 모든 원소가 순서를 유지하도록 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) uint[] numbers;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numbers.push(5);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numbers.push(10);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numbers.push(15);&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;// numbers 배열은 [5,10,15]와 같다.&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_1653577122446&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        emit NewZombie(id, _name, _dna);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. view() , pure() 함수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;view 속성을 가진 함수는 Storage 레벨에 있는 자료를 읽어서 보여줄 수는 있지만, 수정할 수는 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pure() 함수는 Storage 레벨에 있는 자료를 읽어오지도 못한다. 함수가 앱에서 어떤 데이터도 접근하지 못한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; solidity 컴파일러에서 어떤 제어자를 써야하는지 경고 메시지를 통해 알려준다.&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;8. keccak-256&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHA-1,SHA-2에 내재하는 보안 취약점을 개선하고자 개발된 해시화 알고리즘.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정 길이의 해시값(메시지 다이제스트)을 출력하고 256비트 16진수로 변환하여 반 랜덤인 반환값 출력. 기본적으로 같은 문자가 입력되면 동일한 결과값이 출력되므로 반 랜덤.&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;9. solidity 이벤트&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;solidity의 모든 코드들은 컨트랙트를 통해 클라이언트와 통신한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 메타마스크로 누군가에게 1 ETH 전송하며, 이 때 금액을 전송하는 행위는 '전송' 버틈을 누름과 동시에 진행된다.&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_1653577592340&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 이벤트 선언 
event IntegersAdded(uint x,uint y,uint result); 
function add(uint _x,uint _y) public { 
	uint result = _x + _y; 
 
// 이벤트를 실행하여 앱에게 add 함수가 실행되었음을 알린다 
	IntegersAdded(_x,_y,result); 
    return result; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1653577627726&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 클라이언트 측의 결과 
YourContract.IntegersAdded(function(error,result){ 
 // 결과와 관련된 행동 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BlockChain/크립토좀비</category>
      <category>Brandy</category>
      <category>cryptoZombie</category>
      <category>solidity</category>
      <category>블록체인</category>
      <category>블록체인공부</category>
      <category>스마트컨트랙트</category>
      <category>크립토좀비</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/185</guid>
      <comments>https://brandycoding.tistory.com/185#entry185comment</comments>
      <pubDate>Fri, 27 May 2022 00:08:13 +0900</pubDate>
    </item>
    <item>
      <title>Udemy로 리액트 공부하기</title>
      <link>https://brandycoding.tistory.com/184</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btIUT4/btrC7yzuBGI/gFAkRD3IX88z8Q6AAivuP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btIUT4/btrC7yzuBGI/gFAkRD3IX88z8Q6AAivuP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btIUT4/btrC7yzuBGI/gFAkRD3IX88z8Q6AAivuP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtIUT4%2FbtrC7yzuBGI%2FgFAkRD3IX88z8Q6AAivuP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1429&quot; height=&quot;752&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Udemy 강의를 통해서 React,Next,Typescript.js를 공부하고 있다.&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;예를 들자면 export default ooo에서 default의 의미 같은 것들.&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>리액트</category>
      <category>스타드위드유데미</category>
      <category>유데미</category>
      <category>유데미스터디윗미</category>
      <category>유데미코리아</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/184</guid>
      <comments>https://brandycoding.tistory.com/184#entry184comment</comments>
      <pubDate>Wed, 25 May 2022 23:26:30 +0900</pubDate>
    </item>
    <item>
      <title>블록체인 220520 TIL) createNewBlock(),createNewTransaction()</title>
      <link>https://brandycoding.tistory.com/183</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;blockchain.js&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653011366483&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function Blockchain() {

    this.chain=[];
    this.newTransactions=[];
};

//새로운 블록 만들기
Blockchain.prototype.createNewBlock = function(nonce,previousBlockHash,hash){ 
    const newBlock = { // Blockchain 안의 새로운 블록 
        index: this.chain.length+1, // 블록 넘버 
        timestamp:Date.now(), //타임스탬프=블록이 생성된 시점 
        transactions:this.newTransactions, //새로운 블록을 만들었을 때 모든 새로운 트랜잭션,UTXO가 담김
        nonce:nonce, //자격증명에서 온 단순한 값. PoW를 통해 적법하게 새로운 블록을 만들었다는 증거
        hash:hash, // newBlock 객체에서 온 값 &amp;gt; newTransactions를 해싱 함수에 매개변수에 전달 (현재 블록 데이터 해싱)
        previousBlockHash:previousBlockHash, //(이전 블록 데이터 해싱)
    };
    this.newTransaction=[]; // 새로운 트랜잭션 배열을 초기호해야 새롭게 다음 블록을 생성할 수 있음
    this.chain.push(newBlock); //새로운 블록을 체인에 추가
    return newBlock;
}

module.exports=Blockchain;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;test.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653011390398&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const Blockchain = require('./blockchain');

const bitcoin=new Blockchain();
console.log(bitcoin);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실행 결과&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tiQBf/btrCApwxjrT/xAaL6FYCJWRJH4MO3yZ07k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tiQBf/btrCApwxjrT/xAaL6FYCJWRJH4MO3yZ07k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tiQBf/btrCApwxjrT/xAaL6FYCJWRJH4MO3yZ07k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtiQBf%2FbtrCApwxjrT%2FxAaL6FYCJWRJH4MO3yZ07k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;66&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&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;
&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;createNewBlock() 메소드 테스트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wlMNH/btrCEd9nYmZ/T1ABVX4G4N89RQYpkLjFak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wlMNH/btrCEd9nYmZ/T1ABVX4G4N89RQYpkLjFak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wlMNH/btrCEd9nYmZ/T1ABVX4G4N89RQYpkLjFak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwlMNH%2FbtrCEd9nYmZ%2FT1ABVX4G4N89RQYpkLjFak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;841&quot; height=&quot;374&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chain의 배열 안에는 한 개의 블록, 또는 한 개의 객체가 담겨있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록은 매개변수로 넘긴 nonce,previousBlockHash,hash 값을 갖고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;timestamp,index 값도 가지고 있다.&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;createNewBlock 메소드 안에 여러가지 테스트 데이터를 넣어보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W3XpL/btrCB1bhhiz/BS7CWbC4NFdY3r5yDSucC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W3XpL/btrCB1bhhiz/BS7CWbC4NFdY3r5yDSucC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W3XpL/btrCB1bhhiz/BS7CWbC4NFdY3r5yDSucC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW3XpL%2FbtrCB1bhhiz%2FBS7CWbC4NFdY3r5yDSucC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;889&quot; height=&quot;244&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&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: #ee2323;&quot;&gt;&lt;b&gt;마주한 에러 1)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDvZ0/btrCEdIlGXv/Sd2d1jBwqtMg6hBaRaKzq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDvZ0/btrCEdIlGXv/Sd2d1jBwqtMg6hBaRaKzq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDvZ0/btrCEdIlGXv/Sd2d1jBwqtMg6hBaRaKzq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDvZ0%2FbtrCEdIlGXv%2FSd2d1jBwqtMg6hBaRaKzq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;926&quot; height=&quot;46&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS에서 배열에 요소를 추가하려고 하는 함수에서 오류 = 배열 안에 데이터가 정상적으로 추가되지 못함&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;마주한 에러 2)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653015091902&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TypeError:  is not a function&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 함수로 정의했는데? 왜 이런 오류가 발생했는지 해당 메소드를 주석처리하고 다시 보니&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWb2tU/btrCCftB2PT/bID6hL3IG5F0XWrtAgUUK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWb2tU/btrCCftB2PT/bID6hL3IG5F0XWrtAgUUK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWb2tU/btrCCftB2PT/bID6hL3IG5F0XWrtAgUUK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWb2tU%2FbtrCCftB2PT%2FbID6hL3IG5F0XWrtAgUUK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;74&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법 : 나는 getLastBlock 이라고 선언했는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수를 호출할 때 getlastBlock()이라고 호출한 것이다. 그래서 위와 같은 오류가 발생한 것이다.&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;메소드(함수) 선언 : getLastBlock()&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드(함수) 호출 : getlastBlock() 으로 한 것이다.&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;미결 트랜잭션들을 추가하기 위해서는 새로운 블록을 생성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 블록이 2개 있었는데, 미결된 3가지의 트랜잭션을 처리하기 위해 새로운 블록을 만들고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;console.log(bitcoin.chain[2])로 확인해보니 미결된 트랜잭션들이 새로운 3번째 블록에 잘 추가된 것을 확인하였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wS1G8/btrCH3MdHYW/zengTyu0PcwZj4NYVTwDUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wS1G8/btrCH3MdHYW/zengTyu0PcwZj4NYVTwDUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wS1G8/btrCH3MdHYW/zengTyu0PcwZj4NYVTwDUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwS1G8%2FbtrCH3MdHYW%2FzengTyu0PcwZj4NYVTwDUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1375&quot; height=&quot;565&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clv6wu/btrCIHhAJSm/oljbocKgnpnh4v7kZjEkJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clv6wu/btrCIHhAJSm/oljbocKgnpnh4v7kZjEkJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clv6wu/btrCIHhAJSm/oljbocKgnpnh4v7kZjEkJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclv6wu%2FbtrCIHhAJSm%2FoljbocKgnpnh4v7kZjEkJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1016&quot; height=&quot;458&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&lt;b&gt;데이터 해싱하기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록체인에서는 SHA256(어떤 입력값이든 주어진 입력값에 대해 언제나 동일한 출력값 반환)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 안녕하세요 2C68318E352971113645CBC72861E1EC23F48D5BAA5F9B405FED9DDDCA893EB4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요를 SHA256 변환기에 넣을때마다 한 번은 2C, 한 번은 3P ~ 이런 식으로 나오는게 아니라&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;SHA256을 사용하기 위한 npm 라이브러리 설치를 하려고 했으나 너무 오래된 라이브러리라 그런지,, Error가 발생하며&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hash.js를 사용할 예정이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1653034889182&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i sha 256--save&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deHSAi/btrCGdiAbee/QBEaqXWXez4HNg3DbJzMK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deHSAi/btrCGdiAbee/QBEaqXWXez4HNg3DbJzMK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deHSAi/btrCGdiAbee/QBEaqXWXez4HNg3DbJzMK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeHSAi%2FbtrCGdiAbee%2FQBEaqXWXez4HNg3DbJzMK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1189&quot; height=&quot;617&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>BlockChain</category>
      <category>JavaScript</category>
      <category>개발자</category>
      <category>블록체인</category>
      <category>블록체인공부</category>
      <category>웹개발자</category>
      <category>자바스크립트</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/183</guid>
      <comments>https://brandycoding.tistory.com/183#entry183comment</comments>
      <pubDate>Sat, 21 May 2022 00:24:54 +0900</pubDate>
    </item>
    <item>
      <title>220518 TIL) 다시보는 let,const, 화살표 함수</title>
      <link>https://brandycoding.tistory.com/182</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dH4iPe/btrCwhECQCG/kTftGYj254QqSChXwyJddK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dH4iPe/btrCwhECQCG/kTftGYj254QqSChXwyJddK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dH4iPe/btrCwhECQCG/kTftGYj254QqSChXwyJddK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdH4iPe%2FbtrCwhECQCG%2FkTftGYj254QqSChXwyJddK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1080&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&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;* 해당 강의는 Udemy의 React 완벽 가이드를 수강하고 작성한 TIL 입니다. &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;1. let과 const의 차이점&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;let은 값을 수정할 수 있지만 const는 값을 수정할 수 없다. 그리고 JS에서는 대부분 const를 사용한다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const는 값이 변하지 않는 상수 변수이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IQmfo/btrCwg6Lhz0/eNNtExgyxpOAXJabBLrL00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IQmfo/btrCwg6Lhz0/eNNtExgyxpOAXJabBLrL00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IQmfo/btrCwg6Lhz0/eNNtExgyxpOAXJabBLrL00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIQmfo%2FbtrCwg6Lhz0%2FeNNtExgyxpOAXJabBLrL00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;193&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmWsz1/btrCsdQAdXF/XBTMbBadGALLwVbn86Laak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmWsz1/btrCsdQAdXF/XBTMbBadGALLwVbn86Laak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmWsz1/btrCsdQAdXF/XBTMbBadGALLwVbn86Laak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmWsz1%2FbtrCsdQAdXF%2FXBTMbBadGALLwVbn86Laak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;163&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var을 사용하면 값이 바뀐 그대로 나온다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;var 부분을 let 으로 변경하여도 brandy 그리고 jeonghoon이 출력된다.&amp;nbsp;&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;그런데 여기서 let &amp;gt; const로 변경하면 어떻게 될까?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPvGYi/btrCxI2kACC/Z6k5a4GMuKswY7uq73Q2z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPvGYi/btrCxI2kACC/Z6k5a4GMuKswY7uq73Q2z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPvGYi/btrCxI2kACC/Z6k5a4GMuKswY7uq73Q2z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPvGYi%2FbtrCxI2kACC%2FZ6k5a4GMuKswY7uq73Q2z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;196&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1011&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chMb49/btrCw97aeJv/WOtxx4OtSAB2sAgK01bTYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chMb49/btrCw97aeJv/WOtxx4OtSAB2sAgK01bTYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chMb49/btrCw97aeJv/WOtxx4OtSAB2sAgK01bTYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchMb49%2FbtrCw97aeJv%2FWOtxx4OtSAB2sAgK01bTYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1011&quot; height=&quot;57&quot; data-origin-width=&quot;1011&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeError가 발생한다. 상수 변수에다 값을 재할당(brandy &amp;gt; jeonghoon)하려고 했기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, const는 새로운 값을 할당할 수 없다는 것이 특징이다.&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;&lt;b&gt;2. 화살표 함수&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일반 함수 형식&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1652887159464&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function myFnc() { 
	... 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6pXq3/btrCv0iMIkg/0BdKjRAbLmnu7ZdmnTZtBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6pXq3/btrCv0iMIkg/0BdKjRAbLmnu7ZdmnTZtBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6pXq3/btrCv0iMIkg/0BdKjRAbLmnu7ZdmnTZtBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6pXq3%2FbtrCv0iMIkg%2F0BdKjRAbLmnu7ZdmnTZtBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;206&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;화살표 함수 형식&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1652887182833&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const myFnc = () =&amp;gt; {
    ....
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;() 안에는 인수가 들어간다. function을 생략하기 때문에 일반 함수 형식보다 간결하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS에서 갖고 있었던 키워드 this로 인해 생겼던 문제 해결. 우리가 항상 원하는 객체를 참조하는 것은 아니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/barV2N/btrCwGD8Xc2/kiXkGxy2k30fQYJKGXHsm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/barV2N/btrCwGD8Xc2/kiXkGxy2k30fQYJKGXHsm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/barV2N/btrCwGD8Xc2/kiXkGxy2k30fQYJKGXHsm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbarV2N%2FbtrCwGD8Xc2%2FkiXkGxy2k30fQYJKGXHsm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;240&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&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; (name)이 아닌 name으로도 가능 (인수가 하나일때만 가능!!!)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 인수가 없다면 () 빈 괄호로 냅둬야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2Iia4/btrCw8f7oTu/ntMdsGTqH24dHK5NJFpvP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2Iia4/btrCw8f7oTu/ntMdsGTqH24dHK5NJFpvP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2Iia4/btrCw8f7oTu/ntMdsGTqH24dHK5NJFpvP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2Iia4%2FbtrCw8f7oTu%2FntMdsGTqH24dHK5NJFpvP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;212&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&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;3. 중괄호,return 생략 case&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mWtcp/btrCvD83C0J/wiJmAGkF0GVovyuLOdjyhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mWtcp/btrCvD83C0J/wiJmAGkF0GVovyuLOdjyhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mWtcp/btrCvD83C0J/wiJmAGkF0GVovyuLOdjyhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmWtcp%2FbtrCvD83C0J%2FwiJmAGkF0GVovyuLOdjyhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;174&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;중괄호 생략&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs3ayq/btrCxEZ8WNa/bfsy9KjJ7ZckBfcKhAZj30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs3ayq/btrCxEZ8WNa/bfsy9KjJ7ZckBfcKhAZj30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs3ayq/btrCxEZ8WNa/bfsy9KjJ7ZckBfcKhAZj30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs3ayq%2FbtrCxEZ8WNa%2Fbfsy9KjJ7ZckBfcKhAZj30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;141&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 return을 삭제해야 한다. 인수가 한 개인 경우 둘러싼 괄호를 제거해서 더 짧게 줄일 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web/Javascript</category>
      <category>Brandy</category>
      <category>JavaScript</category>
      <category>til</category>
      <category>udemy</category>
      <category>스타트위드유데미</category>
      <category>스터디윗미</category>
      <category>유데미</category>
      <category>유데미코리아</category>
      <category>자바스크립트</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/182</guid>
      <comments>https://brandycoding.tistory.com/182#entry182comment</comments>
      <pubDate>Thu, 19 May 2022 00:31:00 +0900</pubDate>
    </item>
    <item>
      <title>라우터 설치,Unexpected use of 'location'  no-restricted-globals</title>
      <link>https://brandycoding.tistory.com/181</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAa4g6/btrBOv9971S/w1TyGHRnHikokl8z0yEGz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAa4g6/btrBOv9971S/w1TyGHRnHikokl8z0yEGz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAa4g6/btrBOv9971S/w1TyGHRnHikokl8z0yEGz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAa4g6%2FbtrBOv9971S%2Fw1TyGHRnHikokl8z0yEGz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1080&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 페이지 이동을 위해 npm install react-router-dom을 설치하고 코드도 계속해서 보았는데 설정한 path대로 URL이 출력되지 않고 빈 화면만 나왔다. 구글로 서치하던 중에 기존에 설치했던 react-router-dom을 uninstall하고&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; npm install react-router-dom@5&lt;/b&gt;&lt;/span&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;2.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;Unexpected use of 'location'  no-restricted-globals&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 경우 스택오버플로우를 참고해보니 location 변수를 사용하는 곳 위에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3e6e8; color: #232629;&quot;&gt;// eslint-disable-next-line no-restricted-globals&lt;/span&gt; 를 추가하라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그대로 따라해보니 리액트에서 오류메시지는 뜨지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkazww/btrB30XRyRm/hlEbfBFngvoAjMb4LgjWi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkazww/btrB30XRyRm/hlEbfBFngvoAjMb4LgjWi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkazww/btrB30XRyRm/hlEbfBFngvoAjMb4LgjWi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdkazww%2FbtrB30XRyRm%2FhlEbfBFngvoAjMb4LgjWi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1136&quot; height=&quot;295&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Web/React</category>
      <category>react</category>
      <category>til</category>
      <category>리액트</category>
      <category>웹개발</category>
      <category>웹개발공부</category>
      <author>bran_dy</author>
      <guid isPermaLink="true">https://brandycoding.tistory.com/181</guid>
      <comments>https://brandycoding.tistory.com/181#entry181comment</comments>
      <pubDate>Fri, 13 May 2022 16:52:16 +0900</pubDate>
    </item>
  </channel>
</rss>