<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기먕로기의 로깅</title>
    <link>https://kimyanglogging.tistory.com/</link>
    <description>https://github.com/hyeongrok7874</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 02:51:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>기먕로기</managingEditor>
    <image>
      <title>기먕로기의 로깅</title>
      <url>https://tistory1.daumcdn.net/tistory/5631616/attach/e63cffbe23ac4c1a93365cbff84e3c18</url>
      <link>https://kimyanglogging.tistory.com</link>
    </image>
    <item>
      <title>[애자일 &amp;amp; 스크럼] 고등학교 프로젝트 팀의 일일 스크럼</title>
      <link>https://kimyanglogging.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나는 &lt;a href=&quot;https://github.com/themoment-team&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;더모먼트&lt;/a&gt;라는 교내 프로젝트 팀에 속해 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 개발에 참여한 프로젝트로는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;광주소프트웨어마이스터고등학교 입학 지원 서비스 &lt;a title=&quot;Hello, GSM&quot; href=&quot;https://www.hellogsm.kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Hello, GSM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;광주소프트웨어마이스터고등학교 공식 홈페이지 &lt;a href=&quot;https://official.hellogsm.kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Official GSM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;광주소프트웨어마이스터고등학교 동문 네트워킹 서비스 &lt;a href=&quot;https://www.gsm-networking.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GSM Networking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스크럼 적용까지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://search.shopping.naver.com/book/catalog/32443022370?query=%EC%8A%A4%ED%81%AC%EB%9F%BC%EA%B3%BC%20xp&amp;amp;NaPm=ct%3Dlo278d4g%7Cci%3D230c4bf7f0725c873516132eaa9169771d1c736b%7Ctr%3Dboksl%7Csn%3D95694%7Chk%3D24d8aea2394d2153905f26d0d4f2530b3b55915c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스크럼과 XP&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698023321529&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;스크럼과 XP : 네이버 도서&quot; data-og-description=&quot;네이버 도서 상세정보를 제공합니다.&quot; data-og-host=&quot;search.shopping.naver.com&quot; data-og-source-url=&quot;https://search.shopping.naver.com/book/catalog/32443022370?query=%EC%8A%A4%ED%81%AC%EB%9F%BC%EA%B3%BC%20xp&amp;amp;NaPm=ct%3Dlo278d4g%7Cci%3D230c4bf7f0725c873516132eaa9169771d1c736b%7Ctr%3Dboksl%7Csn%3D95694%7Chk%3D24d8aea2394d2153905f26d0d4f2530b3b55915c&quot; data-og-url=&quot;https://search.shopping.naver.com/book/catalog/32443022370&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uQimB/hyUgH6Bn4x/SqKJo0THKgBRwKqQPGGTM1/img.jpg?width=458&amp;amp;height=607&amp;amp;face=0_0_458_607,https://scrap.kakaocdn.net/dn/lZYEU/hyUkj32Afj/z9kUL3Yo7I1KrSFdEZTUo1/img.jpg?width=300&amp;amp;height=428&amp;amp;face=0_0_300_428,https://scrap.kakaocdn.net/dn/zNPVF/hyUgJiZHlZ/M11f1kiGxSshW7nAa52m7k/img.jpg?width=300&amp;amp;height=422&amp;amp;face=0_0_300_422&quot;&gt;&lt;a href=&quot;https://search.shopping.naver.com/book/catalog/32443022370?query=%EC%8A%A4%ED%81%AC%EB%9F%BC%EA%B3%BC%20xp&amp;amp;NaPm=ct%3Dlo278d4g%7Cci%3D230c4bf7f0725c873516132eaa9169771d1c736b%7Ctr%3Dboksl%7Csn%3D95694%7Chk%3D24d8aea2394d2153905f26d0d4f2530b3b55915c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://search.shopping.naver.com/book/catalog/32443022370?query=%EC%8A%A4%ED%81%AC%EB%9F%BC%EA%B3%BC%20xp&amp;amp;NaPm=ct%3Dlo278d4g%7Cci%3D230c4bf7f0725c873516132eaa9169771d1c736b%7Ctr%3Dboksl%7Csn%3D95694%7Chk%3D24d8aea2394d2153905f26d0d4f2530b3b55915c&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uQimB/hyUgH6Bn4x/SqKJo0THKgBRwKqQPGGTM1/img.jpg?width=458&amp;amp;height=607&amp;amp;face=0_0_458_607,https://scrap.kakaocdn.net/dn/lZYEU/hyUkj32Afj/z9kUL3Yo7I1KrSFdEZTUo1/img.jpg?width=300&amp;amp;height=428&amp;amp;face=0_0_300_428,https://scrap.kakaocdn.net/dn/zNPVF/hyUgJiZHlZ/M11f1kiGxSshW7nAa52m7k/img.jpg?width=300&amp;amp;height=422&amp;amp;face=0_0_300_422');&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;스크럼과 XP : 네이버 도서&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 도서 상세정보를 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;search.shopping.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 스크럼 적용에 앞서, 팀원들과 함께 스크럼과 XP라는 책을 가지고 스터디를 진행하였다.&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주에 1번, 정해진 분량을 읽어와서 자신의 생각을 서로 공유하는 방식으로 진행되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-10-23 오전 10.19.11.png&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;1970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x0si1/btsy2pq1ZJB/hJO7qpPZyXWSduJWbcZR40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x0si1/btsy2pq1ZJB/hJO7qpPZyXWSduJWbcZR40/img.png&quot; data-alt=&quot;스터디 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x0si1/btsy2pq1ZJB/hJO7qpPZyXWSduJWbcZR40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx0si1%2Fbtsy2pq1ZJB%2FhJO7qpPZyXWSduJWbcZR40%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;295&quot; height=&quot;390&quot; data-filename=&quot;스크린샷 2023-10-23 오전 10.19.11.png&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;1970&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;해당 스터디로 우리 팀은 조금이나마 스크럼에 눈을 뜨게 되었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스크럼 적용&lt;/h3&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;스프린트 기획에서는 스프린트 목표와 기간, 백로그를 작성하고 본격적으로 스프린트를 시작한다.&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;일일 스크럼은 did와 to do 공유를 위주로 진행을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일일 스크럼을 통해, 진행 중인 스프린트의 백로그를 하나씩 옮긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일일 스크럼을 진행하며 좋았던 점은 아래와 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;팀원들의 전반적인 진행을 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;팀원들과 공유한 to do를 무리해서라도 지킨다.&lt;/li&gt;
