<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>차가운세상</title>
    <link>https://slee2540.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 00:03:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>차가운남자</managingEditor>
    <image>
      <title>차가운세상</title>
      <url>https://t1.daumcdn.net/cfile/tistory/256A4F425716676C06</url>
      <link>https://slee2540.tistory.com</link>
    </image>
    <item>
      <title>Vite Alias path 설정 (tsconfig.json)</title>
      <link>https://slee2540.tistory.com/69</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Webpack (CRA 또는 nextjs)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;tsconfig.json만 설정&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;tsconfig.json만 설정&lt;br /&gt;vite.config.js 에도 path 설정이 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tsconfig.json&lt;br /&gt;&lt;br /&gt;&quot;paths&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@components&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;components&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@components/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;components/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@layouts&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;layouts&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@layouts/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;layouts/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;tsconfig.json&lt;br /&gt;&lt;br /&gt;&quot;paths&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@components&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;components&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@components/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;components/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@layouts&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;layouts&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;@layouts/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;layouts/*&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;vite.config.js&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; [&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'@'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replacement&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__dirname&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'src'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;) },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'@components'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replacement&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__dirname&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'src/components'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'@layouts'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;replacement&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__dirname&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'src/layouts'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; ],&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; },&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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://velog.io/@davelee/typescript-paths-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%A0%9C-3%EA%B0%80%EC%A7%80%EC%99%80-%ED%95%B4%EA%B2%B0%EC%B1%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@davelee/typescript-paths-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%A0%9C-3%EA%B0%80%EC%A7%80%EC%99%80-%ED%95%B4%EA%B2%B0%EC%B1%85&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1692174294633&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;typescript paths 관련 문제 3가지와 해결책&quot; data-og-description=&quot;typescript로 nodejs나 react 프로젝트를 진행할 때 paths를 설정하면 경로를 깔끔하게 관리할 수 있다.가령 이런 경로를이렇게 사용할 수 있는 것이다.그런데 사용하다보면 이런저런 문제가 발생한다. &quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@davelee/typescript-paths-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%A0%9C-3%EA%B0%80%EC%A7%80%EC%99%80-%ED%95%B4%EA%B2%B0%EC%B1%85&quot; data-og-url=&quot;https://velog.io/@davelee/typescript-paths-관련-문제-3가지와-해결책&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gtmsi/hyTCxDMNfJ/1Z3qGKHwl450BOKfOJvxJ1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/tZ0Di/hyTFbTpxYW/VzKSxp147Pv47y5ej7foF0/img.jpg?width=616&amp;amp;height=684&amp;amp;face=102_333_384_640&quot;&gt;&lt;a href=&quot;https://velog.io/@davelee/typescript-paths-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%A0%9C-3%EA%B0%80%EC%A7%80%EC%99%80-%ED%95%B4%EA%B2%B0%EC%B1%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@davelee/typescript-paths-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%A0%9C-3%EA%B0%80%EC%A7%80%EC%99%80-%ED%95%B4%EA%B2%B0%EC%B1%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gtmsi/hyTCxDMNfJ/1Z3qGKHwl450BOKfOJvxJ1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/tZ0Di/hyTFbTpxYW/VzKSxp147Pv47y5ej7foF0/img.jpg?width=616&amp;amp;height=684&amp;amp;face=102_333_384_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;typescript paths 관련 문제 3가지와 해결책&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;typescript로 nodejs나 react 프로젝트를 진행할 때 paths를 설정하면 경로를 깔끔하게 관리할 수 있다.가령 이런 경로를이렇게 사용할 수 있는 것이다.그런데 사용하다보면 이런저런 문제가 발생한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&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;a href=&quot;https://velog.io/@real-bird/React-Vite-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-path-alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@real-bird/React-Vite-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-path-alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1692174295850&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Vite] Vite 환경에서 path alias 설정하기&quot; data-og-description=&quot;Vite에서 path alias 설정하기&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@real-bird/React-Vite-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-path-alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@real-bird/React-Vite-환경에서-path-alias-설정하기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/E1rkK/hyTCxDMRsE/YlRCibDMvmgCTlt1VGZifk/img.jpg?width=1144&amp;amp;height=758&amp;amp;face=0_0_1144_758,https://scrap.kakaocdn.net/dn/cY30ow/hyTFkbJC8N/pb8TWuFQlrwjd3mPbdpdCk/img.jpg?width=1144&amp;amp;height=758&amp;amp;face=0_0_1144_758,https://scrap.kakaocdn.net/dn/hwAUo/hyTCIL5sDG/itvmO1lZEEoXovK30ciG40/img.jpg?width=960&amp;amp;height=540&amp;amp;face=0_0_960_540&quot;&gt;&lt;a href=&quot;https://velog.io/@real-bird/React-Vite-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-path-alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@real-bird/React-Vite-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-path-alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/E1rkK/hyTCxDMRsE/YlRCibDMvmgCTlt1VGZifk/img.jpg?width=1144&amp;amp;height=758&amp;amp;face=0_0_1144_758,https://scrap.kakaocdn.net/dn/cY30ow/hyTFkbJC8N/pb8TWuFQlrwjd3mPbdpdCk/img.jpg?width=1144&amp;amp;height=758&amp;amp;face=0_0_1144_758,https://scrap.kakaocdn.net/dn/hwAUo/hyTCIL5sDG/itvmO1lZEEoXovK30ciG40/img.jpg?width=960&amp;amp;height=540&amp;amp;face=0_0_960_540');&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;[Vite] Vite 환경에서 path alias 설정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Vite에서 path alias 설정하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/React + TypeScript</category>
      <category>alias</category>
      <category>path</category>
      <category>tsconfig</category>
      <category>vite</category>
      <category>webpack</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/69</guid>
      <comments>https://slee2540.tistory.com/69#entry69comment</comments>
      <pubDate>Wed, 16 Aug 2023 17:25:41 +0900</pubDate>
    </item>
    <item>
      <title>Kakao(카카오) 로그인 자바스크립트</title>
      <link>https://slee2540.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 카카오 개발자센터(&lt;a href=&quot;https://developers.kakao.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developers.kakao.com/&lt;/a&gt;)에 가서 로그인 후 내 애플리케이션 이동 후 등록을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;color: #ce9178; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://developers.kakao.com/sdk/js/kakao.js&quot;&gt;https://developers.kakao.com/sdk/js/kakao.js &lt;/a&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;파일을 다운로드하여 프로젝트에 import 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 도메인을 등록하고 테스트를 위에 코드로 진행- localhost:3000 같이 도메인만 등록해도 가능 (CI값 설정을 해두면 카카오는 제공)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 테스트 완료 후 실제 운영에 적용하기위한 서비스 신청을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1663080782513&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* globals Kakao */ &amp;lt;&amp;lt;&amp;lt; Kakao가 전역변수로 선언되어져 있음
