<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>평범한 이야기</title>
    <link>https://pstudio411.tistory.com/</link>
    <description>다양한 정보와 가끔 놓친 것들을 담아두는 창고</description>
    <language>ko</language>
    <pubDate>Fri, 15 May 2026 02:18:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>PixelStudio</managingEditor>
    <image>
      <title>평범한 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/4045569/attach/07eae549b3ff4628a03ee9f56d261095</url>
      <link>https://pstudio411.tistory.com</link>
    </image>
    <item>
      <title>티스토리 조만간 폐쇄할 예정입니다.</title>
      <link>https://pstudio411.tistory.com/notice/208</link>
      <description>&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;왜냐하면, NextJS 프레임워크에 TypeScript를 활용해서 새로운 블로그를 만들고있습니다. 솔직히 글쓰기도 편하고, 스킨도 다양하고 구성도 깔끔하게 구성할 수 있엇는데, 뭔가 계속 티스토리쪽에 글만 올리다보니 허전한 느낌이 왔습니다. 나도 이런 블로그 하나정돈 만들어보고 싶다는 생각에 아예 티스토리 접고 마크다운 문서를 기반으로한 개인 블로그 하나 만들생각입니다. 배포는 &lt;span&gt;Github Pages 아니면 Vercel에 할것같네요&lt;/span&gt;&lt;/p&gt;</description>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/notice/208</guid>
      <pubDate>Mon, 27 Jun 2022 14:47:17 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu 20.04 LTS]apt와 apt-get의 차이점</title>
      <link>https://pstudio411.tistory.com/entry/apt%EC%99%80-apt-get%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;보통 여러 블로그나 커뮤니티에서 apt와 apt-get으로 패키지 설치 및 업데이트를 하는 글들을 많이 볼 수 있는데, 도대체 무슨 차이가 있으며, 어떤걸 사용해야할까 라는 궁금증으로 직접 알아보기로 했다.&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;APT(Advanced Packaging Tool)&lt;/b&gt;는 데비안(Debian) GNU/리눅스 계열의 패키지 관리 명령도구로 우분투(Ubuntu)에서도 지원한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;apt는 데비안과 그 파생물을위한 주요 명령 줄 패키지 관리자입니다. 상위 패키지 관리자가 의존 할 수있는 libapt-pkg 및 libapt-inst 라이브러리에서 제공하는 모든 기능에 대한 하위 수준 액세스는 물론 패키지에 대한 정보를 쿼리 할뿐만 아니라 검색 및 관리를위한 명령 줄 도구를 제공합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;apt-get:&lt;/b&gt;&amp;nbsp;인증 된 소스에서 패키지 및 패키지에 대한 정보를 검색하고 종속성과 함께 패키지를 설치, 업그레이드 및 제거한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;apt:&lt;/b&gt;&amp;nbsp;더 나은 대화식 사용을위한 고급 명령 줄 인터페이스이다.&lt;/li&gt;
&lt;/ul&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;우선 결론부터 말하자면 차이는 별로 없다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투(Ubuntu) 최종사용자를 위한 명령어가 apt일뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 apt-get 명령어가 오래되다보니 보다 많은 옵션을 제공한다. 터미널을 열어 &lt;b&gt;apt --help&lt;/b&gt;와 &lt;b&gt;apt-get --help&lt;/b&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsnhiA/btq7GzHx9vW/HUsq1DXRttbiyXGfUZKfR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsnhiA/btq7GzHx9vW/HUsq1DXRttbiyXGfUZKfR0/img.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;539&quot; data-filename=&quot;Screenshot from 2021-06-19 14-21-34.png&quot; style=&quot;width: 56.1106%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsnhiA/btq7GzHx9vW/HUsq1DXRttbiyXGfUZKfR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsnhiA%2Fbtq7GzHx9vW%2FHUsq1DXRttbiyXGfUZKfR0%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;828&quot; height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdFfOX/btq7CPrxSXR/KRpwdzq8lDCuJo0Ba4PGXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdFfOX/btq7CPrxSXR/KRpwdzq8lDCuJo0Ba4PGXk/img.png&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;648&quot; data-filename=&quot;Screenshot from 2021-06-19 14-21-21.png&quot; style=&quot;width: 42.7266%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdFfOX/btq7CPrxSXR/KRpwdzq8lDCuJo0Ba4PGXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdFfOX%2Fbtq7CPrxSXR%2FKRpwdzq8lDCuJo0Ba4PGXk%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;758&quot; height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;왼쪽이 apt, 오른쪽이 apt-get&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보는 바와 같이 apt-get 명령어는 사용 가능한 커맨드가 많지만, apt만으로도 충분하기 때문에 굳이 apt-get을 써야할 이유를 잘 모르겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bicYlZ/btq7DVLzXDH/9FkEVQ5JnIqfocIEe774IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bicYlZ/btq7DVLzXDH/9FkEVQ5JnIqfocIEe774IK/img.png&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;511&quot; data-filename=&quot;Screenshot from 2021-06-19 14-30-19.png&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bicYlZ/btq7DVLzXDH/9FkEVQ5JnIqfocIEe774IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbicYlZ%2Fbtq7DVLzXDH%2F9FkEVQ5JnIqfocIEe774IK%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;1346&quot; height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/twq6U/btq7DU6XmVi/0niNpvBA7Yi8pMUUJmKZkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/twq6U/btq7DU6XmVi/0niNpvBA7Yi8pMUUJmKZkK/img.png&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;511&quot; data-filename=&quot;Screenshot from 2021-06-19 14-30-36.png&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/twq6U/btq7DU6XmVi/0niNpvBA7Yi8pMUUJmKZkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftwq6U%2Fbtq7DU6XmVi%2F0niNpvBA7Yi8pMUUJmKZkK%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;1346&quot; height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;왼쪽이 apt, 오른쪽이 apt-get&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 apt로 설치할 경우 하단에 상태바를 보여주는데.. 신경이 쓰인다면 다음과 같은 명령어로 활성/비활성이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1624081708119&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo 'Dpkg::Progress-Fancy &quot;1&quot;;' &amp;gt; /etc/apt/apt.conf.d/99progressbar&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ref: &quot;&lt;a href=&quot;https://askubuntu.com/questions/445384/what-is-the-difference-between-apt-and-apt-get&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;스택오버플로우apt&lt;/b&gt;&lt;/a&gt;&quot;,&quot;&lt;a href=&quot;http://manpages.ubuntu.com/manpages/impish/en/man8/apt.8.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;apt매뉴얼&lt;/b&gt;&lt;/a&gt;&quot;,&quot;&lt;b&gt;&lt;a href=&quot;https://wiki.debian.org/ko/Apt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;데비안Wiki&lt;/a&gt;&lt;/b&gt;&quot;,&quot;&lt;a href=&quot;https://mvogt.wordpress.com/2014/04/04/apt-1-0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MVOGT블로그&lt;/a&gt;&quot;&lt;/p&gt;</description>
      <category>컴퓨터 이야기/Ubuntu 사용하기</category>
      <category>apt</category>
      <category>apt-get</category>
      <category>Debian</category>
      <category>Package</category>
      <category>ubuntu</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/161</guid>
      <comments>https://pstudio411.tistory.com/entry/apt%EC%99%80-apt-get%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90#entry161comment</comments>
      <pubDate>Sat, 19 Jun 2021 14:49:29 +0900</pubDate>
    </item>
    <item>
      <title>함수</title>
      <link>https://pstudio411.tistory.com/entry/%ED%95%A8%EC%88%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript의 함수는 JavaScript와 마찬가지로 기명 함수(named funcion)과 익명 함수(anonymous function)로 만들 수 있다.&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;pre id=&quot;code_1623931247753&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기명 함수