&lt;li&gt;서로의 진행도에 따라 도움을 주고 받기 위한 자리가 되기도 한다. &lt;br /&gt;(주로 스프린트 일정에 쫒기는 팀원의 ticket을 대신 맡아주는 경우가 있었다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 조금 아쉬웠던 점은 아래와 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;누군가 일일 스크럼에 늦는다면, 모두가 그 사람을 기다리는 경우가 생겼다.&amp;nbsp;&lt;br /&gt;(오프라인 한정)&lt;/li&gt;
&lt;li&gt;항상 해당 시간을 일정없이 비워둬야 하므로 조금의 개인 일정에 차질이 생기는 경우가 생긴다.&lt;/li&gt;
&lt;li&gt;간혹 스크럼에 피로함, 지루함을 느끼는 팀원들이 있다.&lt;/li&gt;
&lt;/ol&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;개인적인 의견을 덧붙이자면 스크럼을 하며 백로그를 하나씩 지워가는 맛은 해본자들만이 안다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스크럼, 아침 vs 저녁&lt;/h3&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;각 장단점을 직접 느껴보고자 우리 팀에서 아침과 저녁 각각 일일 스크럼을 진행해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 경험에 의존하여 두 스크럼을 비교해보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;아침 스크럼 vs 저녁 스크럼&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 57px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;아침&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;저녁&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;눈 뜨기도 힘든 아침, 스크럼에 참여하기 피곤하다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 일과를 마친 후라 비교적 깨어있는 상태이다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;did 보단 to do 위주의 스크럼이 진행된다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 19px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;to do 보단 did 위주의 스크럼이 진행된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;졸린 아침을 스크럼을 통해 극복할 수 있다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;해당 스크럼 시간 전에는 본인의 작업을 그쳐야 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아침에 할 일들을 정리하며 개인적으로도 동기 부여가 된다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저녁에 오늘 한 일들을 정리하며 일과를 마무리 할 수 있다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적인 선호로는 아침 스크럼이 더 좋은 경험이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;졸리고 피곤한 아침에 팀원들과 함께 이야기를 나누며 잠을 깨고, 오늘 하루 to do를 세우며 스크럼으로 에너지를 얻을 수 있었다.&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;&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;/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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;애자일은 죽었다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Agile is Dead&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- Dave Thomas -&lt;/span&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;&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;조직에 맞는 방법을 찾아, Agility(민첩성)을 유지하는 것이 중요하다고 생각한다.&lt;/p&gt;</description>
      <category>일기</category>
      <category>광주소프트웨어마이스터고등학교</category>
      <category>더모먼트</category>
      <category>스크럼</category>
      <category>스크럼과 XP</category>
      <category>애자일</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/17</guid>
      <comments>https://kimyanglogging.tistory.com/17#entry17comment</comments>
      <pubDate>Mon, 23 Oct 2023 12:21:24 +0900</pubDate>
    </item>
    <item>
      <title>[monorepo] pnpm workspace monorepo 모노레포 구축기 (official gsm)</title>
      <link>https://kimyanglogging.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 서비스(official gsm)의 환경을 세팅한 경험을 담았습니다.&lt;br /&gt;해당 레포 구조를 참고하셔서 글 읽어주시면 감사하겠습니다.&lt;br /&gt;&lt;a href=&quot;https://github.com/themoment-team/official-gsm-front&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://github.com/themoment-team/official-gsm-front&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;GitHub - themoment-team/official-gsm-front: 광주소프트웨어마이스터고등학교 공식 홈페이지&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;광주소프트웨어마이스터고등학교 공식 홈페이지. Contribute to themoment-team/official-gsm-front development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/themoment-team/official-gsm-front&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dsdVeh/hyTef33Fb0/N1tn8wh76KbqIDaWRhDE31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot; data-og-url=&quot;https://github.com/themoment-team/official-gsm-front&quot;&gt;&lt;a href=&quot;https://github.com/themoment-team/official-gsm-front&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/themoment-team/official-gsm-front&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dsdVeh/hyTef33Fb0/N1tn8wh76KbqIDaWRhDE31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - themoment-team/official-gsm-front: 광주소프트웨어마이스터고등학교 공식 홈페이지&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;광주소프트웨어마이스터고등학교 공식 홈페이지. Contribute to themoment-team/official-gsm-front development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목차&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0. 구축 배경&lt;br /&gt;1. pnpm workspace 구조 세팅&lt;br /&gt;2. package 생성&lt;br /&gt;3. dependency 세팅&lt;br /&gt;4. root package.json 세팅 [선택]&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 구축 배경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;official gsm&lt;/span&gt;이라는 광주소프트웨어마이스터고등학교 공식 홈페이지를 제작하며,&lt;br /&gt;admin 서비스와 client 서비스를 분리하게 되었고,&amp;nbsp;&lt;br /&gt;admin과 client를 분리하였지만, 서비스 구조 상 두 서비스간의 중복되는 모듈이 많다고 판단되어 모노레포로 구축하게 되었습니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &amp;nbsp;pnpm workspace 구조 세팅&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;workspace란, 직역하면 작업공간이고, 이 workspace로 인해 하나의 repository 안에서 여러 프로젝트 제작이 가능합니다.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;workspace 안에 여러 package들을 위치시킬 수 있고,&lt;br /&gt;a package와 b package 가 존재한다면, a 에서 b를 사용할 수도,&amp;nbsp;b 에서 a를 사용할 수도 있습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;위 서비스의 경우 package들을 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;apps/*&lt;/span&gt;, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;packages/*&lt;/span&gt; 으로 분기하였습니다.&lt;br /&gt;apps 디렉토리의 경우, 빌드 및 실행이 가능한 application을 위치시켰습니다. (client, admin, storybook)&lt;br /&gt;packages 디렉토리의 경우, 위 application에서 공통적으로 사용되는 config나 모듈들을 위치시켰습니다. (ex. tsconfig, ui)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;디렉토리 구조를 짰으면, 해당 package 들을 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;pnpm-workspace.yaml&lt;/span&gt; 에 아래와 같이 명시해주어야 합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;packages:
&amp;nbsp;&amp;nbsp;- 'apps/*'
&amp;nbsp;&amp;nbsp;- 'packages/*'&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. package 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 위치에 directory 생성 및 pnpm init 해주면 됩니다.&lt;br /&gt;아래는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;root workspace&lt;/span&gt;/packages에 ui라는 package를 생성해주는 과정입니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ cd packages
$ mkdir ui
$ cd ui
$ pnpm init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, 해당 디렉토리에 생성된 package.json을 목적에 맞게끔 수정해주면 됩니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. dependency 세팅&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- Root dependency&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;workspace의 root에 dependency를 설치하게 되면,&amp;nbsp;&lt;br /&gt;하위 packages에서 dependency를 설치하지 않아도 해당 dependency를 사용할 수 있습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;root에 dependency 설치 시, pnpm 에서 아래와 같은 에러를 띄웁니다&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ pnpm add [dependency]
# ERR_PNPM_ADDING_TO_ROOT&amp;thinsp; Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don't want to see this warning anymore, you may set the ignore-workspace-root-check setting to true.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실수로 workspace root에 dependency를 추가함을 방지하는 것으로&lt;br /&gt;우리가 root에 설치를 의도하였으므로 아래 커멘드로 root에 dependency를 설치합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ pnpm add [dependency] -w&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;※ trouble shooting&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇몇 의존성의 경우, root에 설치하지 않고 다른 package에 각각 의존성을 설치하는 경우 정상적으로 작동되지 않습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;emotion의 경우 package 마다 설치하여 사용하게 되면 아래와 같은 경고가 뜹니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;You are loading @emotion/react when it is already loaded. Running multiple instances may cause problems. This can happen if multiple versions are used, or if multiple builds of the same version are used.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 emotion이 load 되었다는 뜻인데, 말 그대로 emotion이 단일로 실행되지 않았다는 것 입니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;이 경고는 theme 같은 부분에 영향을 끼칩니다.&amp;nbsp;&lt;br /&gt;예시 케이스로, 각 애플리케이션(ex. apps/client)에서 theme 설정을 해둔 상태로,&lt;br /&gt;package/ui에서 해당 theme을 사용하게되면, theme이 불러와지지 않는 문제가 발생합니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;react-query의 경우도, 각 애플리케이션(ex. apps/client)에서 QueryClientProvider를 설정해두어도 아래와 같은 에러가 뜹니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Error: No QueryClient set, use QueryClientProvider to set one&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 useQuery custom hook을 제작해둔 package(packages/api) 에도 react-query가 설치되어 있어,&lt;br /&gt;애플리케이션과 같은 dependency를 사용하지 않고, 서로 각각의 react-query를 사용하고 있어 해당 이슈가 발생하는 듯 합니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;해결 방법이 두개정도가 있었는데,&lt;br /&gt;1. packages/api에 react-query를 peerDependencies로 추가&amp;nbsp;&lt;br /&gt;2. workspace root에 react-query 추가&lt;br /&gt;위 두 선택지를 활용하면 되겠습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;위 처럼 되도록 공통으로 사용되는 dependency들을 root에 설치하여 이러한 이슈를 막아야 합니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- workspace 내의 package 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;workspace 내의 package를 workspace 내의 package에 설치하는 방법입니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ pnpm --filter [package] add [another package] --workspace
$ pnpm --filter client add ui --workspace&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;위 커멘드로 가능합니다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. root package.json 세팅 [선택]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 package에 command를 입력하기 위해서는&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ pnpm --filter [package] [command]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 같이 --filter filtering을 작성해주어야 한다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;특정 package에 명령어를 입력하는 경우가 많은데, 매번 --filter를 작성하기가 번거롭다고 생각되어&lt;br /&gt;&amp;nbsp;&lt;br /&gt;root package.json의 scripts 에 미리 --filter를 아래와 같이 매핑해두었습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&quot;scripts&quot;: {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;client&quot;: &quot;pnpm --filter client&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;admin&quot;: &quot;pnpm --filter admin&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;storybook&quot;: &quot;pnpm --filter storybook&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;api&quot;: &quot;pnpm --filter api&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;common&quot;: &quot;pnpm --filter common&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;ui&quot;: &quot;pnpm --filter ui&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;tsconfig&quot;: &quot;pnpm --filter tsconfig&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;eslint-config-custom&quot;: &quot;pnpm --filter eslint-config-custom&quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;types&quot;: &quot;pnpm --filter types&quot;
&amp;nbsp;&amp;nbsp;},&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 미리 --filter를 매핑해두면, 특정 package 명령어를 아래처럼 사용 가능합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ pnpm client dev #pnpm --filter client dev
$ pnpm [package] [command] # command는 [package]/package.json의 scripts에 작성된 커멘드&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;monorepo로 약 2달간 개발을 진행해보며 정말 많은 트러블 슈팅을 하였습니다.&lt;br /&gt;ts 관련 문제나 dependency와 관련된 문제 등..&lt;br /&gt;&amp;nbsp;&lt;br /&gt;국내에 monorepo 관련 자료가 많이 없어 (아무래도 개인 프로젝트를 하며 monorepo를 구축하는 경우가 많이 없고, 작은 규모의 프로젝트에서는 monorepo를 사용하는 경우가 적기 때문이 아닌가 싶습니다.) 해외 article들과 친해지느라 조금 고생했습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;초기 구조 설계적인 부분에 있어서는 오픈 소스 repository를 많이 참고 하였습니다.&lt;br /&gt;이 글을 읽게 되신다면 저랑 같은 고민들을 많이 하실텐데, 아래 repository 참고하시면 monorepo 설계에 도움받을 수 있을 듯 합니다.&lt;br /&gt;&lt;a href=&quot;https://github.com/calcom/cal.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://github.com/calcom/cal.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기술</category>
      <category>monorepo</category>
      <category>pnpm</category>
      <category>pnpm workspace</category>
      <category>Workspace</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/16</guid>
      <comments>https://kimyanglogging.tistory.com/16#entry16comment</comments>
      <pubDate>Thu, 6 Jul 2023 14:14:55 +0900</pubDate>
    </item>
    <item>
      <title>[React] Axios로 FormData 전달하기</title>
      <link>https://kimyanglogging.tistory.com/15</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;FormData?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FormData 클래스를 이용하면 html의 form 태그를 이용하여 보내는 데이터를 JavaScript에서 다룰 수 있다.&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;보통의 경우 JSON 구조로 데이터를 전송하므로 사용할 일이 많지는 않지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FormData를 이용하여 파일을 서버에 보낼 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;FormData() 클래스 사용법&lt;/h2&gt;
&lt;pre id=&quot;code_1680936271153&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const formData = new FormData(); // FormData 객체 선언

formData.append('key', value); // key: value 형식으로 append 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 사용법은 위와 같다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;React로 데이터 보내기&lt;/h2&gt;
&lt;pre id=&quot;code_1680938423192&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const imgInput = useRef(null); // Ref 선언

...

&amp;lt;input type=&quot;file&quot; ref={imgInput} /&amp;gt; // Ref 할당&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 input에 Ref를 연결해주고&lt;/p&gt;
&lt;pre id=&quot;code_1680939097001&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const postImg = async () =&amp;gt; {
    const formData = new FormData();
    
    formData.append('photo', imgInput.current.files[0]);
    
    axios.post('/url', formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;axios로 post 시, config에 header 설정을 위와 같이 넘겨준다.&lt;/p&gt;</description>
      <category>기술</category>
      <category>axios</category>
      <category>formdata</category>
      <category>react</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/15</guid>
      <comments>https://kimyanglogging.tistory.com/15#entry15comment</comments>
      <pubDate>Sat, 8 Apr 2023 17:32:48 +0900</pubDate>
    </item>
    <item>
      <title>[iTerm2] oh-my-zsh, powerlevel10k 로 mac 터미널 커스텀하기</title>
      <link>https://kimyanglogging.tistory.com/14</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 7.59.46.png&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn5xno/btr6QpevqVU/nns22Sc1Ktky4XSEpZSZRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn5xno/btr6QpevqVU/nns22Sc1Ktky4XSEpZSZRk/img.png&quot; data-alt=&quot;cool&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn5xno/btr6QpevqVU/nns22Sc1Ktky4XSEpZSZRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn5xno%2Fbtr6QpevqVU%2Fnns22Sc1Ktky4XSEpZSZRk%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;2260&quot; height=&quot;764&quot; data-filename=&quot;스크린샷 2023-03-29 오후 7.59.46.png&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cool&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사진 같은 가독성 좋고, 사용하면서 즐거운 터미널을 만들어 보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;iTerm2 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iterm2.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://iterm2.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680086713276&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;iTerm2 - macOS Terminal Replacement&quot; data-og-description=&quot;iTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrain&quot; data-og-host=&quot;iterm2.com&quot; data-og-source-url=&quot;https://iterm2.com/&quot; data-og-url=&quot;https://iterm2.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tgOTf/hyR5lYsuFB/RArQ1PJjQJU7XpsXa4kSqk/img.jpg?width=1600&amp;amp;height=624&amp;amp;face=0_0_1600_624&quot;&gt;&lt;a href=&quot;https://iterm2.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iterm2.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tgOTf/hyR5lYsuFB/RArQ1PJjQJU7XpsXa4kSqk/img.jpg?width=1600&amp;amp;height=624&amp;amp;face=0_0_1600_624');&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;iTerm2 - macOS Terminal Replacement&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;iTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrain&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iterm2.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크에서 설치를 진행한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;oh-my-zsh 설치&lt;/h2&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;sh -c &quot;$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 테마와 플러그인을 사용할 수 있게 해준다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;powerlevel10k 설치 및 적용&lt;/h2&gt;
&lt;pre id=&quot;code_1680087518146&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/romkatv/powerlevel10k.git $ZSH/themes/powerlevel10k&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 커멘드로 powerlevel10k 테마를 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1680087773985&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi나 nano 같은 텍스트 에디터로 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;~/.zshrc&lt;/span&gt;&amp;nbsp;파일을 수정할 것 이다.&lt;/p&gt;
&lt;pre id=&quot;code_1680087873019&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ZSH_THEME=&quot;powerlevel10k/powerlevel10k&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.zshrc 파일의 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;ZSH_THEME&lt;/span&gt; 이라는 항목을 위 처럼 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1680088028508&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&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;이후 재설정은 아래 커맨드를 입력하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1680088163662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;p10k configure&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;iTerm2 색상 바꾸기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;색 조합 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl을 이용할 것으로 curl을 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1680088296232&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install curl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iterm2colorschemes.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://iterm2colorschemes.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680088313017&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;Iterm Themes - Color Schemes and Themes for Iterm2&quot; data-og-description=&quot;&quot; data-og-host=&quot;iterm2colorschemes.com&quot; data-og-source-url=&quot;https://iterm2colorschemes.com/&quot; data-og-url=&quot;https://iterm2colorschemes.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kWgra/hyR5p7CRBA/BTpLPHqwYtXdZBjkR1KZCK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/wEgC6/hyR5oVaPe1/3iXVRLRjQWMnVpkC3GhRh1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/415tM/hyR5vzZtMd/kcAzNEkUVkSeXi2wBx3xmk/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300&quot;&gt;&lt;a href=&quot;https://iterm2colorschemes.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iterm2colorschemes.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kWgra/hyR5p7CRBA/BTpLPHqwYtXdZBjkR1KZCK/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/wEgC6/hyR5oVaPe1/3iXVRLRjQWMnVpkC3GhRh1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/415tM/hyR5vzZtMd/kcAzNEkUVkSeXi2wBx3xmk/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Iterm Themes - Color Schemes and Themes for Iterm2&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;iterm2colorschemes.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;원하는 조합의 이름을 클릭하면 xml이 보여질텐데 이 xml의 URL을 복사한다.&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;복사한 URL을 이용하여 아래 명령어를 본인이 기억할 수 있는 위치에서 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1680088469887&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 본인이 기억할 수 있는 위치
mkdir iTerm2-color &amp;amp;&amp;amp; cd iTerm2-color

# 색 조합 설치
curl -LO &quot;복사한 색 조합 URL&quot;
# example
curl -LO https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/Dracula%2B.itermcolors&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;색 조합 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + comma(,) 조합으로 settings에 들어가 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Profiles &amp;gt; Colors&lt;/span&gt;에 들어가 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Color Presets&lt;/span&gt;를 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.37.29.png&quot; data-origin-width=&quot;1858&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm2EL5/btr6NYCgBCR/JakG96o01z4GL59sqhcHK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm2EL5/btr6NYCgBCR/JakG96o01z4GL59sqhcHK1/img.png&quot; data-alt=&quot;Profiles &amp;amp;gt; Colors&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm2EL5/btr6NYCgBCR/JakG96o01z4GL59sqhcHK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm2EL5%2Fbtr6NYCgBCR%2FJakG96o01z4GL59sqhcHK1%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;673&quot; height=&quot;348&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.37.29.png&quot; data-origin-width=&quot;1858&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Profiles &amp;gt; Colors&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Import를 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.35.45.png&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bin9VM/btr6N5g08uG/EFlzBvHEkK5yRBLYZ3zS21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bin9VM/btr6N5g08uG/EFlzBvHEkK5yRBLYZ3zS21/img.png&quot; data-alt=&quot;click Import&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bin9VM/btr6N5g08uG/EFlzBvHEkK5yRBLYZ3zS21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbin9VM%2Fbtr6N5g08uG%2FEFlzBvHEkK5yRBLYZ3zS21%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;199&quot; height=&quot;348&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.35.45.png&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;click Import&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;finder에서 아까 색 조합을 설치한 폴더에 접근하여 색 조합 선택 후 Open을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.35.27.png&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;912&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNEm0j/btr6RAUqEc3/FV2iIRBxt6UOiTvrDa1120/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNEm0j/btr6RAUqEc3/FV2iIRBxt6UOiTvrDa1120/img.png&quot; data-alt=&quot;finder&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNEm0j/btr6RAUqEc3/FV2iIRBxt6UOiTvrDa1120/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNEm0j%2Fbtr6RAUqEc3%2FFV2iIRBxt6UOiTvrDa1120%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;538&quot; height=&quot;364&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.35.27.png&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;912&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;finder&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dracula 테마가 Color Presets에 추가된 것을 볼 수 있고, 적용이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.46.18.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y0c3s/btr6RYno1r8/OsU6hqKyKk6XwRgmCD4uG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y0c3s/btr6RYno1r8/OsU6hqKyKk6XwRgmCD4uG0/img.png&quot; data-alt=&quot;Dracula 색조합이 추가되었다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y0c3s/btr6RYno1r8/OsU6hqKyKk6XwRgmCD4uG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy0c3s%2Fbtr6RYno1r8%2FOsU6hqKyKk6XwRgmCD4uG0%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;338&quot; height=&quot;195&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.46.18.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Dracula 색조합이 추가되었다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;커스텀 완료&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.49.45.png&quot; data-origin-width=&quot;2244&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTshuz/btr6RYt92QK/Gi9qD6Ky76jfAYDv868waK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTshuz/btr6RYt92QK/Gi9qD6Ky76jfAYDv868waK/img.png&quot; data-alt=&quot;complete&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTshuz/btr6RYt92QK/Gi9qD6Ky76jfAYDv868waK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTshuz%2Fbtr6RYt92QK%2FGi9qD6Ky76jfAYDv868waK%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;616&quot; height=&quot;126&quot; data-filename=&quot;스크린샷 2023-03-29 오후 8.49.45.png&quot; data-origin-width=&quot;2244&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;complete&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 예뻐진 터미널을 만날 수 있다!&lt;/p&gt;</description>
      <category>일기</category>
      <category>iTerm2</category>
      <category>oh-my-zsh</category>
      <category>PowerLevel10k</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/14</guid>
      <comments>https://kimyanglogging.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 30 Mar 2023 00:00:45 +0900</pubDate>
    </item>
    <item>
      <title>[TypeScript] vscode-styled-components 작동 안 될시</title>
      <link>https://kimyanglogging.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제상황&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.13.05.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uV90z/btr6BCMMn9k/ZUx1EkTuWyrH9sETQT9m0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uV90z/btr6BCMMn9k/ZUx1EkTuWyrH9sETQT9m0K/img.png&quot; data-alt=&quot;vscode-styled-components&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uV90z/btr6BCMMn9k/ZUx1EkTuWyrH9sETQT9m0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuV90z%2Fbtr6BCMMn9k%2FZUx1EkTuWyrH9sETQT9m0K%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;1750&quot; height=&quot;418&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.13.05.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vscode-styled-components&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;vscode-styled-components&lt;br /&gt;&lt;/b&gt;styled-components나 @emotion/styled의 자동완성 plugin.&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.09.07.png&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/72AYW/btr6BlkbH2F/rIGkWYrPIlPuS1YM7gENV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/72AYW/btr6BlkbH2F/rIGkWYrPIlPuS1YM7gENV0/img.png&quot; data-alt=&quot;not working&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/72AYW/btr6BlkbH2F/rIGkWYrPIlPuS1YM7gENV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F72AYW%2Fbtr6BlkbH2F%2FrIGkWYrPIlPuS1YM7gENV0%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;572&quot; height=&quot;234&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.09.07.png&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;not working&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode-styled-components가 동작하지 않는다..&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;(위의 상황은 display 속성이 자동완성에 나타나는걸 기대했지만..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내 프로젝트의 TypeScript 버전이 vscode에서 제공하는 typescript 버전보다 높을 때 발생하는 문제인 듯 하다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;vscode typescript 버전 확인&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Status Bar 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장자가 .ts 인 파일을 vscode에 띄우면, Status Bar에 TypeScript가 나타난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.41.32.png&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEDQsj/btr6GVLg7Bp/VkfahY2Zj8Us80Rk0FKGXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEDQsj/btr6GVLg7Bp/VkfahY2Zj8Us80Rk0FKGXK/img.png&quot; data-alt=&quot;TypeScript&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEDQsj/btr6GVLg7Bp/VkfahY2Zj8Us80Rk0FKGXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEDQsj%2Fbtr6GVLg7Bp%2FVkfahY2Zj8Us80Rk0FKGXK%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;228&quot; height=&quot;62&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.41.32.png&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TypeScript&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p 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-filename=&quot;스크린샷 2023-03-29 오전 9.01.20.png&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cstfNY/btr6JnAObNt/TQKqJvechjhJGwLHVlkE80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cstfNY/btr6JnAObNt/TQKqJvechjhJGwLHVlkE80/img.png&quot; data-alt=&quot;typescript version&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cstfNY/btr6JnAObNt/TQKqJvechjhJGwLHVlkE80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcstfNY%2Fbtr6JnAObNt%2FTQKqJvechjhJGwLHVlkE80%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;1356&quot; height=&quot;538&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.01.20.png&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;typescript version&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 옆에 핀 모양을 누르면 status bar에 고정된다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Show All Commands 활용&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.09.56.png&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btFVkd/btr6x9kl9qz/0ocULPfkxmNzjQpckOqkM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btFVkd/btr6x9kl9qz/0ocULPfkxmNzjQpckOqkM1/img.png&quot; data-alt=&quot;Show All Commands&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btFVkd/btr6x9kl9qz/0ocULPfkxmNzjQpckOqkM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtFVkd%2Fbtr6x9kl9qz%2F0ocULPfkxmNzjQpckOqkM1%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;1478&quot; height=&quot;366&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.09.56.png&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Show All Commands&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;cmd + shift + p&lt;/span&gt;로 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;Show All Commands&lt;/span&gt;를 열고 아래를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1680045910524&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;TypeScript: Select TypeScript Version&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-filename=&quot;스크린샷 2023-03-29 오전 8.10.00.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJDy60/btr6AgjorN2/VK0gZsSswkgEYZbKwXqLJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJDy60/btr6AgjorN2/VK0gZsSswkgEYZbKwXqLJk/img.png&quot; data-alt=&quot;check version&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJDy60/btr6AgjorN2/VK0gZsSswkgEYZbKwXqLJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJDy60%2Fbtr6AgjorN2%2FVK0gZsSswkgEYZbKwXqLJk%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;1596&quot; height=&quot;418&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.10.00.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;check version&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;Use VS Code's Version 옆에 버전이 기재된걸 확인할 수 있다. (예시에서는 4.9.5 이네요)&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;내 프로젝트 TypeScript 버전 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;package.json의 typescript를 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.07.30.png&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/er9N5S/btr6DLJeF9F/ZLKXKQ3nDHLzieMUoKamhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/er9N5S/btr6DLJeF9F/ZLKXKQ3nDHLzieMUoKamhk/img.png&quot; data-alt=&quot;project typescript version&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/er9N5S/btr6DLJeF9F/ZLKXKQ3nDHLzieMUoKamhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fer9N5S%2Fbtr6DLJeF9F%2FZLKXKQ3nDHLzieMUoKamhk%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;382&quot; height=&quot;52&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.07.30.png&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;project typescript version&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우는 5.0.2 버전이다.&lt;/p&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript의 버전을 다운그레이드 하였다.&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;github의 release note를 참고하였다. &lt;br /&gt;&lt;a href=&quot;https://github.com/microsoft/TypeScript/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/microsoft/TypeScript/releases&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680050357478&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add typescript@4.9.5&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.46.23.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p9k5q/btr6BUs5718/L7yObrCSklsoVlB3A5fXG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p9k5q/btr6BUs5718/L7yObrCSklsoVlB3A5fXG0/img.png&quot; data-alt=&quot;welcome&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p9k5q/btr6BUs5718/L7yObrCSklsoVlB3A5fXG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9k5q%2Fbtr6BUs5718%2FL7yObrCSklsoVlB3A5fXG0%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;718&quot; height=&quot;574&quot; data-filename=&quot;스크린샷 2023-03-29 오전 9.46.23.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;welcome&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode를 완전히 종료하고 재시작하는 것으로 해결이 되기도 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.10.00.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAAeWn/btr9pZdsR3s/JQb1AxfYBikK4o86RQo8zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAAeWn/btr9pZdsR3s/JQb1AxfYBikK4o86RQo8zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAAeWn/btr9pZdsR3s/JQb1AxfYBikK4o86RQo8zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAAeWn%2Fbtr9pZdsR3s%2FJQb1AxfYBikK4o86RQo8zK%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;1596&quot; height=&quot;418&quot; data-filename=&quot;스크린샷 2023-03-29 오전 8.10.00.png&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 위 상황에서 Use Workspace Version을 선택하여 해결되는 경우도 있었다.&lt;/p&gt;</description>
      <category>기술</category>
      <category>typescript</category>
      <category>VSCode</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/13</guid>
      <comments>https://kimyanglogging.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 29 Mar 2023 09:47:41 +0900</pubDate>
    </item>
    <item>
      <title>[yarn berry + husky] chalk 관련 에러 해결</title>
      <link>https://kimyanglogging.tistory.com/12</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;상황&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yarn berry가 적용된 프로젝트에 husky를 통한 pre-commit lint를 적용하려고 하다 에러가 발생하였다.&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-filename=&quot;스크린샷 2023-03-10 오후 12.20.14.png&quot; data-origin-width=&quot;2710&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSeCFW/btr24joZxY7/Ko0zEfX7JWX7mtn3ZzSUm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSeCFW/btr24joZxY7/Ko0zEfX7JWX7mtn3ZzSUm1/img.png&quot; data-alt=&quot;omg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSeCFW/btr24joZxY7/Ko0zEfX7JWX7mtn3ZzSUm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSeCFW%2Fbtr24joZxY7%2FKo0zEfX7JWX7mtn3ZzSUm1%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;2710&quot; height=&quot;734&quot; data-filename=&quot;스크린샷 2023-03-10 오후 12.20.14.png&quot; data-origin-width=&quot;2710&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;omg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Error:&amp;nbsp;chalk&amp;nbsp;tried&amp;nbsp;to&amp;nbsp;access&amp;nbsp;#ansi-styles,&amp;nbsp;but&amp;nbsp;it&amp;nbsp;isn't&amp;nbsp;declared&amp;nbsp;in&amp;nbsp;its&amp;nbsp;dependencies;&amp;nbsp;this&amp;nbsp;makes&amp;nbsp;the&amp;nbsp;require&amp;nbsp;call&amp;nbsp;ambiguous&amp;nbsp;and&amp;nbsp;unsound.&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;h3 data-ke-size=&quot;size23&quot;&gt;해결&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-10 오후 1.24.43.png&quot; data-origin-width=&quot;2628&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VuTzC/btr2Yid9CHW/jkCToLKvzARDk2mJp4rWB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VuTzC/btr2Yid9CHW/jkCToLKvzARDk2mJp4rWB1/img.png&quot; data-alt=&quot;solution&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VuTzC/btr2Yid9CHW/jkCToLKvzARDk2mJp4rWB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVuTzC%2Fbtr2Yid9CHW%2FjkCToLKvzARDk2mJp4rWB1%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;2628&quot; height=&quot;866&quot; data-filename=&quot;스크린샷 2023-03-10 오후 1.24.43.png&quot; data-origin-width=&quot;2628&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;solution&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;.yarnrc.yml&lt;/span&gt;에 위 내용을 추가하면 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 경우는 구체적인 버전을 표기하지는 않았다.&lt;/p&gt;
&lt;pre id=&quot;code_1678423684140&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

packageExtensions:
  chalk@*:
    dependencies:
      &quot;#ansi-styles&quot;: npm:ansi-styles@*
      &quot;#supports-color&quot;: npm:supports-color@*&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용을 추가한 후 yarn에 적용시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1678428428805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ yarn&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-03-10 오후 3.10.17.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clPpNd/btr29GStq9X/RE4Bu0rAiYow1KiXEZrzz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clPpNd/btr29GStq9X/RE4Bu0rAiYow1KiXEZrzz1/img.png&quot; data-alt=&quot;해결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clPpNd/btr29GStq9X/RE4Bu0rAiYow1KiXEZrzz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclPpNd%2Fbtr29GStq9X%2FRE4Bu0rAiYow1KiXEZrzz1%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;790&quot; height=&quot;264&quot; data-filename=&quot;스크린샷 2023-03-10 오후 3.10.17.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Ref.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/chalk/chalk/issues/531&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/chalk/chalk/issues/531&lt;/a&gt;&lt;/p&gt;</description>
      <category>기술</category>
      <category>chalk</category>
      <category>Husky</category>
      <category>yarn berry</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/12</guid>
      <comments>https://kimyanglogging.tistory.com/12#entry12comment</comments>
      <pubDate>Fri, 10 Mar 2023 13:50:17 +0900</pubDate>
    </item>
    <item>
      <title>[TypeScript] npm 라이브러리 배포하기</title>
      <link>https://kimyanglogging.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript로 만든 모듈을 npm에 배포까지 해보자&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;절차&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 프로젝트 생성 및 세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. ts 모듈 개발&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. ts 모듈 컴파일 - CommonJS, ES Modules 다중 지원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. package.json 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 배포&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사전 지식&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모듈 방식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈 방식에는 Commonjs, ES Modules 방식이 존재한다.&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;CommonJS&lt;/p&gt;
&lt;pre id=&quot;code_1674201780322&quot; class=&quot;java&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const example = require('./example')
const {example} = require('./exmaple')

module.exports = {example}
module.exports = {default: example}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES Modules&lt;/p&gt;
&lt;pre id=&quot;code_1674201780323&quot; class=&quot;routeros&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import example from './example'
import {example} from './example'

export {example}
export default example&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 불러오기, 내보내기 방식이 다르고 두 방식 모두 활발하게 사용 중 이라 두 모듈을 복수 지원해주는게 좋다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트 생성 및 세팅&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm 사이트에 검색하여 중복 되지 않는 이름을 찾아 개발할 라이브러리 이름을 정하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.npmjs.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674197798455&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;npm&quot; data-og-description=&quot;Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&quot; data-og-host=&quot;www.npmjs.com&quot; data-og-source-url=&quot;https://www.npmjs.com/&quot; data-og-url=&quot;https://www.npmjs.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RvQP5/hyRlzWNKRF/Oja3YE4MGCbgZrKxsYArh1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.npmjs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RvQP5/hyRlzWNKRF/Oja3YE4MGCbgZrKxsYArh1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;npm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.npmjs.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm init으로 초기 세팅을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674196380466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir ${project-name}
cd ${project-name}
npm init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 세팅 이후 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;package.json&lt;/span&gt;에 한 문장을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674201646537&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  ...,
  &quot;type&quot;: &quot;module&quot;,
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 내에서 ES modules 방식을 사용하기 위해 추가하였다.&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;typescript를 활용하기 위해 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674198272746&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i -D typescript&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ts 모듈 개발&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src폴더를 만들고 그 안에 index.ts 모듈을 작성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674199272019&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const hello = (name: string): string =&amp;gt; {
  return `hello ${name}`;
};&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ts 모듈 컴파일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 ts 파일을 컴파일 하여 dist 디렉토리에 저장하도록 할 것 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러기 위한 세팅 방법을 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tsc로 ts 파일을 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;CommonJS 모듈에 맞게끔 한번, ES Modules에 맞게끔 한번.&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;프로젝트 루트에 3개의 tsconfig 파일을 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1674201885113&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;├── tsconfig-base.json
├── tsconfig-cjs.json
└── tsconfig.json&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;base는 tsconfig-cjs와 tsconfig에서 상속받아 사용할 공통 설정들을 담는다.&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;tsconfig-cjs는 CommonJS를 위한 파일이고, 일반 tsconfig는 ES Modules를 위한 파일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(위 package.json 에서 기본 모듈 타입을 ES Modules로 지정했기 때문에 default config를 ES Modules에 맞게 작성하겠다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;tsconfig-base.json&lt;/p&gt;
&lt;pre id=&quot;code_1674201992806&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;compilerOptions&quot;: {
    &quot;target&quot;: &quot;ES5&quot;,
    &quot;allowJs&quot;: true,
    &quot;allowSyntheticDefaultImports&quot;: true,
    &quot;baseUrl&quot;: &quot;src&quot;,
    &quot;declaration&quot;: true,
    &quot;esModuleInterop&quot;: true,
    &quot;inlineSourceMap&quot;: false,
    &quot;listEmittedFiles&quot;: false,
    &quot;listFiles&quot;: false,
    &quot;moduleResolution&quot;: &quot;node&quot;,
    &quot;noFallthroughCasesInSwitch&quot;: true,
    &quot;pretty&quot;: true,
    &quot;resolveJsonModule&quot;: true,
    &quot;rootDir&quot;: &quot;src&quot;,
    &quot;skipLibCheck&quot;: true,
    &quot;strict&quot;: true,
    &quot;traceResolution&quot;: false
  },
  &quot;compileOnSave&quot;: false,
  &quot;exclude&quot;: [&quot;node_modules&quot;, &quot;dist&quot;],
  &quot;include&quot;: [&quot;src&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남은 두 파일은 compiler option을 다르게 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;tsconfig-cjs.json&lt;/p&gt;
&lt;pre id=&quot;code_1674202053731&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;extends&quot;: &quot;./tsconfig-base.json&quot;,
  &quot;compilerOptions&quot;: {
    &quot;module&quot;: &quot;commonjs&quot;,
    &quot;outDir&quot;: &quot;dist/cjs&quot;,
    &quot;target&quot;: &quot;es2015&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;tsconfig.json&lt;/p&gt;
&lt;pre id=&quot;code_1674202238710&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;extends&quot;: &quot;./tsconfig-base.json&quot;,
  &quot;compilerOptions&quot;: {
    &quot;module&quot;: &quot;esnext&quot;,
    &quot;outDir&quot;: &quot;dist/mjs&quot;,
    &quot;target&quot;: &quot;esnext&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 파일들을 작성 후 프로젝트 루트에 &amp;nbsp;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;fixup.sh&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;size18&quot;&gt;fixup.sh&lt;/p&gt;
&lt;pre id=&quot;code_1674202470192&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cp dist/mjs/index.d.ts dist 

rm -rf dist/*/index.d.ts 

cat &amp;gt;dist/cjs/package.json &amp;lt;&amp;lt;!EOF
{
    &quot;type&quot;: &quot;commonjs&quot;
}
!EOF

cat &amp;gt;dist/mjs/package.json &amp;lt;&amp;lt;!EOF
{
    &quot;type&quot;: &quot;module&quot;
}
!EOF&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;index.d.ts 파일을 dist 아래 경로로 옮기고 (중복 제거) 빌드된 파일들이 저장될 디렉토리에 package.json을 생성하는 스크립트이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;package.json 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드 커멘드를 추가하고, export 관련한 설정을 추가하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;package.json&lt;/p&gt;
&lt;pre id=&quot;code_1674204980331&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;scripts&quot;: {
    &quot;build&quot;: &quot;rm -fr dist/* &amp;amp;&amp;amp; tsc -p tsconfig.json &amp;amp;&amp;amp; tsc -p tsconfig-cjs.json &amp;amp;&amp;amp; ./fixup.sh&quot;
  },
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;build 스크립트를 위와 같이 추가해준다.&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;dist 디렉토리를 지우고, tsconfig 파일을 이용하여 각 모듈에 맞게끔 컴파일 두번 한다.&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;fixup 스크립트로 dist/mjs/index.d.ts 파일을 dist/index.d.ts로 복사하고 각 디렉토리의 index.d.ts 파일을 삭제한다.&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;그 다음, dist 하위 각 디렉토리에 맞게끔 package.json을 추가한다.&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 관련 설정만 추가하면 배포 준비가 끝난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;package.json&lt;/p&gt;
&lt;pre id=&quot;code_1674206200312&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  ...,
  &quot;main&quot;: &quot;dist/cjs/index.js&quot;,
  &quot;module&quot;: &quot;dist/mjs/index.js&quot;,
  &quot;types&quot;: &quot;dist/index.d.ts&quot;,
  &quot;exports&quot;: {
    &quot;.&quot;: {
      &quot;import&quot;: &quot;./dist/mjs/index.js&quot;,
      &quot;require&quot;: &quot;./dist/cjs/index.js&quot;
    }
  },
}&lt;/code&gt;&lt;/pre&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;npm에 배포&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 npm에 올릴 필요가 없는 파일들을 ignore 해주겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;.npmignore&lt;/p&gt;
&lt;pre id=&quot;code_1674205952486&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;**/*
!/dist/**&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;나의 경우는 전부 ignore 하고 컴파일된 파일만 unignore 하였다.&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;npm 홈페이지에서 가입을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.npmjs.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674205590604&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;npm&quot; data-og-description=&quot;Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&quot; data-og-host=&quot;www.npmjs.com&quot; data-og-source-url=&quot;https://www.npmjs.com/&quot; data-og-url=&quot;https://www.npmjs.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RvQP5/hyRlzWNKRF/Oja3YE4MGCbgZrKxsYArh1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.npmjs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RvQP5/hyRlzWNKRF/Oja3YE4MGCbgZrKxsYArh1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;npm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.npmjs.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;터미널에서 npm login을 하고&lt;/p&gt;
&lt;pre id=&quot;code_1674205618411&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm publish만 입력하면 배포가 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1674205722627&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm publish&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Ref.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.sensedeep.com/blog/posts/2021/how-to-create-single-source-npm-module.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.sensedeep.com/blog/posts/2021/how-to-create-single-source-npm-module.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>기술</category>
      <category>NPM</category>
      <category>typescript</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/11</guid>
      <comments>https://kimyanglogging.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 20 Jan 2023 23:44:31 +0900</pubDate>
    </item>
    <item>
      <title>[Next.js + TypeScript] emotion 적용 방법</title>
      <link>https://kimyanglogging.tistory.com/10</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;emotion&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;css-in-js 라이브러리이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;create next app&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;typescript 기반의 next app을 만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1674110833511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn create next-app ${my-app} --typescript&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;install emotion&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;my-app에서 emotion을 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674110943659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add @emotion/react @emotion/styled&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;babel config (optional)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-21 오후 6.04.01.png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVspPQ/btrWQJWd9sU/daf0YmHgyi1kkEILOGtZd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVspPQ/btrWQJWd9sU/daf0YmHgyi1kkEILOGtZd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVspPQ/btrWQJWd9sU/daf0YmHgyi1kkEILOGtZd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVspPQ%2FbtrWQJWd9sU%2Fdaf0YmHgyi1kkEILOGtZd0%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;1520&quot; height=&quot;432&quot; data-filename=&quot;스크린샷 2023-01-21 오후 6.04.01.png&quot; data-origin-width=&quot;1520&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;emotion의 여러 기능을 사용하기 위해 바벨 설정을 한다.&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;emotion 8 버전 이상부터는 필요하지 않다고 하니 참고하시길 바란다.&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;아래 커멘드로 emotion의 babel plugin을 설치한 후&lt;/p&gt;
&lt;pre id=&quot;code_1674111119088&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add -D @emotion/babel-plugin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.babelrc 파일을 만들어 아래처럼 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;.babelrc&lt;/p&gt;
&lt;pre id=&quot;code_1674111015052&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;presets&quot;: [
    [
      &quot;next/babel&quot;,
      {
        &quot;preset-react&quot;: {
          &quot;runtime&quot;: &quot;automatic&quot;,
          &quot;importSource&quot;: &quot;@emotion/react&quot;
        }
      }
    ]
  ],
  &quot;plugins&quot;: [&quot;@emotion/babel-plugin&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;typescript config&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 진행 후 css props 기능을 사용하면 다음과 같은 오류를 맞이 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-19 오후 3.55.18.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfwRi/btrWERUwZdR/rKGanVhdEAxKpW9kIMZ9A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfwRi/btrWERUwZdR/rKGanVhdEAxKpW9kIMZ9A0/img.png&quot; data-alt=&quot;issue!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfwRi/btrWERUwZdR/rKGanVhdEAxKpW9kIMZ9A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfwRi%2FbtrWERUwZdR%2FrKGanVhdEAxKpW9kIMZ9A0%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;1580&quot; height=&quot;640&quot; data-filename=&quot;스크린샷 2023-01-19 오후 3.55.18.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;issue!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;tsconfig.json&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;size18&quot;&gt;tsconfig.json&lt;/p&gt;
&lt;pre id=&quot;code_1674111503181&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;compilerOptions&quot;: {
    ...,
    &quot;jsxImportSource&quot;: &quot;@emotion/react&quot; // Add this line.
  }
}&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;compilerOptions에&amp;nbsp;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&quot;jsxImportSource&quot;: &quot;@emotion/react&quot;&lt;/span&gt;&amp;nbsp;이 줄을 추가하면 된다.&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Ref.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/css-prop#babel-preset&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://emotion.sh/docs/css-prop#babel-preset&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674110674266&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;Emotion &amp;ndash; The css Prop&quot; data-og-description=&quot;The primary way to style elements with emotion is the css prop. It provides a concise and flexible API to style your components. There are 2 ways to get started with the css prop. Both methods result in the same compiled code. After adding the preset or se&quot; data-og-host=&quot;emotion.sh&quot; data-og-source-url=&quot;https://emotion.sh/docs/css-prop#babel-preset&quot; data-og-url=&quot;https://emotion.sh/docs/css-prop#babel-preset&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/css-prop#babel-preset&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emotion.sh/docs/css-prop#babel-preset&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;Emotion &amp;ndash; The css Prop&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The primary way to style elements with emotion is the css prop. It provides a concise and flexible API to style your components. There are 2 ways to get started with the css prop. Both methods result in the same compiled code. After adding the preset or se&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emotion.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/typescript#emotionreact&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://emotion.sh/docs/typescript#emotionreact&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674111920569&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;Emotion &amp;ndash; TypeScript&quot; data-og-description=&quot;Emotion includes TypeScript definitions for @emotion/react and @emotion/styled. These definitions infer types for css properties with the object syntax, HTML/SVG tag names, and prop types. @emotion/react The easiest way to use the css prop with TypeScript &quot; data-og-host=&quot;emotion.sh&quot; data-og-source-url=&quot;https://emotion.sh/docs/typescript#emotionreact&quot; data-og-url=&quot;https://emotion.sh/docs/typescript#emotionreact&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/typescript#emotionreact&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emotion.sh/docs/typescript#emotionreact&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;Emotion &amp;ndash; TypeScript&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Emotion includes TypeScript definitions for @emotion/react and @emotion/styled. These definitions infer types for css properties with the object syntax, HTML/SVG tag names, and prop types. @emotion/react The easiest way to use the css prop with TypeScript&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emotion.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/@emotion/babel-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://emotion.sh/docs/@emotion/babel-plugin&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674291789729&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;Emotion &amp;ndash; @emotion/babel-plugin&quot; data-og-description=&quot;@emotion/babel-plugin is highly recommended, but not required in version 8 and above of Emotion. boolean, defaults to true. Note: Source maps are on by default in @emotion/babel-plugin but they will be removed in production builds 'dev-only' | 'always' | '&quot; data-og-host=&quot;emotion.sh&quot; data-og-source-url=&quot;https://emotion.sh/docs/@emotion/babel-plugin&quot; data-og-url=&quot;https://emotion.sh/docs/@emotion/babel-plugin&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://emotion.sh/docs/@emotion/babel-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emotion.sh/docs/@emotion/babel-plugin&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;Emotion &amp;ndash; @emotion/babel-plugin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@emotion/babel-plugin is highly recommended, but not required in version 8 and above of Emotion. boolean, defaults to true. Note: Source maps are on by default in @emotion/babel-plugin but they will be removed in production builds 'dev-only' | 'always' | '&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emotion.sh&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>기술</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/10</guid>
      <comments>https://kimyanglogging.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 19 Jan 2023 16:00:54 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] JS는 무슨 언어일까?</title>
      <link>https://kimyanglogging.tistory.com/9</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;JS는 프로토타입 기반의 다중(멀티) 패러다임 언어이다.&lt;br /&gt;-mdn-&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;패러다임이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프로그래밍 언어의 패러다임이란 아래로 정리할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&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;&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;- 명령형 프로그래밍&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 뿐만 아니라 많은 패러다임들이 존재한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다중 패러다임?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단어 그대로 프로그래밍 언어가 여러 패러다임을 지원한다는 뜻이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이런 언어들의 설계 목표는 모든 문제를 가장 쉽고 효율적으로 풀 수 있는 하나의 패러다임은 없다는 것을 인정하고, 프로그래머가 자신의 일에 가장 적합한 것을 사용할 수 있게 하는 것이다.&lt;br /&gt;- wikipedia&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;js가 지원하는 패러다임은 mdn 문서에 따르면&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b1b1b;&quot;&gt;&lt;span style=&quot;caret-color: #1b1b1b; background-color: #ffffff;&quot;&gt;등이 존재한다.&lt;/span&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: #1b1b1b;&quot;&gt;&lt;span style=&quot;caret-color: #1b1b1b; background-color: #ffffff;&quot;&gt;그렇기 때문에 우리가 js에 대해서 이야기 할 때, 다른 언어(ex. java - 객체지향 언어, c - 절차지향 언어) 들 처럼 &quot;js는 ㅇㅇ언어다&quot; 라고 정의내리기 어렵다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #1b1b1b;&quot;&gt;&lt;span style=&quot;caret-color: #1b1b1b; background-color: #ffffff;&quot;&gt;요약&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b1b1b;&quot;&gt;&lt;span style=&quot;caret-color: #1b1b1b; background-color: #ffffff;&quot;&gt;- js는 프로토타입 기반의 다중(멀티) 패러다임 언어이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b1b1b;&quot;&gt;&lt;span style=&quot;caret-color: #1b1b1b; background-color: #ffffff;&quot;&gt;- 다중 패러다임 언어이므로 어떤 특정 패러다임의 언어라고 정의하기 어렵다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>기술</category>
      <category>javascript</category>
      <category>다중 패러다임</category>
      <category>멀티 패러다임</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/9</guid>
      <comments>https://kimyanglogging.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 18 Jan 2023 16:27:13 +0900</pubDate>
    </item>
    <item>
      <title>[yarn berry + vscode] yarn berry 적용 방법 (with vscode setting)</title>
      <link>https://kimyanglogging.tistory.com/8</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;yarn berry? (yarn 2)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기존 node_modules의 문제점을 개선하기 위해 출시된 yarn의 상위 버전이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;next.js 애플리케이션 생성&lt;/h3&gt;
&lt;pre id=&quot;code_1673856100644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn create next-app ${project name}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;yarn version 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 애플리케이션으로 이동하여 프로젝트의 yarn 버전을 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1673856261963&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn -v 
// 1.22.19&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 가다 yarn berry를 적용도 전에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;2.xx.xx&lt;/span&gt; 이상의 버전 (Major version이 2 이상일 경우 yarn berry에 해당된다.) 으로 확인되는 경우가 있는데, 이 경우는 상위 디렉토리에서 yarn 관련 설정이 되어있을 확률이 크다.&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;span style=&quot;background-color: #dddddd;&quot;&gt;.yarnrc.yml&lt;/span&gt; 파일을 삭제하면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;버전 변경 전 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 이제 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;node_modules&lt;/span&gt;로 부터 해방이므로 과감하게 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;node_modules&lt;/span&gt;를 삭제해준다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;yarn berry로 버전 변경&lt;/h3&gt;
&lt;pre id=&quot;code_1673856918669&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn set version berry&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 커멘드를 프로젝트 내부에서 입력 시, 그 프로젝트에 한하여 yarn 버전을 berry로 변경이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;yarn set version&lt;/span&gt; 커멘드 사용법은 아래 document를 참조하길 바란다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yarnpkg.com/cli/set/version&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yarnpkg.com/cli/set/version&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673857061674&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;&amp;#96;yarn set version&amp;#96;&quot; data-og-description=&quot;Lock the Yarn version used by the project.&quot; data-og-host=&quot;yarnpkg.com&quot; data-og-source-url=&quot;https://yarnpkg.com/cli/set/version&quot; data-og-url=&quot;https://yarnpkg.com/cli/set/version/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://yarnpkg.com/cli/set/version&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yarnpkg.com/cli/set/version&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;`yarn set version`&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Lock the Yarn version used by the project.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yarnpkg.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;yarn install&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의존성 설치를 다시 해줄건데 바로 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;yarn install&lt;/span&gt; 키워드를 사용하면 삭제한 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;node_modules&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;background-color: #dddddd;&quot;&gt;.yarnrc.yml&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;size18&quot;&gt;.yarnrc.yml&lt;/p&gt;
&lt;pre id=&quot;code_1673857696195&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarnPath: .yarn/releases/yarn-3.3.1.cjs
nodeLinker: pnp // Add this line!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nodeLinker에 pnp를 추가하여 헛수고를 막자.&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;파일을 수정한 후, install을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1673857809382&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn install&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git ignore 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;zero install을 사용할건지 아닌지에 따라 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;.gitignore&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;size18&quot;&gt;using zero install&lt;/p&gt;
&lt;pre id=&quot;code_1673858457797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;not using zero install&lt;/p&gt;
&lt;pre id=&quot;code_1673858479707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;vscode setting&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-16 오후 5.53.16.png&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSycga/btrWnnFHtGk/A5ojhKnjy4rn86l2FkrWw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSycga/btrWnnFHtGk/A5ojhKnjy4rn86l2FkrWw1/img.png&quot; data-alt=&quot;OMG..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSycga/btrWnnFHtGk/A5ojhKnjy4rn86l2FkrWw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSycga%2FbtrWnnFHtGk%2FA5ojhKnjy4rn86l2FkrWw1%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;812&quot; height=&quot;186&quot; data-filename=&quot;스크린샷 2023-01-16 오후 5.53.16.png&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OMG..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러오는 모든 module들이 에러를 내뱉고 있는 모습을 볼 수 있을 것 이다..&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;당황하지 않고 침착하게 아래의 extension을 설치해준다.&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-filename=&quot;스크린샷 2023-01-16 오후 5.58.09.png&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwCN3g/btrWqPH8IE0/OvFZoi3EfQzllgAT1r8HjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwCN3g/btrWqPH8IE0/OvFZoi3EfQzllgAT1r8HjK/img.png&quot; data-alt=&quot;ZipFS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwCN3g/btrWqPH8IE0/OvFZoi3EfQzllgAT1r8HjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwCN3g%2FbtrWqPH8IE0%2FOvFZoi3EfQzllgAT1r8HjK%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;1438&quot; height=&quot;456&quot; data-filename=&quot;스크린샷 2023-01-16 오후 5.58.09.png&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ZipFS&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래 커멘드를 터미널에 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1673859777343&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn dlx @yarnpkg/sdks vscode&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;그 후 아래의 모달이 뜨면 Allow를 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-16 오후 5.51.39.png&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcPtw2/btrWqC3mVV1/n8bStawPRvkjzvlODHS8wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcPtw2/btrWqC3mVV1/n8bStawPRvkjzvlODHS8wk/img.png&quot; data-alt=&quot;modal&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcPtw2/btrWqC3mVV1/n8bStawPRvkjzvlODHS8wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcPtw2%2FbtrWqC3mVV1%2Fn8bStawPRvkjzvlODHS8wk%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;1132&quot; height=&quot;358&quot; data-filename=&quot;스크린샷 2023-01-16 오후 5.51.39.png&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;modal&lt;/figcaption&gt;
&lt;/figure&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;View &amp;gt; Command Palette&lt;/span&gt;(shift + ⌘ + p)로 이동 하여 TypeScript: Select TypeScript Version를 검색한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-07-14 오전 11.16.22.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k46i1/btsnyfNFLTY/cqV9CUHkOfKzBbXHYAEDzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k46i1/btsnyfNFLTY/cqV9CUHkOfKzBbXHYAEDzk/img.png&quot; data-alt=&quot;shift + command + p&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k46i1/btsnyfNFLTY/cqV9CUHkOfKzBbXHYAEDzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk46i1%2FbtsnyfNFLTY%2FcqV9CUHkOfKzBbXHYAEDzk%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;1146&quot; height=&quot;98&quot; data-filename=&quot;스크린샷 2023-07-14 오전 11.16.22.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;shift + command + p&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-16 오후 6.10.54.png&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/43fzl/btrWsiQmoZt/QcgfWKeGyzy9ofqw2bQWK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/43fzl/btrWsiQmoZt/QcgfWKeGyzy9ofqw2bQWK0/img.png&quot; data-alt=&quot;TypeScript: Select TypeScript Version&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/43fzl/btrWsiQmoZt/QcgfWKeGyzy9ofqw2bQWK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F43fzl%2FbtrWsiQmoZt%2FQcgfWKeGyzy9ofqw2bQWK0%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;1442&quot; height=&quot;158&quot; data-filename=&quot;스크린샷 2023-01-16 오후 6.10.54.png&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TypeScript: Select TypeScript Version&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p 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-filename=&quot;스크린샷 2023-07-14 오전 11.21.31.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9DkQJ/btsnwZLju58/qwVkWokXC4uSNNOgCCKKK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9DkQJ/btsnwZLju58/qwVkWokXC4uSNNOgCCKKK0/img.png&quot; data-alt=&quot;select&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9DkQJ/btsnwZLju58/qwVkWokXC4uSNNOgCCKKK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9DkQJ%2FbtsnwZLju58%2FqwVkWokXC4uSNNOgCCKKK0%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;1440&quot; height=&quot;326&quot; data-filename=&quot;스크린샷 2023-07-14 오전 11.21.31.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;select&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 항목(Use Workspace Version) 을 선택한다.&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-filename=&quot;스크린샷 2023-01-16 오후 6.17.23.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCeVL9/btrWpodkygp/XgzbxKBrVaJtIBTkg1DYxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCeVL9/btrWpodkygp/XgzbxKBrVaJtIBTkg1DYxK/img.png&quot; data-alt=&quot;clean~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCeVL9/btrWpodkygp/XgzbxKBrVaJtIBTkg1DYxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCeVL9%2FbtrWpodkygp%2FXgzbxKBrVaJtIBTkg1DYxK%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;796&quot; height=&quot;180&quot; data-filename=&quot;스크린샷 2023-01-16 오후 6.17.23.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;clean~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깨끗해진 import 구문들을 만날 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기존 node_modules 처럼 ⌥ option (⌘ command) + click 시 모듈 내부를 확인할 수 있다.&lt;/p&gt;</description>
      <category>기술</category>
      <category>javascript</category>
      <category>PNP</category>
      <category>yarn berry</category>
      <category>zero install</category>
      <author>기먕로기</author>
      <guid isPermaLink="true">https://kimyanglogging.tistory.com/8</guid>
      <comments>https://kimyanglogging.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 17 Jan 2023 00:00:12 +0900</pubDate>
    </item>
  </channel>
</rss>