export function setKakao () {
  /* Kakao 값 체크 */
  if (Kakao === null) return

  /* 초기화 */
  if (!Kakao.isInitialized()) {
    /* 키값 설정 */
    Kakao.init(this.isDevHost ? dev : prod)
  }
}

export function kakaoLogin () {
  /* 
    동의항목 페이지에 있는 개인정보 보호 테이블의 활성화된 ID값을 넣습니다. (선택 또는 필수는 관리자 페이지에서 설정)
    scope: 'profile_nickname, account_email, gender, age_range, birthday' 기타 등등
  */
  Kakao.Auth.login({
    scope : 'profile_nickname, account_email', &amp;lt;&amp;lt;&amp;lt; 위에 내용같이 필요값 설정
    success: (response) =&amp;gt; { // response : token 값
      
      /* 사용자 정보 가져오기 */
      Kakao.API.request({
        url: '/v2/user/me',
        success: async (res) =&amp;gt; { // res: 사용자 정보
 
          /* 구현하고 싶은 함수 호출 */
          await snsLogin.call(this, res) &amp;lt;&amp;lt;&amp;lt; 예시
        }
      })
    },
    fail: function (error) {
       /* 실패시 */
    }
  })
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT/SNS 로그인</category>
      <category>JS</category>
      <category>KAKAO</category>
      <category>login</category>
      <category>SNS</category>
      <category>SNS로그인</category>
      <category>로그인</category>
      <category>자바스크립트</category>
      <category>카카오</category>
      <category>카카오로그인</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/68</guid>
      <comments>https://slee2540.tistory.com/68#entry68comment</comments>
      <pubDate>Tue, 13 Sep 2022 23:58:27 +0900</pubDate>
    </item>
    <item>
      <title>네이버 로그인(네아) 자바스크립트 코드</title>
      <link>https://slee2540.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 가장먼저 네이버 개발자센터(&lt;a href=&quot;https://developers.naver.com/main/&quot;&gt;https://developers.naver.com/main/&lt;/a&gt;)에 가서 로그인 후 application(메뉴) 이동 후 등록을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;naveridlogin_js_sdk_2.0.2-nopolyfill.js 파일을 다운로드하여 프로젝트에 import 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 도메인을 등록하고 테스트를 위에 코드로 진행 (CI 값을 필요하다면 별도의 네이버팀에게 문의가 필요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 테스트 완료 후 실제 운영에 적용하기위한 서비스 신청을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1663079172083&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let naverObj = null

/* 화면 호출시(init) 세팅 하는 부분 */
export function setNaver () {
  naverObj = new naver.LoginWithNaverId({
    clientId: 발급받은 네이버 ID값,
    callbackUrl: 등록 되어진 URL,
    isPopup: true
  })

  /* 네이버 아이디로 로그인 정보를 초기화하기 위하여 init을 호출 */
  naverObj.init()

  /* 현재 로그인 상태를 확인 */
  window.addEventListener('load', () =&amp;gt; {
    naverObj.getLoginStatus(async (status) =&amp;gt; {
      /* 로그인 상태가 &quot;true - 성공&quot; 인 경우 로그인 버튼을 없애고 사용자 정보를 출력합니다. */
      if (status) {
       /* 호출하는 부분 */
       await snsjoin.call(this, naverObj) &amp;lt;&amp;lt;&amp;lt;&amp;lt; 예시
      }
    })
  })
}

/* 네이버 아이콘(클릭 이벤트)에 적용하면 된다 */
export async function naverLogin () {
  /* 네이버 생성된 URL로 이동 */
  window.location.href = naverObj.generateAuthorizeUrl()
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT/SNS 로그인</category>
      <category>login</category>
      <category>SNS로그인</category>
      <category>간편로그인</category>
      <category>네아</category>
      <category>네이버</category>
      <category>네이버로그인</category>
      <category>로그인</category>
      <category>아이콘</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/67</guid>
      <comments>https://slee2540.tistory.com/67#entry67comment</comments>
      <pubDate>Tue, 13 Sep 2022 23:37:04 +0900</pubDate>
    </item>
    <item>
      <title>비동기식 코드 작성 (promise, async , await) 고려점</title>
      <link>https://slee2540.tistory.com/66</link>
      <description>&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;한화면에서 여러 api로 호출하는 부분이 있었는데 promise.all을 써서 해결한 경험이 있었는데&lt;br /&gt;eslint 로 조금더 가독성 좋은 코드로 되는 부분이 있어서 내용을 가져왔다.&lt;/p&gt;
&lt;pre class=&quot;qml&quot;&gt;&lt;code&gt;// ❌
for (const url of urls) {
  const response = await fetch(url);
}

// ✅
const responses = [];
for (const url of urls) {
  const response = fetch(url);
  responses.push(response);
}

await Promise.all(responses);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Promise를 x 표시 되게 썼던 경험도 있어서 올바른 방법으로 사용하기 위하여 적어둠.&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;// ❌
new Promise((resolve, reject) =&amp;gt; {
  return result;
});

// ✅
new Promise((resolve, reject) =&amp;gt; {
  resolve(result);
});&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;바로 await를 반환한 값을 바로(직접) 변화를 주면 &lt;span style=&quot;background-color: #ffffff; color: #374151;&quot;&gt;race condition(경쟁상태로) 되어진 값으로 같은 시간(시점)에 업데이트가 되면 제대로 된 결과를 얻을수가 없다.&lt;/span&gt;&lt;br /&gt;결론은 좋은 방법은 const &quot;변수&quot; 로 생성한 후에 값을 변경을 주는것이 좋다.&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;
let totalPosts = 0;

async function getPosts(userId) {
  const users = [{ id: 1, posts: 5 }, { id: 2, posts: 3 }];
  await sleep(Math.random() * 1000);
  return users.find((user) =&amp;gt; user.id === userId).posts;
}

// ❌
async function addPosts(userId) {
  totalPosts += await getPosts(userId);
}

// ✅
async function addPosts(userId) {
  const posts = await getPosts(userId);
  totalPosts += posts; // variable is read and immediately updated
}

await Promise.all([addPosts(1), addPosts(2)]);
console.log('Post count:', totalPosts);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고한 개발자 블로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649080730706&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;14 Linting Rules To Help You Write Asynchronous Code in JavaScript&quot; data-og-description=&quot;A compiled list of linting rules to specifically help you with writing asynchronous code in JavaScript and Node.js.&quot; data-og-host=&quot;maximorlov.com&quot; data-og-source-url=&quot;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&quot; data-og-url=&quot;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FxAHJ/hyNUyuDh9r/pvCNmgZFea83pEcc6VUfy0/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237,https://scrap.kakaocdn.net/dn/hgEZl/hyNUBLGcPn/oO7jnrZCpI0eWctS0at7B1/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237,https://scrap.kakaocdn.net/dn/9tPwj/hyNVNKtc8M/Hkxxp7oZKrLBGqJpMUVNCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237&quot;&gt;&lt;a href=&quot;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://maximorlov.com/linting-rules-for-asynchronous-code-in-javascript/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FxAHJ/hyNUyuDh9r/pvCNmgZFea83pEcc6VUfy0/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237,https://scrap.kakaocdn.net/dn/hgEZl/hyNUBLGcPn/oO7jnrZCpI0eWctS0at7B1/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237,https://scrap.kakaocdn.net/dn/9tPwj/hyNVNKtc8M/Hkxxp7oZKrLBGqJpMUVNCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=166_136_259_237');&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;14 Linting Rules To Help You Write Asynchronous Code in JavaScript&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A compiled list of linting rules to specifically help you with writing asynchronous code in JavaScript and Node.js.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;maximorlov.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;</description>
      <category>IT/자바스크립트</category>
      <category>async</category>
      <category>await</category>
      <category>eslint</category>
      <category>JavaScript</category>
      <category>Promise</category>
      <category>비동기</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/66</guid>
      <comments>https://slee2540.tistory.com/66#entry66comment</comments>
      <pubDate>Mon, 4 Apr 2022 22:59:51 +0900</pubDate>
    </item>
    <item>
      <title>자주 쓰이는 정규식 모음 (자바스크립트)</title>
      <link>https://slee2540.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 조건을 통한 흐름에 필요한 정규식 - true, false 에 따른 조건문으로 분기처리&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645451523916&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  // 아이디
  const regId = /^[가-힣a-zA-Z]+$/g
  // 생년월일
  const regBirth = /^(19[0-9][0-9]|20\d{2})(0[0-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/
  // 이메일
  const regEmail = /^[a-z0-9.\-_]+@([a-z0-9-]+\.)+[a-z]{2,6}$/
  // 숫자
  const regNum = /^[0-9]+$/
  // 이름 - 한글
  const regName = /^[가-힣]+$/
  
  regName.test(value) ? true : false
  regBirth.test(value) ? true : false
  regEmail.test(value) ? true : false
  regNum.test(value) ? true : false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Input form 입력시 사용되는 정규식 - 입력자체를 막기&lt;/p&gt;
&lt;pre id=&quot;code_1645451591964&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 숫자만 입력
const onlyNum = /[^0-9]/g
// 한글 + 영어만
const koEng = /[^(ㄱ-힣a-zA-Z)]/gi
// 사업자번호
const businessNumber = /(\d{3})(\d{2})(\d{5})/
// 핸드폰 번호입력
const phone = /(\d{3})(\d{4})(\d{4})/

newValue = value.replace(onlyNum, '')
newValue = value.replace(koEng, '')
newValue = value.replace(phone, '$1-$2-$3')
newValue = value.replace(businessNumber, '$1-$2-$3')&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;br /&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645452069112&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;정규 표현식 - JavaScript | MDN&quot; data-og-description=&quot;정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해&amp;nbsp;사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.&amp;nbsp; 이 패턴들은&amp;nbsp;RegExp의 exec 메소드와 test 메소드&amp;nbsp; ,&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&quot; data-og-url=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kdU4F/hyNuh6067C/H7DhDYRhQK9NnxKZmWNJx0/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kdU4F/hyNuh6067C/H7DhDYRhQK9NnxKZmWNJx0/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&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;정규 표현식 - JavaScript | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해&amp;nbsp;사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.&amp;nbsp; 이 패턴들은&amp;nbsp;RegExp의 exec 메소드와 test 메소드&amp;nbsp; ,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/javascript 정규식</category>
      <category>input</category>
      <category>Regexp</category>
      <category>replace</category>
      <category>Test</category>
      <category>모음</category>
      <category>이메일</category>
      <category>입력</category>
      <category>자주</category>
      <category>정규식</category>
      <category>핸드폰</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/65</guid>
      <comments>https://slee2540.tistory.com/65#entry65comment</comments>
      <pubDate>Mon, 21 Feb 2022 23:05:49 +0900</pubDate>
    </item>
    <item>
      <title>코딜리티(Codility) Lesson5 GenomicRangeQuery 문제풀기</title>
      <link>https://slee2540.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;한참을 문제를 고민을 하다가 해결이 안되어서 다른 사람들의 글을 찾아보고 이해하게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;주어진 배열에서 최소 뉴클레오타이드 값이 무엇인지 리턴하는 문제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNA는 뉴클레오타이드 A, C, G, T의 배열로 만들 수 있는데 각 뉴클레오타이드의 영향도가 1, 2, 3, 4 라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 S = CAGCCTA 라고 한다면 전체 배열 중 최소 뉴클레오타이드의 영향도는 A가 있으므로 1이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 문제는 부분 배열에서의 최소 뉴클레오타이드의 영향도를 찾는 것이고, 문제에서는 세 가지 예를 보이고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;P = [2, 5, 0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q = [4, 5, 6]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 S[2:4] = GCC 이고 C의 영향도가 2이므로 2가 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S[5:5] = T 이고 T의 영향도는 4이므로 4가 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S[0:6] = CAGCCTA 이고 A의 영향도가 1이므로 1이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 리턴은 [2, 4, 1]을 리턴하면 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;pre id=&quot;code_1622619789422&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(S, P, Q) {
   let resultArr = [];

   for(let i = 0; i &amp;lt; P.length; i++) {
          // slice메소드는 두 번째 index까지는 포함시키지 않으므로 포함해서 자를수있도록 +1 해줌
       let temp = S.slice(P[i], Q[i]+1); 

        if(temp.indexOf('A') !== -1) {
            resultArr.push(1);
        } else if (temp.indexOf('C') !== -1) {
            resultArr.push(2);
        } else if (temp.indexOf('G') !== -1) {
            resultArr.push(3);
        } else {
            resultArr.push(4);
        }
   }

   return resultArr;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT/Algorithm</category>
      <category>codility</category>
      <category>GenomicRangeQuery</category>
      <category>JavaScript</category>
      <category>solution</category>
      <category>고민</category>
      <category>문제풀이</category>
      <category>알고리즘</category>
      <category>코딜리티</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/64</guid>
      <comments>https://slee2540.tistory.com/64#entry64comment</comments>
      <pubDate>Wed, 2 Jun 2021 16:45:48 +0900</pubDate>
    </item>
    <item>
      <title>Gatsby 시작하기 - 개발 환경 설정</title>
      <link>https://slee2540.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;Gatsby를 만들기 위한 준비물이 뭐가 있을까?&amp;nbsp;&lt;br /&gt;필요한 프로그램 설치 후에 gatsby 프로젝트 생성(2가지 방법)이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Git 설치 - &lt;a href=&quot;https://www.atlassian.com/git/tutorials/install-git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.atlassian.com/git/tutorials/install-git&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Node 설치 -&amp;nbsp;&lt;a href=&quot;https://nodejs.org/ko/&quot;&gt;https://nodejs.org/ko/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. gatsby-cli 설치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 18px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 18px;&quot;&gt;npm install -g gatsby-cli&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;빠른 개발 환경&amp;nbsp; - Starter&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;gatsby new 프로젝트명 https://github.com/gatsbyjs/gatsby-starter-blog&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;gatsby develop 또는 npm run develop&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;세팅 끝 !!&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;심플한 블로그 템플릿이 보일 것이다. 여기에 필요한 개츠비 플러그인을 설치하여서 개발하면 편하다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;수동으로 개발 환경 - gatsby new&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gatsby에 튜토리얼에 자세하게 나와있다. &lt;b&gt;&lt;a href=&quot;https://www.gatsbyjs.com/docs/tutorial/part-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.gatsbyjs.com/docs/tutorial/part-1&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 다시 gatsby를 공부한다는 생각으로 수동으로 진행하였다.&amp;nbsp;&lt;br /&gt;gatsby new 입력하면 아래와 같이 이쁘게 나온다. v2에서는 이러지 않았던거로 기억이 되어진다...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1934&quot; data-origin-height=&quot;844&quot; data-filename=&quot;스크린샷 2021-06-01 오후 11.56.31.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tnqaw/btq6l16UuyK/NEBhzc4LtkKo4FblqvGyXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tnqaw/btq6l16UuyK/NEBhzc4LtkKo4FblqvGyXk/img.png&quot; data-alt=&quot;자신이 하고 싶은 옵션을 넣고 진행하면 된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tnqaw/btq6l16UuyK/NEBhzc4LtkKo4FblqvGyXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftnqaw%2Fbtq6l16UuyK%2FNEBhzc4LtkKo4FblqvGyXk%2Fimg.png&quot; data-origin-width=&quot;1934&quot; data-origin-height=&quot;844&quot; data-filename=&quot;스크린샷 2021-06-01 오후 11.56.31.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;자신이 하고 싶은 옵션을 넣고 진행하면 된다.&lt;/figcaption&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;gatsby develop 또는 npm run develop&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그러면 localhost:8000 과 &lt;span style=&quot;background-color: #fdfaf6; color: #36313d;&quot;&gt; http://localhost:8000/___graphql 가 보이면 잘 작동이 되고 있는 것이다.&amp;nbsp;&lt;br /&gt;&lt;b&gt;개발 환경은 이것으로 끝!!!!&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fdfaf6; color: #36313d;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;폴더 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;contents - 블로그 포스트 관련 파일들을 저장하기 위한 디렉토리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;src&lt;br /&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; components - react Component를 저장하기 위한 디렉토리&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; hooks - custom Hooks을 저장하기 위한 디렉토리&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; pages - 페이지의 역할을 하는 컴포넌트를 저장하기 위한 디렉토리&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- gatsby 기본규칙으로 브라우저에서 pages 디렉토리에 있는 파일의 이름을 통해 페이지에 접근(url 경로)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; templates - Gatsby에서 제공하는 API를 통해 이 디렉토리에 저장된 템플릿 컴포넌트로 여러 페이지를 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 같은 형식의 여러 콘텐츠를 보여주는 컴포넌트를 저장하기 위한 디렉토리&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;플러그인 - 추후 보충&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Typescript + ESLint + Prettier 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;gatsby-config.js 설정&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;다음에는 Gatsby Graphql를 진행!!!&lt;/h2&gt;</description>
      <category>IT/Gatsby</category>
      <category>gatsby</category>
      <category>new</category>
      <category>Starter</category>
      <category>개발환경</category>
      <category>개츠비</category>
      <category>디렉토리</category>
      <category>설치</category>
      <category>시작</category>
      <category>플러그인</category>
      <category>환경구축</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/63</guid>
      <comments>https://slee2540.tistory.com/63#entry63comment</comments>
      <pubDate>Wed, 2 Jun 2021 00:23:36 +0900</pubDate>
    </item>
    <item>
      <title>코딜리티(Codility) Lesson4 CountDiv 문제풀기</title>
      <link>https://slee2540.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Write a function:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function solution(A, B, K);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;that, given three integers A, B and K, returns the number of integers within the range [A..B] that are divisible by K, i.e.:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{ i : A &amp;le; i &amp;le; B, i&amp;nbsp;&lt;b&gt;mod&lt;/b&gt;&amp;nbsp;K = 0 }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;For example, for A = 6, B = 11 and K = 2, your function should return 3, because there are three numbers divisible by 2 within the range [6..11], namely 6, 8 and 10.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Write an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;b&gt;efficient&lt;/b&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;algorithm for the following assumptions:&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A and B are integers within the range [&lt;span&gt;0&lt;/span&gt;..&lt;span&gt;2,000,000,000&lt;/span&gt;];&lt;/li&gt;
&lt;li&gt;K is an integer within the range [&lt;span&gt;1&lt;/span&gt;..&lt;span&gt;2,000,000,000&lt;/span&gt;];&lt;/li&gt;
&lt;li&gt;A &amp;le; B.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&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;span style=&quot;color: #666666;&quot;&gt;세 개의 정수 A, B, K가 주어지면 [A..B] 범위 내에서 K로 나눌 수 있는 정수의 수를 return 하라는 문제.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;첫번째 시도 : 0%&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1622099391557&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(A, B, K) {
    let result = 0;

    for(let i = A; i &amp;lt;= B; i++) {
        if( i % K === 0 ) result++; 
    }

    return result;
}&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;5번정도 시도 후: 100%&lt;/p&gt;
&lt;pre id=&quot;code_1622099556510&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; function solution(A, B, K) {
    let result = parseInt(B/K) - parseInt(A/K);

    if(A % K === 0) result += 1;

    return result    
}&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;처음의 시도의 for문으로 무식한 방법을 사용이 좋지는 않다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜&amp;nbsp; 나는 parseInt(B / K) - parseInt(A / K) 를 생각을 못했을까?????&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;math.floor로 먼저 적용을 하다가 남의 코드를 보고 parseInt를 보게 되었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;math.floor !== parseInt 에 대해서 체크 하게 되었다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/Algorithm</category>
      <category>codility</category>
      <category>CountDiv</category>
      <category>JavaScript</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>코딜리티</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/62</guid>
      <comments>https://slee2540.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 27 May 2021 16:34:37 +0900</pubDate>
    </item>
    <item>
      <title>Gatsby로 어떤걸 만들어 볼까?</title>
      <link>https://slee2540.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현재 소규모로 커뮤니티 사이트(프로토타입)를 만들고 싶은데 생각을 해보게 되었는데... 기획 부분이 많이 부족한 상태이다.&lt;br /&gt;후보중에 떠오르는 구성은 다음과 같았다.&lt;br /&gt;&lt;br /&gt;1. React + Express&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. Next + NestJs&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;3. Gatsby&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;CMS를 이용하여서 하여야 되는 부분이 있어서 Gatsby가 편리한 부분도 있지만, &lt;br /&gt;제약적인 부분이 많다고 생각이 들어서 적합하지 않다고 판단이 되었다.&lt;br /&gt;&lt;br /&gt;Gatsby로 블로그를 (&lt;span style=&quot;color: #ee2323;&quot;&gt;3. Gatsby&lt;/span&gt;) 배포 완료 후,&lt;br /&gt;인디 게임 리뷰 프로젝트를 진행할 예정 ( 2- Next + NestJS).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;현재 프로젝트 목표:&amp;nbsp; 블로그&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;선정 이유: 개인적인 일상, 생각 등을 관리하기 위한 목적이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고려 대상:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;1. 도메인 구매&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 어떤 서비스에 배포 ( github , gatsby cloud, netlify...)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3. 디자인 부분&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4. gatsby starter를 이용 여부&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;추후 프로젝트 목표: 인디게임 리뷰 ( 오픈 커뮤니티 )&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;선정이유: &amp;nbsp;인디게임 정보만 깔끔하게 보고싶고, 내가 그중에 마음에 드는 게임을 하고 싶기 때문이다.&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;생각이 필요한 부분 - 만들면서 더 고민을 해볼 생각이다.&lt;/b&gt;&lt;br /&gt;1. 회원 관리가 필요 또는 가능한가?&lt;br /&gt;&amp;nbsp; &amp;nbsp;- &lt;span style=&quot;color: #032f62;&quot;&gt;gatsby&lt;/span&gt;의 플러그인 &lt;span style=&quot;color: #032f62;&quot;&gt;gatsby-plugin-netlify-cms&lt;/span&gt; 사용하면 이메일 인증을 통한 회원가입 후에 일반 유저에게 생성 권한을 줄 수 있다.&lt;br /&gt;&lt;br /&gt;2. markdown 형식 에디터를 제공&lt;s&gt;&lt;br /&gt;&lt;/s&gt;&lt;s&gt;&lt;/s&gt;&amp;nbsp; &amp;nbsp;- 1번에서 말한 Netlify cms에 로그인시에 Netlify에서 제공하는 editor에 preview기능까지 제공한다.&lt;br /&gt;&lt;br /&gt;3. 데이터는 어디서 가지고 와야할까?&lt;s&gt;&lt;br /&gt;&lt;/s&gt;&amp;nbsp; &amp;nbsp;- 정적인 데이터(MDX)파일 생성 또는 Netlify에서 생성한 데이터를 가지고 와서 동적으로 페이지를 생성 가능.&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;- NestJS를 이용해서 인디관련 정보를 scraping을 통해서 파일(mdx)로 저장하는걸 고려중&lt;br /&gt;&lt;br /&gt;4. 인피니티 스크롤을 적용&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 가능하다. &lt;span style=&quot;color: #24292e;&quot;&gt;IntersectionObserver를 이용하여서 블로그에 추가 예정이다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;- 적용 후 마음에 들지 않는다면 페이지네이션으로 대처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 개츠비를 사용하여 간단하게 블로그를 만들었을 때가 v2 버전이였지만 현재는 v3으로 업데이트가 되어져 있어서 뭐가 달라졌는지에 대해서는 추후에 정리를 할 예정이고 예전에는 v2에서 netlify에 배포였던것을&amp;nbsp; gatsby cloud로 사용하려고 고려 중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 컨텐츠는 Gatsby 개발 설정!!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.gatsbyjs.com/&quot;&gt;https://www.gatsbyjs.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1621479849014&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;Gatsby | The Speed you Need to Delight Every Customer&quot; data-og-description=&quot;Gatsby provides development teams an open source frontend framework for creating rich, optimized websites and a cloud platform for delivering them on a blazing fast edge network.&quot; data-og-host=&quot;www.gatsbyjs.com&quot; data-og-source-url=&quot;https://www.gatsbyjs.com/&quot; data-og-url=&quot;https://www.gatsbyjs.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sxzWp/hyKhxYHigW/4fxTzokostaLSoPRaPFrk0/img.jpg?width=1600&amp;amp;height=836&amp;amp;face=0_0_1600_836&quot;&gt;&lt;a href=&quot;https://www.gatsbyjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.gatsbyjs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sxzWp/hyKhxYHigW/4fxTzokostaLSoPRaPFrk0/img.jpg?width=1600&amp;amp;height=836&amp;amp;face=0_0_1600_836');&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;Gatsby | The Speed you Need to Delight Every Customer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Gatsby provides development teams an open source frontend framework for creating rich, optimized websites and a cloud platform for delivering them on a blazing fast edge network.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.gatsbyjs.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;</description>
      <category>IT/Gatsby</category>
      <category>gatsby</category>
      <category>node</category>
      <category>react</category>
      <category>개발</category>
      <category>개츠비</category>
      <category>블로그만들기</category>
      <category>인디게임</category>
      <category>정적사이트</category>
      <category>커뮤니티</category>
      <category>토이프로젝트</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/61</guid>
      <comments>https://slee2540.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 20 May 2021 12:17:04 +0900</pubDate>
    </item>
    <item>
      <title>코딜리티(Codility) Lesson4 PermCheck 문제풀기</title>
      <link>https://slee2540.tistory.com/60</link>
      <description>&lt;p&gt;A non-empty array A consisting of N integers is given.&lt;/p&gt;
&lt;p&gt;A&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;permutation&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a sequence containing each element from 1 to N once, and only once.&lt;/p&gt;
&lt;p&gt;For example, array A such that:&lt;/p&gt;
&lt;p&gt;A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2&lt;/p&gt;
&lt;p&gt;is a permutation, but array A such that:&lt;/p&gt;
&lt;p&gt;A[0] = 4 A[1] = 1 A[2] = 3&lt;/p&gt;
&lt;p&gt;is not a permutation, because value 2 is missing.&lt;/p&gt;
&lt;p&gt;The goal is to check whether array A is a permutation.&lt;/p&gt;
&lt;p&gt;Write a function:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;function solution(A);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;that, given an array A, returns 1 if array A is a permutation and 0 if it is not.&lt;/p&gt;
&lt;p&gt;For example, given array A such that:&lt;/p&gt;
&lt;p&gt;A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2&lt;/p&gt;
&lt;p&gt;the function should return 1.&lt;/p&gt;
&lt;p&gt;Given array A such that:&lt;/p&gt;
&lt;p&gt;A[0] = 4 A[1] = 1 A[2] = 3&lt;/p&gt;
&lt;p&gt;the function should return 0.&lt;/p&gt;
&lt;p&gt;Write an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;b&gt;efficient&lt;/b&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;algorithm for the following assumptions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;N is an integer within the range [&lt;span&gt;1&lt;/span&gt;..&lt;span&gt;100,000&lt;/span&gt;];&lt;/li&gt;
&lt;li&gt;each element of array A is an integer within the range [&lt;span&gt;1&lt;/span&gt;..&lt;span&gt;1,000,000,000&lt;/span&gt;].&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;문제 이해 &amp;amp; 분석 :&lt;br /&gt;1. 값이 중복되는것이 없다면 1&lt;br /&gt;2. 값이 중복되는 값 또는 배열의 크기보다 값이 크다면 0&lt;br /&gt;3. 배열은 비어있는것은 없다. ( 배열의 length가 0일 경우 &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;예외처리 안해되 됨 &lt;/span&gt;)&lt;br /&gt;4. Integer(정수)로만 되어져 있다.&lt;br /&gt;&lt;br /&gt;생각 보다 심플하게 문제를 내주었다,&lt;/p&gt;
&lt;pre id=&quot;code_1620806764152&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(A) {
    const found = new Set(); // set을 사용하기 위해

    for (const num of A) {
    	// 중복값이나 배열수보다 크면 0
        if (found.has(num) || num &amp;gt; A.length) { return 0 }
        found.add(num);
    }
    return 1;
}     
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT/Algorithm</category>
      <category>codility</category>
      <category>JavaScript</category>
      <category>lesson4</category>
      <category>permcheck</category>
      <category>문제풀기</category>
      <category>문제풀이</category>
      <category>순열</category>
      <category>알고리즘</category>
      <category>코딜리티</category>
      <author>차가운남자</author>
      <guid isPermaLink="true">https://slee2540.tistory.com/60</guid>
      <comments>https://slee2540.tistory.com/60#entry60comment</comments>
      <pubDate>Wed, 12 May 2021 17:10:57 +0900</pubDate>
    </item>
  </channel>
</rss>