function add(x, y) {
  return x + y;
}

//익명 함수
let z = 10;
let addF = (x,y) =&amp;gt; x + y + z;

&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;위 에제에서 addF라는 익명 함수는 외부의 변수를 참조 하는데, 이를 보고 변수를 캡쳐(capture)한다 라고 한다.&amp;nbsp; 그리고 JavaScript의 함수에 타입을 추가하여 TypeScript에서의 함수로 사용할수 있다. 이것을 함수 타입(Function Type)이라고한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623931316567&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기명 함수
function add(x:number, y:number):number {
  return x:number + y:number;
}

//익명 함수
let z:number = 10;
let addF = (x:number, y:number):number =&amp;gt; x + y + z;

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수의 전체 타입 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 타입은 매개변수(parameter)의 타입과&amp;nbsp; 반환 타입이 있으며, 전체 함수 타입을 작성하기 위해선 두가지 모두 타입이 필요하다.&lt;/p&gt;
&lt;pre id=&quot;code_1623931723176&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let addF: (baseValue: number, increment: number) =&amp;gt; number = function (
  x: number,
  y: number
): number {
  return x + y;
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수의 타입들이 올바르게 나열이 되있으면, 함수 타입에 이름을 붙여도 유효한 타입으로 간주한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환 타입은 위의 예시처럼 화살표 (' =&amp;gt; ') 표기를 써서 반환 타입을 명확히 보여줄 수 있다. 함수 표기에 필요한 부분으로 반환 값이 없다면 &lt;b&gt;void&lt;/b&gt;를 써서 표시한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623935661940&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let addF: (baseValue: number, increment: number) =&amp;gt; number = function (
  x: number,
  y: number
): number {
  return x + y;
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;REST 문법이 적용된 매개변수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623931932055&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function sum(a: number, ...nums: number[]): number {
  const totalOfNums = 0;
  for (let key in nums) {
    totalOfNums += nums[key]
  }
  return a + totalOfNums;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;THIS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript에서도 사용이 가능하며, JavaScript의 this가 잘못 사용되었을 때 감지할 수 있다. this가 가리키는 것을 명시하려면 아래 예제와 같은 문법을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1624082154825&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function funcName(this: type) {
 ....
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/TypeScript</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/159</guid>
      <comments>https://pstudio411.tistory.com/entry/%ED%95%A8%EC%88%98#entry159comment</comments>
      <pubDate>Thu, 17 Jun 2021 21:27:03 +0900</pubDate>
    </item>
    <item>
      <title>기본 데이터 타입</title>
      <link>https://pstudio411.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 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;&lt;b&gt;불리언 (Boolean)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623916186360&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let isDone: boolean = false;
const isTrue: boolean = true;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;숫자 (Number)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript의 모든 숫자는 JavaScript처럼 부동 소수 값이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부동 소수에는 Number 라는 타입이 붙으며,&amp;nbsp; 16진수, 10진수 ES2015에 소개된 2진수, 8진수 리터럴을 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623916239734&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let decimal: number = 0;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: numberr = 0o744&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자열 (String)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript에서 문자열을 변수에 담아줄때 &quot; 혹은 ' 를 사용하여 문자열 데이터를 감싸는데 사용했다면 TypeScript에는 string가 붙게된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623916515528&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let laptop: string = &quot;elitebook&quot;;

laptop = &quot;OMEN&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러줄 걸쳐 문자열을 작성하게 될때는 JavaScript에선 백틱&amp;nbsp; ` 을 사용했었다. TypeScript도 마찬가지이다. 표현식을 넣어줄 때도 마찬가지로 ${ } 으로 데이터를 감싼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623916620252&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let btrLife: number = `12시간`
let quantity: number = 2;

let result: string = `제가 사용하는 노트북의 개수는 총 ${quantity}개이며, 두 노트북의 공통점은 
                      최대 유지시간이 ${btrLife} 시간입니다.`&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배열 (Array)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript의 배열 선언은 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;&lt;b&gt;첫번째 방법, 배열의 요소들을 나타내는 타입뒤에 [ ] 을 쓴다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623917070016&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let list: number[] = [1, 2, 3];
let list2: string[] = ['가','나'];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두번 째 방법, 제너릭 배열 타입을 쓴다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623917145065&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let list: Array&amp;lt;number&amp;gt; = [1, 2, 3];
let list2: Array&amp;lt;string&amp;gt; = ['가','나'];&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-origin-width=&quot;1272&quot; data-origin-height=&quot;109&quot; data-filename=&quot;Screenshot from 2021-06-17 17-07-37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqxHBS/btq7xCytDxI/7y1RozDGxKS2bP7K86HSzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqxHBS/btq7xCytDxI/7y1RozDGxKS2bP7K86HSzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqxHBS/btq7xCytDxI/7y1RozDGxKS2bP7K86HSzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqxHBS%2Fbtq7xCytDxI%2F7y1RozDGxKS2bP7K86HSzk%2Fimg.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;109&quot; data-filename=&quot;Screenshot from 2021-06-17 17-07-37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;119&quot; data-filename=&quot;Screenshot from 2021-06-17 17-07-23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJsfy/btq7x4hcmmw/KxMLiIpQwYcZa6io4Zia5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJsfy/btq7x4hcmmw/KxMLiIpQwYcZa6io4Zia5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJsfy/btq7x4hcmmw/KxMLiIpQwYcZa6io4Zia5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJsfy%2Fbtq7x4hcmmw%2FKxMLiIpQwYcZa6io4Zia5K%2Fimg.png&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;119&quot; data-filename=&quot;Screenshot from 2021-06-17 17-07-23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선언과 할당을 분리!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623918224542&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let list: string[] = [];
list.push(&quot;가&quot;);
list.push(&quot;나&quot;);

Generic 방법 사용

let list: Array&amp;lt;string&amp;gt; = new Array&amp;lt;number&amp;gt;();
list.push(&quot;가&quot;);
list.push(&quot;나&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;튜플 (Tuple)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜플 타입을 사용하면, 요소의 타입과 개수가 고정된 배열을 표현할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623917392938&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let tuple: [string, number]

tuple = [&quot;ha&quot;, 2] O

tuple = [4, &quot;gwa&quot;] X&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정해진 인덱스 외에 다른 인덱스에 있는 요소에 접근하면 오류가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623917562961&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tuple[3] = &quot;나는 존재할까?&quot; // Error, Property &quot;나는 존재할까?&quot; does not exist on type '[string, number]'.

tuple[1].concat('a')  // Error, 'number' does not have 'concat'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;열거 (Enum)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C, Java 같은 다른 언어에서 흔히 쓰이는 타입으로 특정 값(상수)들의 집합을 의미한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623918624687&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Item {a, b, c}

let spec: Item = Item.a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Enum은 인덱스 번호로 접근이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1623919160669&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Item {a, b, c}

let spec: Item = Item[0]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Enum의 인덱스를 사용자 편의로 변경하여 사용이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1623919225301&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Item {a = 3, b, c}

let spec: Item = Item[3]; // a
let spec: Item = Item[4]; // b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Any&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션을 만들 때, 알지 못하는 타입을 표현해야할 때가 있다. 사용자로 부터 받은 데이터나 서드 파티 라이브러리같은 동적인 컨텐츠에서 올 수 있다. 이 경우 타입 검사를 하지 않고, 컴파일 시간에 검사를 통과하길 원할때 any 타입을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623919409953&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let type: any = 4;

type = &quot;나는 number일까? string 일까?&quot;
type = false;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;any 타입은 다른 타입이 여러개로 섞인 배열을 다룰 수 있다. 즉 어떤 타입의 일부만 알고 전체를 알지 못할때 유용하다.&lt;/p&gt;
&lt;pre id=&quot;code_1623919800096&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let type: any[] = [1, true, &quot;Array&quot;]

type[1] = 100&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;V&lt;/b&gt;&lt;b&gt;oid&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void는 어떤 타입도 존재할 수 없음을 나타내기 위해 사용하며, any의 반대 타입 같다. void는 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰이는 것을 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1623920028367&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;funtion nothing(): void {
  console.log(&quot;대략 아무것도 없다는 메세지&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void 타입을 변수 선언에 사용하는 방법은 좋은 방법이 아닌데, 그 변수에는 null 또는 undefined만 할당할 수 있기 때문이다.&lt;/p&gt;
&lt;pre id=&quot;code_1623920231429&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let variable: void = undefined;

variable = null // succes --strictNullChecks을 사용하지 않을때만 해당&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;null과 undefined&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 undefined 과 null 둘 다 각각 자신의 타입 이름으로 사용한다. void와 같이 자체로 유용한 경우는 없다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623930189037&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let u: undefined = undefined;

let n: null = null;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null과 undefined는 다른 모든 타입의 하위 타입으로 number 같은 타입에 할당할 수 있다.&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;하지만 --strictNullChecks를 사용하면 null과 undefined는 오직 any와 각자 자신들 타입에만 할당 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Never&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;never 타입은 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰인다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;객체 (Object)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;object는 원시 타입이 아닌 타입을 나타낸다. JavaScript에서 원시타입으론 number, string, boolean, symbol, null, undefined, bigint 등 있는데 TypeScript에서도 마찬가지로 원시타입을 제외한 나머지를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623920707410&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;declare function create(o: object | null): void;

create({prop: 0}); //success
create(null);      //success

create(42); // error
create(&quot;string&quot;) // error
create(false)   // error
create(undefined) //error&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/TypeScript</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/158</guid>
      <comments>https://pstudio411.tistory.com/entry/%EA%B8%B0%EB%B3%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85#entry158comment</comments>
      <pubDate>Thu, 17 Jun 2021 20:41:18 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript를 보완한 언어 TypeScript</title>
      <link>https://pstudio411.tistory.com/entry/JavaScript%EB%A5%BC-%EB%B3%B4%EC%99%84%ED%95%9C-%EC%96%B8%EC%96%B4-TypeScript</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;TypeScript?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 JavaScript의 &amp;nbsp;MS에서 만든 상위언어이며, 구문(Syntax)과 런타임 특성(Runtime Behavior)을 공유하고, 타입(Type)을 부여하여 기존 JavaScript 에서 느슨하게 짜여진 코드로 발생하기 쉬운 오류를 사전에 예방이 가능하다. TypeScript를 브라우저에서 실행하기 위해서는 파일을 변환(Compile)해줘야한다.&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;구문(Syntax)&lt;/b&gt; : 구문은 프로그램을 만들기 위해 코드를 작성하는 방법을 의미한다. TypeScript 는 JavaScript의 구문을 허용하는 상위 언어이다. 그렇기 때문에 JavaScript 코드를 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;&lt;b&gt;런타임 특성(Runtime Behavior) :&lt;/b&gt;TypeScript는 JavaScript의 런타임 특성을 가진 언어이며, JavaScript 코드의 런타임 특성을 변화시키지 않는다. TypeScript 기존 코드에&amp;nbsp; 타입 오류가 있음을 알아도 JavaScript 코드를 TypeScript로 이동시키는 것 같은 방식으로 실행시킬 것을 보장한다.&lt;/p&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;b&gt;TypeScript를 왜 써야하는지?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에러의 사전 방지&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623900234671&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//JavaScript
function sum(a,b) {
  return a + b;
}

//TypeScript
function sum(a: number, b: number) {
  return a + b;
}
&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;두 코드는 숫자의 합을 구하는 함수코드이다. JavaScript에서는 타입에 관대하여 인자 a와 b가 Number타입이던 String타입이던 계산된 결과 값을 보여주게된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;73&quot; data-filename=&quot;Screenshot from 2021-06-17 12-28-47.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3Ult/btq7sWj8sYD/sN97J5BLbEBagPSL4h1Xik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3Ult/btq7sWj8sYD/sN97J5BLbEBagPSL4h1Xik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3Ult/btq7sWj8sYD/sN97J5BLbEBagPSL4h1Xik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3Ult%2Fbtq7sWj8sYD%2FsN97J5BLbEBagPSL4h1Xik%2Fimg.png&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;73&quot; data-filename=&quot;Screenshot from 2021-06-17 12-28-47.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 TypeScript에서는 아래 이미지와 같이 사전에 에러 발생 위험을 예방해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;142&quot; data-filename=&quot;Screenshot from 2021-06-17 12-39-54.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btHdpH/btq7qvghRv1/kAPKxvLmXZ6km6b0mxS201/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btHdpH/btq7qvghRv1/kAPKxvLmXZ6km6b0mxS201/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btHdpH/btq7qvghRv1/kAPKxvLmXZ6km6b0mxS201/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtHdpH%2Fbtq7qvghRv1%2FkAPKxvLmXZ6km6b0mxS201%2Fimg.png&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;142&quot; data-filename=&quot;Screenshot from 2021-06-17 12-39-54.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드 자동 완성과 가이드를 통한 생산성 향상&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 MS에서 제작되어 Visual Studio Code 같은 개발 툴의 기능을 최대한 활용할 수 있다. VSC내부가 TypeScript로 작성되어있어 TypeScript 개발에 유리하다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;TypeScript 시작하기&lt;/b&gt;&lt;/h2&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;전역(Global) 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624175517345&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i -g typescript 

yarn global add typescript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로컬(Local) 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624175565988&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i typescript --save-dev

yarn add typescript --dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ref : &quot;&lt;a href=&quot;https://typescript-kr.github.io/pages/tutorials/ts-for-the-new-programmer.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TypeScript 번역본&quot;&lt;/a&gt;, &quot;&lt;a href=&quot;https://joshua1988.github.io/ts/why-ts.html#%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%9E%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;핸드북&lt;/a&gt;&quot;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/TypeScript</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/157</guid>
      <comments>https://pstudio411.tistory.com/entry/JavaScript%EB%A5%BC-%EB%B3%B4%EC%99%84%ED%95%9C-%EC%96%B8%EC%96%B4-TypeScript#entry157comment</comments>
      <pubDate>Thu, 17 Jun 2021 16:40:50 +0900</pubDate>
    </item>
    <item>
      <title>NPM과 NVM 그리고 NPX</title>
      <link>https://pstudio411.tistory.com/entry/NPM%EA%B3%BC-NVM-%EA%B7%B8%EB%A6%AC%EA%B3%A0-NPX</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;NVM: Node Version Manager&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;475&quot; data-filename=&quot;Screenshot from 2021-06-17 01-15-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM7vuM/btq7ucMLuSv/Odbkpy19KdJJr6SNe7lfQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM7vuM/btq7ucMLuSv/Odbkpy19KdJJr6SNe7lfQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM7vuM/btq7ucMLuSv/Odbkpy19KdJJr6SNe7lfQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM7vuM%2Fbtq7ucMLuSv%2FOdbkpy19KdJJr6SNe7lfQK%2Fimg.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;475&quot; data-filename=&quot;Screenshot from 2021-06-17 01-15-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말 그대로 Node의 버전을 관리하는데, 여러 버전의 Node.js를 설치하고 사용할 버전을 쉽게 전환할 수 있다. NVM을 통해서도 Node.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;리눅스를 사용한다면 다음과 같은 명령어를 입력한다.&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;curl&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623860681272&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wget&lt;/p&gt;
&lt;pre id=&quot;code_1623860683414&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nvm을 바로 사용하기 위해서는 재부팅을 해줘야 하는데 source 명령어를 입력해 .bashrc 파일을 바로 적용되도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623860787149&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash: source ~/.bashrc

zsh: source ~/.zshrc

ksh: . ~/.profile&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;source&amp;nbsp; 명령어는 스크립트 파일을 수정한 후 수정된 값을 바로 적용하기 위해 사용하는 명령어다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;노드 버전 확인&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-17 01-28-58.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwIrkb/btq7sYaCKAd/yFHhzy3LS17ULgCmqxekw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwIrkb/btq7sYaCKAd/yFHhzy3LS17ULgCmqxekw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwIrkb/btq7sYaCKAd/yFHhzy3LS17ULgCmqxekw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwIrkb%2Fbtq7sYaCKAd%2FyFHhzy3LS17ULgCmqxekw1%2Fimg.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-17 01-28-58.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치할 노드버전을 확인하기 위해 다음과 같은 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623860983223&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvm list-remote  //전체 버전을 보여줌

nvm list         //설치되어있는 버전만 보여줌&lt;/code&gt;&lt;/pre&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;b&gt;원하는 버전을 설치&lt;/b&gt;&amp;nbsp;&lt;/h3&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;pre id=&quot;code_1624174937268&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvm install v14.17.1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-20 16-42-35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZikoD/btq7DR3Gy8c/GgJs27uKI2d0e5cgjLNmik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZikoD/btq7DR3Gy8c/GgJs27uKI2d0e5cgjLNmik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZikoD/btq7DR3Gy8c/GgJs27uKI2d0e5cgjLNmik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZikoD%2Fbtq7DR3Gy8c%2FGgJs27uKI2d0e5cgjLNmik%2Fimg.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-20 16-42-35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/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;pre id=&quot;code_1624175008522&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;node -v

npm -v&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;88&quot; data-filename=&quot;Screenshot from 2021-06-20 16-42-55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnXIIf/btq7DSuI7KB/36WYIPYW3ClQYBEkbtaJ11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnXIIf/btq7DSuI7KB/36WYIPYW3ClQYBEkbtaJ11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnXIIf/btq7DSuI7KB/36WYIPYW3ClQYBEkbtaJ11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnXIIf%2Fbtq7DSuI7KB%2F36WYIPYW3ClQYBEkbtaJ11%2Fimg.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;88&quot; data-filename=&quot;Screenshot from 2021-06-20 16-42-55.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;NPM : Node Packaged Manager&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-17 01-31-33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0gZpL/btq7tZ1bCW2/ULkQqiORVy6whQKJfaZ5Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0gZpL/btq7tZ1bCW2/ULkQqiORVy6whQKJfaZ5Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0gZpL/btq7tZ1bCW2/ULkQqiORVy6whQKJfaZ5Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0gZpL%2Fbtq7tZ1bCW2%2FULkQqiORVy6whQKJfaZ5Uk%2Fimg.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;529&quot; data-filename=&quot;Screenshot from 2021-06-17 01-31-33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM은 Node.js로 만들어진 패키지(모듈)들을 관리해준다. 따로 설치할 필요없이 Node.js를 설치하면 동시에 설치된다. npm을 통해 자바스크립트로 만들어진 다양한 라이브러리를 설치하여 프로젝트를 효율적으로 작업할 수 있게 도와준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;NPM 명령어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;npm init : package.json을 생성한다&lt;/li&gt;
&lt;li&gt;npm install (Pacakge name) : 어느 모듈을 설치한다.&lt;/li&gt;
&lt;li&gt;npm update (Package name) : 패키지 업데이트를 실행&lt;/li&gt;
&lt;li&gt;npm remove (Package name) : 패키지를 제거&lt;/li&gt;
&lt;li&gt;npm info (package name) : 패키지 정보 확인&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;npm version (version) : 패키지의 버전 전체 변경&amp;nbsp;&lt;/li&gt;
&lt;li&gt;npm version patch : 패키지의 버전을 한단계 올림&lt;/li&gt;
&lt;li&gt;npm version minor : 패키지의 마이너 버전을 한단계 올림(패치 초기화)&lt;/li&gt;
&lt;li&gt;npm version major : 패키지의 메이저 버전을 한단계 올림(마이너, 패치 초기화)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;NPM 패키지 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 폴더 내에서 터미널을 열거나 VSCode내에서 터미널을 열어 다음 명령어로 Package.json을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623896912175&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm init&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;pre id=&quot;code_1623897141272&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;name&quot;: &quot;test&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;description&quot;: &quot;test&quot;
  &quot;scripts&quot;: {
​    &quot;test&quot;: &quot;echo &quot;Error: no test specified&quot; &amp;amp;&amp;amp; exit 1&quot;
  },
  &quot;author&quot;: &quot;npm&quot;,
  &quot;license&quot;: &quot;MIT&quot;&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;해당 폴더 내의 pacakge.json이 생성됨.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;NPM 패키지 설치&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1623896830677&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install nodemon&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;npm 설치 시 추가 명령어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치할 프로젝트 폴더 내에서 진행한다.&lt;/p&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;b&gt;-D, --save-dev&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1623897241100&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--save              
-D, --save-dev 


npm install --save-dev 를 이렇게 줄일수가 있다.
npm i -D&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;--save : 패지키를 ./node_module 디렉토리에 설치하고 .package.json 파일의 dependencies 항목에 플러그인 정보를 저장한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;166&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnY6z7%2Fbtq7vmu92UQ%2Fik1oVPAQBjrc3bfxx5KG0K%2Fimg.png&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;166&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/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;--save-dev : 패지키를 ./node_module 디렉토리에 설치하고 .package.json 파일의 devDependencies 항목에 플러그인 정보를 저장한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;140&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-46.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY8VEV/btq7uczng0E/dHxTlvdw5x7WRIAO9IG6Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY8VEV/btq7uczng0E/dHxTlvdw5x7WRIAO9IG6Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY8VEV/btq7uczng0E/dHxTlvdw5x7WRIAO9IG6Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY8VEV%2Fbtq7uczng0E%2FdHxTlvdw5x7WRIAO9IG6Zk%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;140&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-46.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;b&gt;-E, --save-exact&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623897435523&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-E, --save-exact&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;166&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nY6z7/btq7vmu92UQ/ik1oVPAQBjrc3bfxx5KG0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnY6z7%2Fbtq7vmu92UQ%2Fik1oVPAQBjrc3bfxx5KG0K%2Fimg.png&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;166&quot; data-filename=&quot;Screenshot from 2021-06-17 11-36-40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/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;npm 모듈 버전 중 연산자(^, ~)를 사용하는 대신 정확한 버전으로 설치한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623897538802&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--save-exact&lt;/code&gt;&lt;/pre&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;b&gt;NPM에서 유의적 버전(Semver)에 대해 알아보자&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의존성 모듈의 버전을 엄격하거나 느슨하지 않게 관리하기 위해&amp;nbsp; npm에서는 Semver(Semantic Versioning)를 지원한다.&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;API에 호환되지 않는 변경이면 Major 버전을 올린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API가 호환되면서 바꾸거나 추가하는 경우 Minor 버전을 올린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API가 영향이 없는 버그 수정은 Patch 버전을 올린다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모듈의 범위(Range)&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 140px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;버전보다 작은 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&amp;lt;=&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;버전보다 작거나 같은 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;버전보다 큰 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;버전보다 크거나 같은 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;=&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;같은 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;^&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;Minor Level 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;~&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px; text-align: center;&quot;&gt;Patch Level 범위&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;&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;ref: &quot;&lt;a href=&quot;https://velog.io/@ywoosang/Node.js-%EC%84%A4%EC%B9%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;nvm, npm&lt;/a&gt;&quot;,&quot;&lt;a href=&quot;https://docs.npmjs.com/cli/v7/commands/npm-install&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;npm공홈&lt;/a&gt;&quot;,&quot;&lt;a href=&quot;https://poiemaweb.com/nodejs-npm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;npm-install&lt;/a&gt;&quot;,&quot;&lt;a href=&quot;https://heropy.blog/2018/02/18/node-js-npm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HEROPY Blog&lt;/a&gt;&quot;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/Node.js, API</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/156</guid>
      <comments>https://pstudio411.tistory.com/entry/NPM%EA%B3%BC-NVM-%EA%B7%B8%EB%A6%AC%EA%B3%A0-NPX#entry156comment</comments>
      <pubDate>Thu, 17 Jun 2021 11:07:13 +0900</pubDate>
    </item>
    <item>
      <title>아! 보기 좋은 코드다! Prettier 알아보기</title>
      <link>https://pstudio411.tistory.com/entry/%EC%95%84-%EB%B3%B4%EA%B8%B0-%EC%A2%8B%EC%9D%80-%EC%BD%94%EB%93%9C%EB%8B%A4-Prettier-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Prettier&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 품질을 위해 사용하는 ESLint와는 다르게 사용자의 옵션에 다라 코드 스타일을 이쁘게 맞춰준다.&lt;/p&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;b&gt;Prettier 적용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prettier은 VSCode 확장기능을 이용하여 설치해 줄 수있고 Node의 npm 기능을 통해 설치가 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;257&quot; data-filename=&quot;Screenshot from 2021-06-16 20-22-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDwJm/btq7oousVok/ECKTHzT9lTtGxk1rLWlmDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDwJm/btq7oousVok/ECKTHzT9lTtGxk1rLWlmDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDwJm/btq7oousVok/ECKTHzT9lTtGxk1rLWlmDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDwJm%2Fbtq7oousVok%2FECKTHzT9lTtGxk1rLWlmDk%2Fimg.png&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;257&quot; data-filename=&quot;Screenshot from 2021-06-16 20-22-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/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;곧바로 톱니바퀴 버튼을 눌러 Extension setting으로 들어간다.&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-origin-width=&quot;1012&quot; data-origin-height=&quot;876&quot; data-filename=&quot;Screenshot from 2021-06-16 20-30-30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/weOpK/btq7pdGtmiI/tdK7ru6mrvO8aj7zhM248K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/weOpK/btq7pdGtmiI/tdK7ru6mrvO8aj7zhM248K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/weOpK/btq7pdGtmiI/tdK7ru6mrvO8aj7zhM248K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FweOpK%2Fbtq7pdGtmiI%2FtdK7ru6mrvO8aj7zhM248K%2Fimg.png&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;876&quot; data-filename=&quot;Screenshot from 2021-06-16 20-30-30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 직접 설치해 줄 수&amp;nbsp; 있고 .prettierrc.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;&lt;b&gt;NPM으로 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623844776679&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ npm install --save-dev -g --save-exact prettier&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트에서만 사용할 경우 -g는 생략가능&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;.prettierrc 파일 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESLint처럼 Prettier도 .json 혹은 .js 파일로 만들어서 사용한다. 기본적인 옵션들을 넣어주면된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623844263095&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{    
    &quot;singleQuote&quot;: &quot;true&quot;,

    &quot;semi&quot;: &quot;true&quot;,

    &quot;useTabs&quot;: &quot;false&quot;,

    &quot;tabWidth&quot;: 2,

    &quot;trailingComma&quot;: 'all',

    &quot;printWidth&quot;: 80,

    &quot;arrowParens&quot;: 'avoid',

    &quot;endOfLine&quot;: &quot;auto&quot;,
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;prettier에서 설정 가능한 전체 옵션들&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1623842880460&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;arrowParens&quot;: &quot;avoid&quot;, // 화살표 함수 괄호 사용 방식
  &quot;bracketSpacing&quot;: false, // 객체 리터럴에서 괄호에 공백 삽입 여부 
  &quot;endOfLine&quot;: &quot;auto&quot;, // EoF 방식, OS별로 처리 방식이 다름 
  &quot;htmlWhitespaceSensitivity&quot;: &quot;css&quot;, // HTML 공백 감도 설정
  &quot;jsxBracketSameLine&quot;: false, // JSX의 마지막 `&amp;gt;`를 다음 줄로 내릴지 여부 
  &quot;jsxSingleQuote&quot;: false, // JSX에 singe 쿼테이션 사용 여부
  &quot;printWidth&quot;: 80, //  줄 바꿈 할 폭 길이
  &quot;proseWrap&quot;: &quot;preserve&quot;, // markdown 텍스트의 줄바꿈 방식 (v1.8.2)
  &quot;quoteProps&quot;: &quot;as-needed&quot; // 객체 속성에 쿼테이션 적용 방식
  &quot;semi&quot;: true, // 세미콜론 사용 여부
  &quot;singleQuote&quot;: true, // single 쿼테이션 사용 여부
  &quot;tabWidth&quot;: 2, // 탭 너비 
  &quot;trailingComma&quot;: &quot;all&quot;, // 여러 줄을 사용할 때, 후행 콤마 사용 방식
  &quot;useTabs&quot;: false, // 탭 사용 여부
  &quot;vueIndentScriptAndStyle&quot;: true, // Vue 파일의 script와 style 태그의 들여쓰기 여부 (v1.19.0)
  &quot;parser&quot;: '', // 사용할 parser를 지정, 자동으로 지정됨
  &quot;filepath&quot;: '', // parser를 유추할 수 있는 파일을 지정
  &quot;rangeStart&quot;: 0, // 포맷팅을 부분 적용할 파일의 시작 라인 지정
  &quot;rangeEnd&quot;: Infinity, // 포맷팅 부분 적용할 파일의 끝 라인 지정,
  &quot;requirePragma&quot;: false, // 파일 상단에 미리 정의된 주석을 작성하고 Pragma로 포맷팅 사용 여부 지정 (v1.8.0)
  &quot;insertPragma&quot;: false, // 미리 정의된 @format marker의 사용 여부 (v1.8.0)
  &quot;overrides&quot;: [ 
    {
      &quot;files&quot;: &quot;*.json&quot;,
      &quot;options&quot;: {
        &quot;printWidth&quot;: 200
      }
    }
  ], // 특정 파일별로 옵션을 다르게 지정함, ESLint 방식 사용
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;VSCode 전역 설정 사용하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode의 Setting.json으로 들어가 다음과 같은 항목이 있는지 확인( 없으면 추가)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623843325831&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
.
.
.
.
.
  &quot;editor.defaultFormatter&quot;: &quot;esbenp.prettier-vscode&quot;,
  &quot;[javascript]&quot;: {
    &quot;editor.defaultFormatter&quot;: &quot;esbenp.prettier-vscode&quot;
  },
.
.
.
.
.
}
&lt;/code&gt;&lt;/pre&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;b&gt;ESLint와 통합하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 플러그인을 설치해야 ESLint와 통합이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1623843576402&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ npm install eslint-plugin-prettier@latest --save-dev -g 
$ npm install --save-dev eslint-config-prettier # prettier와 겹치는 eslint 룰 삭제
$ npm install --save-dev eslint-plugin-prettier # eslint 기본 포맷 대신 프리티어 룰과 동일한 포매팅을 이용함&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 .eslintrc.json 혹은 .js에 들어가서 다음과 같이 설정해주면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623843947816&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;plugin:react/recommended&quot;, &quot;plugin:prettier/recommended&quot;],&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ESLint Prettier 적용 확인하기&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1623843999607&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eslint lintTest.js --fix # 린트에 프리티어 확장을 설치한 경우
prettier --check . # 프리티어로 체크했을때 문제가 있는 파일 목록 출력
prettier --write  test.js # test.js파일을 포맷팅해서 덮어쓴다&lt;/code&gt;&lt;/pre&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;b&gt;충돌 해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESLint와 Prettier은 코드포매팅기능이 존재해 충돌하지 않게 겹치는 기능을 꺼준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;105&quot; data-filename=&quot;Screenshot from 2021-06-16 20-53-16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAax3/btq7ubGY5DT/knTp2XBp6FzHbmydUipmI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAax3/btq7ubGY5DT/knTp2XBp6FzHbmydUipmI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAax3/btq7ubGY5DT/knTp2XBp6FzHbmydUipmI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAax3%2Fbtq7ubGY5DT%2FknTp2XBp6FzHbmydUipmI0%2Fimg.png&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;105&quot; data-filename=&quot;Screenshot from 2021-06-16 20-53-16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 포맷을 Prettier로 설정&lt;/b&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-origin-width=&quot;702&quot; data-origin-height=&quot;122&quot; data-filename=&quot;Screenshot from 2021-06-16 20-56-28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGi4me/btq7qugRRuq/gPJhIHayMYzhpIi3HSrPuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGi4me/btq7qugRRuq/gPJhIHayMYzhpIi3HSrPuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGi4me/btq7qugRRuq/gPJhIHayMYzhpIi3HSrPuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGi4me%2Fbtq7qugRRuq%2FgPJhIHayMYzhpIi3HSrPuk%2Fimg.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;122&quot; data-filename=&quot;Screenshot from 2021-06-16 20-56-28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ctrl + shift + p 로 팔레트를 연다.&lt;/li&gt;
&lt;li&gt;format document width ....&amp;nbsp;&lt;/li&gt;
&lt;li&gt;config default formatter&lt;/li&gt;
&lt;li&gt;prettier 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ref: &quot;&lt;a href=&quot;https://prettier.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프리티어&lt;/a&gt;&quot; ,&quot;&lt;a href=&quot;https://velog.io/@kyusung/eslint-prettier-config&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프리티어 사용하기&lt;/a&gt;&quot;, &quot;&lt;a href=&quot;https://sunmon.github.io/vscode-eslint-prettier-setting/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프리티어 적용&lt;/a&gt;&quot;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/개발환경설정</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/155</guid>
      <comments>https://pstudio411.tistory.com/entry/%EC%95%84-%EB%B3%B4%EA%B8%B0-%EC%A2%8B%EC%9D%80-%EC%BD%94%EB%93%9C%EB%8B%A4-Prettier-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0#entry155comment</comments>
      <pubDate>Wed, 16 Jun 2021 20:23:26 +0900</pubDate>
    </item>
    <item>
      <title>EsLint 코드 포맷 통일 및 가독성 높히기</title>
      <link>https://pstudio411.tistory.com/entry/EsLint-%EC%BD%94%EB%94%A9%EC%9D%84-%EC%A2%80%EB%8D%94-%ED%8E%B8%ED%95%98%EA%B2%8C%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ESLint&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;ESLint는&amp;nbsp; JavaScript, JSX의 정적 분석 도구로 오픈소스 프로젝트이다. 코드를 분석해 문법 오류나 안티 패턴을 찾아 일관된 코드 스타일로 작성하도록 도와준다.&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;EsLint 설치&lt;/p&gt;
&lt;pre id=&quot;code_1623840172997&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install eslint --save-dev

yarn add eslint --dev&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;ESlint 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623840570175&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx eslint --init&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-origin-width=&quot;737&quot; data-origin-height=&quot;111&quot; data-filename=&quot;Screenshot from 2021-06-16 19-49-54.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPIljc/btq7o2Y2Zwq/IAnhc0JdFXca0gcMHo0xn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPIljc/btq7o2Y2Zwq/IAnhc0JdFXca0gcMHo0xn0/img.png&quot; data-alt=&quot;취향에 맞게 선택 문법, 문제점 코드스타일등 을 적용할거면 3번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPIljc/btq7o2Y2Zwq/IAnhc0JdFXca0gcMHo0xn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPIljc%2Fbtq7o2Y2Zwq%2FIAnhc0JdFXca0gcMHo0xn0%2Fimg.png&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;111&quot; data-filename=&quot;Screenshot from 2021-06-16 19-49-54.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;취향에 맞게 선택 문법, 문제점 코드스타일등 을 적용할거면 3번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;154&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0QIvJ/btq7tFnYK7n/lfqsZGMdbKPYgwn0oSvdmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0QIvJ/btq7tFnYK7n/lfqsZGMdbKPYgwn0oSvdmk/img.png&quot; data-alt=&quot;프레임워크 본인은 React&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0QIvJ/btq7tFnYK7n/lfqsZGMdbKPYgwn0oSvdmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0QIvJ%2Fbtq7tFnYK7n%2FlfqsZGMdbKPYgwn0oSvdmk%2Fimg.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;154&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프레임워크 본인은 React&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;129&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr1KS6/btq7snPhcPA/qlGmlpVEHcgtFjKOOkbDtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr1KS6/btq7snPhcPA/qlGmlpVEHcgtFjKOOkbDtk/img.png&quot; data-alt=&quot;import, export를 많이 쓰므로 JS Modules&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr1KS6/btq7snPhcPA/qlGmlpVEHcgtFjKOOkbDtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr1KS6%2Fbtq7snPhcPA%2FqlGmlpVEHcgtFjKOOkbDtk%2Fimg.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;129&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;import, export를 많이 쓰므로 JS Modules&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;122&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6D0ys/btq7tZNqfRS/OBywoKMz4Dy9GDhKdWbbS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6D0ys/btq7tZNqfRS/OBywoKMz4Dy9GDhKdWbbS1/img.png&quot; data-alt=&quot;TypeScript 사용유무&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6D0ys/btq7tZNqfRS/OBywoKMz4Dy9GDhKdWbbS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6D0ys%2Fbtq7tZNqfRS%2FOBywoKMz4Dy9GDhKdWbbS1%2Fimg.png&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;122&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TypeScript 사용유무&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;175&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-44.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0FEqS/btq7oogU0SO/T0Mh7ebcfFAU5EGnAIYs3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0FEqS/btq7oogU0SO/T0Mh7ebcfFAU5EGnAIYs3k/img.png&quot; data-alt=&quot;코드가 실행되는 환경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0FEqS/btq7oogU0SO/T0Mh7ebcfFAU5EGnAIYs3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0FEqS%2Fbtq7oogU0SO%2FT0Mh7ebcfFAU5EGnAIYs3k%2Fimg.png&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;175&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-44.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드가 실행되는 환경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;219&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq0RbG/btq7ucZ906Y/vJlHZ1B15GM67MYRIKfKNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq0RbG/btq7ucZ906Y/vJlHZ1B15GM67MYRIKfKNK/img.png&quot; data-alt=&quot;프로젝트 스타일 정의(보토은 대중적으로)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq0RbG/btq7ucZ906Y/vJlHZ1B15GM67MYRIKfKNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq0RbG%2Fbtq7ucZ906Y%2FvJlHZ1B15GM67MYRIKfKNK%2Fimg.png&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;219&quot; data-filename=&quot;Screenshot from 2021-06-16 19-50-59.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트 스타일 정의(보토은 대중적으로)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;241&quot; data-filename=&quot;Screenshot from 2021-06-16 19-51-06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA1kiy/btq7sUTDHgY/Ca7MoHgyYAjx5p1ke9FPKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA1kiy/btq7sUTDHgY/Ca7MoHgyYAjx5p1ke9FPKk/img.png&quot; data-alt=&quot;파일 포맷 (Json이 국룰)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA1kiy/btq7sUTDHgY/Ca7MoHgyYAjx5p1ke9FPKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA1kiy%2Fbtq7sUTDHgY%2FCa7MoHgyYAjx5p1ke9FPKk%2Fimg.png&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;241&quot; data-filename=&quot;Screenshot from 2021-06-16 19-51-06.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파일 포맷 (Json이 국룰)&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;이렇게 설정이 끝나면 .eslintrc.json 혹은 .eslintrc.js파일이 생성됨&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-origin-width=&quot;363&quot; data-origin-height=&quot;82&quot; data-filename=&quot;Screenshot from 2021-06-16 19-59-02.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AjJAp/btq7tbUZfN1/nMoXlCudQ0x6Io1EekAR51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AjJAp/btq7tbUZfN1/nMoXlCudQ0x6Io1EekAR51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AjJAp/btq7tbUZfN1/nMoXlCudQ0x6Io1EekAR51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAjJAp%2Fbtq7tbUZfN1%2FnMoXlCudQ0x6Io1EekAR51%2Fimg.png&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;82&quot; data-filename=&quot;Screenshot from 2021-06-16 19-59-02.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1623841117638&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;env&quot;: {                        프로젝트의 사용 환경을 넣어줍니다.
        &quot;browser&quot;: true,
        &quot;es2021&quot;: true
    },
    &quot;extends&quot;: &quot;plugin:react/recommended&quot;,
    &quot;parserOptions&quot;: {              자바스크립트 버전, 모듈 사용 여부 설정
        &quot;ecmaFeatures&quot;: {
            &quot;jsx&quot;: true
        },
        &quot;ecmaVersion&quot;: 12,
        &quot;sourceType&quot;: &quot;module&quot;
    },
    &quot;plugins&quot;: [                    플러그인을 넣어주면된다.
        &quot;react&quot;
    ],
    &quot;rules&quot;: {                     extends와 plugins에 대한 세부 설정을 변경하는 코드를 넣을 수 있습니다.
       &quot;max-length&quot;: 0             0으로 설정하면 에러 검출 X
    } 
    
    &quot;globals&quot;: {                    전역 변수를 넣어준다.외부 라이브러리 사용시 에러 표지 방지
    &quot;jQuery&quot;: true,
    &quot;$&quot;: true
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/개발환경설정</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/154</guid>
      <comments>https://pstudio411.tistory.com/entry/EsLint-%EC%BD%94%EB%94%A9%EC%9D%84-%EC%A2%80%EB%8D%94-%ED%8E%B8%ED%95%98%EA%B2%8C%ED%95%98%EA%B8%B0#entry154comment</comments>
      <pubDate>Wed, 16 Jun 2021 20:00:42 +0900</pubDate>
    </item>
    <item>
      <title>CORS (Cross Origin Resource Sharing) 적용 방법</title>
      <link>https://pstudio411.tistory.com/entry/CORS-Cross-Origin-Resource-Sharing-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CORS란? Cross Origin Resource Sharing의 약자로 A도메인에서 B 도메인으로 리소스가 요청되는 경우를 말하는데, http 프로토콜로 요청이 될 경우 브라우저 자체에서 보안 상 CORS를 제한하게 되는 현상을 말한다.&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;br /&gt;AWS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;s3같은 경우는 권한 부분에 CORS 설정 하는 부분이 존재한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623757148438&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;CORSConfiguration&amp;gt;
 &amp;lt;CORSRule&amp;gt;
   &amp;lt;AllowedOrigin&amp;gt;http://www.example1.com&amp;lt;/AllowedOrigin&amp;gt;

  &amp;lt;AllowedMethod&amp;gt;GET&amp;lt;/AllowedMethod&amp;gt;
   &amp;lt;AllowedMethod&amp;gt;PUT&amp;lt;/AllowedMethod&amp;gt;
   &amp;lt;AllowedMethod&amp;gt;POST&amp;lt;/AllowedMethod&amp;gt;
   &amp;lt;AllowedMethod&amp;gt;DELETE&amp;lt;/AllowedMethod&amp;gt;

   &amp;lt;AllowedHeader&amp;gt;*&amp;lt;/AllowedHeader&amp;gt;
 &amp;lt;/CORSRule&amp;gt;
&amp;lt;/CORSConfiguration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express를 사용한다면 npm에서 cors를 찾아 설치한 후 미들웨어로 사용하면된다.&lt;/p&gt;
&lt;pre id=&quot;code_1623757263986&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install cors&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;1. 전체 적용&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광범위하게 적용하여 모든 요청시 CORS를 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623757800688&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let express = require('express')
let cors = require('cors')
let app = express()

app.use(cors())
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 부분 적용&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;해당 요청만 CORS를 적용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623757908533&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let express = require('express')
let cors = require('cors')
let app = express()

app.get('/user/:id', cors(), function(req, res, next) {
  res.json({content})
})
&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;3. cors 옵션 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623757991844&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let express = require('express')
let cors = require('cors')
let app = express()

let corsOption = {
  origin: 'http://a.com'
}

app.get('/user/:id', cors(), function(req, res, next) {
  res.json({content})
})
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>FE BE 개발 메모장/Node.js, API</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/153</guid>
      <comments>https://pstudio411.tistory.com/entry/CORS-Cross-Origin-Resource-Sharing-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95#entry153comment</comments>
      <pubDate>Wed, 16 Jun 2021 19:39:34 +0900</pubDate>
    </item>
    <item>
      <title>크로스 브라우징(Cross Browsing) 알아보기</title>
      <link>https://pstudio411.tistory.com/entry/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;크로스 브라우징(Cross Browsing)이란?&lt;/b&gt;&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.Can I Use 사용하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Can I Use에서 HTML 요소 및 속성이나, CSS 기능들, JavaScript 기능들의 브라우져에서 지원 여부를 버전 별로 보여주어 사전에 호환성문제를 예방할 수 있다.&amp;nbsp; 스크롤을 내리면 상세정보도 나와 웹페이지 작업 시 매우 유용한 사이트이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;1036&quot; data-filename=&quot;Screenshot from 2021-06-15 19-43-57.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjUQwa/btq7nHsXCqI/mTzMpZkREcrxI6aKpb2u8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjUQwa/btq7nHsXCqI/mTzMpZkREcrxI6aKpb2u8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjUQwa/btq7nHsXCqI/mTzMpZkREcrxI6aKpb2u8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjUQwa%2Fbtq7nHsXCqI%2FmTzMpZkREcrxI6aKpb2u8K%2Fimg.png&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;1036&quot; data-filename=&quot;Screenshot from 2021-06-15 19-43-57.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/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;2. 브라우저 트랜드 파악 및 대응순서&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;brow.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8x7iY/btq7jzipTie/rWpHdoluxkYKdxkjW5rzb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8x7iY/btq7jzipTie/rWpHdoluxkYKdxkjW5rzb1/img.png&quot; data-alt=&quot;전세계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8x7iY/btq7jzipTie/rWpHdoluxkYKdxkjW5rzb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8x7iY%2Fbtq7jzipTie%2FrWpHdoluxkYKdxkjW5rzb1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;brow.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전세계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;brow.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJdWju/btq7klEeeK4/PfwhBnPApMkFvUIoNYHm51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJdWju/btq7klEeeK4/PfwhBnPApMkFvUIoNYHm51/img.png&quot; data-alt=&quot;국내&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJdWju/btq7klEeeK4/PfwhBnPApMkFvUIoNYHm51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJdWju%2Fbtq7klEeeK4%2FPfwhBnPApMkFvUIoNYHm51%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;brow.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;국내&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 차트를 보면 국내나 해외나 압도적으로 구글의 Chrome가 높은것을 볼 수 있다. 모바일, 데스크탑, 테블릿 모두 포함한 수치이다. IE 같은 경우는 마이크로스프트에서 지원을 종료 하기 때문에 굳이 지원을 할 필요가 없다는 내 개인적인 생각이다.&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. 라이브러리 사용하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jQuery&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Polyfill (&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Glossary/Polyfill&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MDN에서는 추천하지 않은 방법&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;ref: &quot;&lt;a href=&quot;https://hackya.com/kr/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95-%EC%B4%9D%EC%A0%95%EB%A6%AC/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;크로스 브라우징 총정리&lt;/a&gt;&quot;&lt;/p&gt;</description>
      <category>FE BE 개발 메모장/Client Server Architecture</category>
      <author>PixelStudio</author>
      <guid isPermaLink="true">https://pstudio411.tistory.com/152</guid>
      <comments>https://pstudio411.tistory.com/entry/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0#entry152comment</comments>
      <pubDate>Tue, 15 Jun 2021 20:32:37 +0900</pubDate>
    </item>
  </channel>
</rss>