<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>그래픽스 개발자의 코딩 블로그</title>
    <link>https://parodev.tistory.com/</link>
    <description>프로그래밍 언어 및 그래픽스 개발에 필요한 지식 모음</description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 17:49:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>kgenots</managingEditor>
    <image>
      <title>그래픽스 개발자의 코딩 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/2997508/attach/522975a1ed304a3db900cc2d1c7dfef5</url>
      <link>https://parodev.tistory.com</link>
    </image>
    <item>
      <title>OpenAI API 키 도용 5만건 이상 (GPT-4 무단 이용)</title>
      <link>https://parodev.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근에는 &quot;Discodtehe&quot;라는 사용자가 Replit 플랫폼에 게시된 소스 코드에서 API 키를 수집하여 이를 공유하는 사례가 발생했습니다. 이를 통해 800명 이상의 커뮤니티 멤버가 도용된 계정을 사용하고 큰 요금을 발생시키는 일이 벌어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_GPT-4-Parameters-How-many-parameters-will-ChatGPT-4-have.webp&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKPfcq/btsjInpWtyS/dPyO3H1UVmGCsxdDkouhYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKPfcq/btsjInpWtyS/dPyO3H1UVmGCsxdDkouhYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKPfcq/btsjInpWtyS/dPyO3H1UVmGCsxdDkouhYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKPfcq%2FbtsjInpWtyS%2FdPyO3H1UVmGCsxdDkouhYK%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;640&quot; height=&quot;360&quot; data-filename=&quot;edited_GPT-4-Parameters-How-many-parameters-will-ChatGPT-4-have.webp&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&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;OpenAI는 최신 언어 모델인 GPT-4를 개발자들이 활용할 수 있도록 API 키를 제공합니다. 그러나 최근 API 키의 누출로 인해 보안 위협이 증가하고 있습니다. 이 글에서는 OpenAI API 키 누출의 심각성과 개발자가 이에 대응하기 위해 취해야 할 조치에 대해 살펴보겠습니다.&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;OpenAI API 키의 누출과 문제점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI API 키는 개발자가 자신의 애플리케이션에 OpenAI의 기술을 통합할 수 있게 해줍니다. 그러나 많은 개발자들이 자신의 키를 코드에 포함시키고 이를 잊어버리는 경우가 많아졌습니다. 이로 인해 악의적인 사용자들이 API 키를 탈취하여 제3자 계정을 사용하거나 비용을 발생시킬 수 있으며, 민감한 비즈니스 데이터에 접근할 수도 있습니다.&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;GitGuardian에 따르면 현재 GitHub에서만 50,000개 이상의 OpenAI API 키가 노출되어 있어 OpenAI 개발자 계정은 MongoDB와 Google에 이어 세 번째로 가장 노출된 계정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LAuFt/btsjRmoQ9l1/mefRtbvcwBMizkMn08hrb1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LAuFt/btsjRmoQ9l1/mefRtbvcwBMizkMn08hrb1/img.webp&quot; data-alt=&quot;Source: GitGuardian&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LAuFt/btsjRmoQ9l1/mefRtbvcwBMizkMn08hrb1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLAuFt%2FbtsjRmoQ9l1%2FmefRtbvcwBMizkMn08hrb1%2Fimg.webp&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; alt=&quot;ChatGPT 와 OpenAI API 키 유출 그래프&quot; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;338&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Source: GitGuardian&lt;/figcaption&gt;
&lt;/figure&gt;
&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;OpenAI API 키 보호를 위한 개발자의 조치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자들은 API 키의 보안을 강화하기 위해 몇 가지 조치를 취할 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;키를 코드에 포함시키지 않기&lt;/b&gt;: 개발자는 API 키를 코드에 직접 포함시키지 않아야 합니다. 대신 환경 변수와 같은 안전한 방법을 사용하여 키를 저장하고 불러와야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고유한 키 할당&lt;/b&gt;: 개발자는 각 사용자에게 고유한 API 키를 할당해야 합니다. 이를 통해 한 사용자의 키가 탈취되더라도 다른 사용자의 계정에는 영향을 주지 않습니다. API 키를 다른 사용자와 공유하는 것은 자제해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키 관리 서비스 사용&lt;/b&gt;: 개발자는 키 관리 서비스를 활용하여 키의 보안을 강화할 수 있습니다. 키를 안전하게 저장하고 주기적으로 변경하는 것이 중요합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정기적인 키 변경&lt;/b&gt;: 개발자는 정기적으로 키를 변경하여 보안을 강화해야 합니다. 민감한 정보에 접근하는 경우에는 매일 키를 변경하는 것도 고려해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 키 변경 기능 활용&lt;/b&gt;: 개발자는 자동으로 키를 회전시키는 기능을 활용하는 것이 좋습니다. 이를 위해 제3자 도구를 사용할 수 있으며, 24시간마다 키를 자동으로 변경함으로써 보안을 강화할 수 있습니다.&lt;/li&gt;
&lt;/ol&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI API 키의 누출은 심각한 보안 위협을 초래할 수 있습니다. 개발자들은 API 키의 보안을 강화하기 위해 적절한 조치를 취해야 합니다. 키를 코드에 포함시키지 않고, 고유한 키를 할당하고, 키 관리 서비스를 사용하며, 정기적으로 키를 회전시키는 것이 중요합니다. 이러한 조치를 통해 개발자들은 OpenAI API를 안전하게 활용할 수 있으며, 누출로 인한 문제를 예방할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기사 원문: &lt;a href=&quot;https://www.darkreading.com/application-security/cybercrooks-scrape-openai-keys-pirate-gpt-4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.darkreading.com/application-security/cybercrooks-scrape-openai-keys-pirate-gpt-4&lt;/a&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <category>API</category>
      <category>ChatGPT</category>
      <category>GIT</category>
      <category>hacking</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/60</guid>
      <comments>https://parodev.tistory.com/60#entry60comment</comments>
      <pubDate>Tue, 13 Jun 2023 20:52:28 +0900</pubDate>
    </item>
    <item>
      <title>C++ 에서 string 문자열과 char 배열 비교하기</title>
      <link>https://parodev.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 이번에는 C++에서의 std::string과 char 배열의 차이를 비교해보려고 합니다. C++에서 문자열을 표현하는 두 가지 방법인 std::string과 char 배열은 각각 장단점을 가지고 있습니다. 이 글에서는 두 방법의 동작 원리, 메모리 할당, 문자열 조작 등 다양한 측면을 비교해보면서 어떤 상황에서 어떤 방법을 선택해야 하는지 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;약꾹-001 (3) (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5R8ST/btsg7GSBSCN/sT0QCDmUgxlxPZxmuYNQw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5R8ST/btsg7GSBSCN/sT0QCDmUgxlxPZxmuYNQw1/img.png&quot; data-alt=&quot;C++ 에서 std:string과 char[] 비교하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5R8ST/btsg7GSBSCN/sT0QCDmUgxlxPZxmuYNQw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5R8ST%2Fbtsg7GSBSCN%2FsT0QCDmUgxlxPZxmuYNQw1%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;640&quot; height=&quot;640&quot; data-filename=&quot;약꾹-001 (3) (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;C++ 에서 std:string과 char[] 비교하기&lt;/figcaption&gt;
&lt;/figure&gt;
&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;std::string: 유연하고 편리한 문자열 클래스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::string은 C++ 표준 라이브러리에서 제공하는 문자열 클래스입니다. std::string 객체는 동적으로 메모리를 할당하여 문자열을 저장하므로, 문자열의 길이에 따라 자동으로 크기가 조절될 수 있습니다. 이는 필요한 만큼의 메모리만 사용하므로 메모리의 낭비를 최소화할 수 있습니다. 또한 std::string은 다양한 내장 함수를 제공하여 문자열을 조작하고 처리하는 데 편리함을 제공합니다.&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;아래는 std::string을 사용한 예제 코드입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1684830046925&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

int main() {
    std::string myString = &quot;Hello, world!&quot;;
    
    std::cout &amp;lt;&amp;lt; &quot;문자열 길이: &quot; &amp;lt;&amp;lt; myString.length() &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;첫 번째 문자: &quot; &amp;lt;&amp;lt; myString[0] &amp;lt;&amp;lt; std::endl;
    
    myString += &quot; How are you?&quot;;
    std::cout &amp;lt;&amp;lt; &quot;변경된 문자열: &quot; &amp;lt;&amp;lt; myString &amp;lt;&amp;lt; std::endl;
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;char 배열: 정적 할당과 직접적인 문자 조작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;char 배열은 단순한 문자들의 배열로, 문자열을 저장하기 위해 연속된 메모리를 정적으로 할당합니다. char 배열은 크기가 정해져 있으며, 정적 할당이므로 실행 시간에 크기를 조절할 수 없습니다. 또한 char 배열은 문자열 조작을 위한 내장 함수를 제공하지 않으므로 문자열을 직접 조작해야 합니다.&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;아래는 char 배열을 사용한 예제 코드입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1684830066156&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main() {
    char myString[15] = &quot;Hello, world!&quot;;
    
    int length = 0;
    while (myString[length] != '\0') {
        length++;
    }
    std::cout &amp;lt;&amp;lt; &quot;문자열 길이: &quot; &amp;lt;&amp;lt; length &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;첫 번째 문자: &quot; &amp;lt;&amp;lt; myString[0] &amp;lt;&amp;lt; std::endl;
    
    char additionalString[] = &quot; How are you?&quot;;
    strcat(myString, additionalString);
    std::cout &amp;lt;&amp;lt; &quot;변경된 문자열: &quot; &amp;lt;&amp;lt; myString &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;std::string 과 char 배열 비교&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메모리 할당 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::string은 동적으로 메모리를 할당하며 필요에 따라 크기를 조절할 수 있습니다. 메모리는 &lt;u&gt;힙(heap) 영역에서 동적으로 할당&lt;/u&gt;되며, 문자열 길이에 따라 자동으로 메모리를 조절합니다.&lt;br /&gt;char 배열은 정적으로 메모리를 할당하며 컴파일 시간에 크기가 결정됩니다. 할당된 메모리는 &lt;u&gt;스택(stack) 영역에 위치하며, 크기가 고정&lt;/u&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::string은 &lt;u&gt;문자열 조작을 위한 다양한 멤버 함수를 제공&lt;/u&gt;합니다. 예를 들어, 문자열 연결, 복사, 자르기, 찾기 등의 작업을 간편하게 수행할 수 있습니다.&lt;br /&gt;char 배열은 내장 함수를 제공하지 않으므로, 문자열 조작을 위해 C 스타일의 문자열 함수를 사용해야 합니다. strcpy, strcat, strlen 등의 함수를 사용하여 문자열 조작을 수행합니다.&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::string은 문자열의 크기가 동적으로 조절될 수 있고 내장 함수를 활용할 수 있으므로 편리하지만, 메모리 할당과 해제, 함수 호출 등의 오버헤드가 발생할 수 있습니다. 따라서 많은 문자열 처리가 필요한 경우에는 성능이 저하될 수 있습니다.&lt;br /&gt;char 배열은 정적으로 할당되며 내장 함수를 사용하지 않기 때문에 메모리 오버헤드가 적고, 함수 호출도 최소화됩니다. 따라서 많은 문자열 처리가 필요한 경우에는 성능이 개선될 수 있습니다.&lt;/p&gt;</description>
      <category>C, C++, C#</category>
      <category>c</category>
      <category>c++</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/59</guid>
      <comments>https://parodev.tistory.com/59#entry59comment</comments>
      <pubDate>Tue, 23 May 2023 17:25:56 +0900</pubDate>
    </item>
    <item>
      <title>번들링(Bundling) 이란? 이점과 기술 소개</title>
      <link>https://parodev.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;번들링(Bundling)의 사전적인 의미는 '&lt;b&gt;어떤 것을 묶다, 모으다&lt;/b&gt;' 입니다. 웹 개발에서 번들링은 &lt;u&gt;여러 코드와 프로그램을 묶어&lt;/u&gt; 사용자에게 웹 애플리케이션을 제공하는 핵심 과정입니다. 번들링(Bundling)은 빌드 과정 중 하나로, 최종적으로 번들링된 파일을 브라우저에서 실행하여 웹 애플리케이션을 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;약꾹-001 (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccC2Mo/btsg86QFlXw/ITcctVtPgA3jokDUL2qVd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccC2Mo/btsg86QFlXw/ITcctVtPgA3jokDUL2qVd0/img.png&quot; data-alt=&quot;웹 개발 번들링 이해하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccC2Mo/btsg86QFlXw/ITcctVtPgA3jokDUL2qVd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccC2Mo%2Fbtsg86QFlXw%2FITcctVtPgA3jokDUL2qVd0%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;640&quot; height=&quot;640&quot; data-filename=&quot;약꾹-001 (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹 개발 번들링 이해하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;번들링의 이점&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 파일 크기 문제 해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번들링은 결과물 파일들을 &lt;u&gt;압축하여 크기를 줄입니다&lt;/u&gt;. 번들 파일은 번들링되지 않은 원본 파일보다 작아지며, 실행 속도와 로딩 속도도 향상됩니다. 번들링은 성능 측면에서 이점을 제공합니다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 애플리케이션 임의 조작 방지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번들링된 웹 애플리케이션은 사용자가 임의로 조작할 수 없습니다. 번들링되지 않은 원본 코드에 접근할 수 있다면, 사용자가 의도하지 않은 조작을 할 수 있습니다. 번들링은 &lt;u&gt;애플리케이션의 무결성과 보안을 강화&lt;/u&gt;합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 파일 단위의 모듈 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript는 기본적으로 전역 범위를 가지므로 여러 개의 JavaScript 파일이 있을 때 &lt;u&gt;변수 충돌 등의 문제&lt;/u&gt;가 발생할 수 있습니다. 번들링 도구인 Webpack은 모듈 번들링을 통해 이 문제를 해결합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;logo-on-white-bg.png&quot; data-origin-width=&quot;3916&quot; data-origin-height=&quot;1524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCnVMx/btsg96vLJbG/v1wpqAilIRA7B4kU5LnkP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCnVMx/btsg96vLJbG/v1wpqAilIRA7B4kU5LnkP0/img.png&quot; data-alt=&quot; Webpack&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCnVMx/btsg96vLJbG/v1wpqAilIRA7B4kU5LnkP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCnVMx%2Fbtsg96vLJbG%2Fv1wpqAilIRA7B4kU5LnkP0%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;640&quot; height=&quot;249&quot; data-filename=&quot;logo-on-white-bg.png&quot; data-origin-width=&quot;3916&quot; data-origin-height=&quot;1524&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; Webpack&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹팩(Webpack)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹팩은 프론트엔드 애플리케이션 배포를 위해 가장 많이 사용되는 모듈 번들러입니다. 웹팩은 JavaScript 애플리케이션을 위한 모듈 번들러로 사용됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모듈 번들러의 등장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모던 웹에서는 HTML, CSS 파일의 내용이 JavaScript 파일 안으로 들어오면서 JavaScript 파일의 양과 의존성 트리가 증가했습니다. 이로 인해 변수 스코프 문제와 네트워크 비용 문제가 발생하게 되었습니다. 모듈 번들러는 이러한 문제를 해결하기 위해 등장하였습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;웹팩이 제공하는 기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹팩은 다양한 기능을 제공하여 웹 개발을 편리하게 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;번들링&lt;/b&gt; : 웹팩은 HTML, CSS, JavaScript 등의 자원을 각각의 모듈로 보고 이를 조합해 하나의 번들로 묶습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;네트워크 비용 감소&lt;/b&gt; : 웹팩은 각 자원을 일일이 서버에 요청해 가져오는 대신, 같은 타입의 자원을 요청하고 응답을 주고받아 네트워크 비용을 감소시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자바스크립트 문법 호환성 지원&lt;/b&gt;: 웹팩은 babel-loader를 사용하여 자바스크립트 ES6 문법을 ES5로 변환해주어 호환성 문제를 해결할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발 및 프로덕션 모드 선택&lt;/b&gt;: 웹팩은 개발 모드와 프로덕션 모드를 선택할 수 있습니다. 프로덕션 모드에서는 코드 난독화, 압축, 최적화 작업 등을 수행하여 성능을 향상시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;웹팩 설정 파일 (webpack.config.js)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹팩을 사용하기 위해 webpack.config.js라는 설정 파일을 작성할 수 있습니다. 이 파일을 통해 번들링 과정을 세부적으로 제어할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 webpack.config.js의 기본적인 구성 요소입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1684826058702&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader',
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
  mode: 'development',
};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;entry&lt;/b&gt;: 웹팩이 의존성 그래프를 그리기 시작하는 시작점 파일을 지정합니다. 일반적으로 index.js 파일을 사용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;output&lt;/b&gt;: 생성된 번들을 내보낼 위치와 파일 이름을 지정합니다. 일반적으로 dist 폴더에 bundle.js로 출력됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;module&lt;/b&gt;: 웹팩은 모듈을 처리하기 위해 로더를 사용합니다. 로더는 모듈을 변환하거나 의존성 그래프에 추가하는 역할을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;plugins&lt;/b&gt;: 웹팩 플러그인은 번들을 최적화하거나 에셋을 관리하는 등의 작업을 수행합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mode&lt;/b&gt;: 개발 모드(development) 또는 프로덕션 모드(production)를 선택할 수 있습니다. 개발 모드는 디버깅을 용이하게 하고, 프로덕션 모드는 최적화된 번들을 생성합니다.&lt;/li&gt;
&lt;/ul&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번들링은 웹 개발에서 필수적인 단계로, 파일 크기 문제 해결, 애플리케이션 임의 조작 방지, 파일 단위의 모듈 관리 등의 이점을 제공합니다. 웹팩은 대표적인 번들러로서 다양한 기능을 제공하며, 설정 파일을 통해 번들링 과정을 세부적으로 제어할 수 있습니다.&lt;br /&gt;위의 예제 코드를 참고하여 웹팩을 활용하여 애플리케이션을 개발해 보세요. 웹 개발의 효율성과 성능을 높이기 위해 번들링은 필수적인 도구입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번들링 라이브러리에는 Webpack 외에도 &lt;b&gt;Rollup.js&lt;/b&gt;, &lt;b&gt;Parcel&lt;/b&gt; 등이 있습니다. 자세한 사용 방법은 이후에 알아보도록 하겠습니다.&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>build</category>
      <category>bundling</category>
      <category>javascript</category>
      <category>web</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/58</guid>
      <comments>https://parodev.tistory.com/58#entry58comment</comments>
      <pubDate>Tue, 23 May 2023 16:32:56 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript 개발자라면 읽어야 할 JS 변천사. 1탄 Classic JavaScript</title>
      <link>https://parodev.tistory.com/57</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (7).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0NHY5/btrSlHglWaQ/XXQQKFh4VDKVAw9QcChI0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0NHY5/btrSlHglWaQ/XXQQKFh4VDKVAw9QcChI0k/img.png&quot; data-alt=&quot;JS 개발자라면 알아야할 변천사 1탄&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0NHY5/btrSlHglWaQ/XXQQKFh4VDKVAw9QcChI0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0NHY5%2FbtrSlHglWaQ%2FXXQQKFh4VDKVAw9QcChI0k%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (7).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JS 개발자라면 알아야할 변천사 1탄&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;JavaScript 를 사용하다보면 어떤 코드는 require 를 쓰고 있고 어떤 코드는 import 를 쓰고 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 언제 무엇을 써야 하고, 왜 그렇게 써야하는지 알기 위해서는 JavaScript의 변천사를 어느정도 이해하는 것이 필요합니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# 제발 안다고 하고 몰라서 require 랑 import 혼용해서 쓰지 말아주세요. 특히 Node.js 14에서...&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 간단히 요약해서 설명하면,&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정적 로드 : HTML &amp;lt;script&amp;gt;&lt;/li&gt;
&lt;li&gt;동적 로드 (풀패키지) : Node.js 4~14 CommonJS(require)&lt;/li&gt;
&lt;li&gt;동적 로드 (모듈) : Node.js 14~ ESModule(import)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 순서로 이해하시면 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 1탄에서는 &lt;b&gt;require&lt;/b&gt;를 사용하는 CommonJS, AMD, UMD 에 대해서 설명해보려합니다.&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;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;하아 이제부터 얘기할 거 틀릴까봐 겁납니다 ㅠㅠ&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;태초의 자바스크립트&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;HTML 내 &amp;lt;script&amp;gt; 태그 이용&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우리가 JavaScript 를 맨 처음 배울 때, HTML 내 &amp;lt;script&amp;gt; 라는 태그를 쓰고, 직접 코드를 작성하거나 `src` attribute를 이용해서 특정 url 또는 상대경로에서 script 를 불러올 수 있었습니다. 이때까지만 하더라도 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;브라우저 내에서 &amp;lt;script&amp;gt; 태그 별로 하나의 스크립트를 실행&lt;/b&gt;&lt;/span&gt;할 수 있는 환경이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R2dCS/btrR9dN2KPY/iS7byDsjN4IynqRBDekc9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R2dCS/btrR9dN2KPY/iS7byDsjN4IynqRBDekc9k/img.png&quot; data-alt=&quot;생활코딩 JavaScript 강의 발췌&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R2dCS/btrR9dN2KPY/iS7byDsjN4IynqRBDekc9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR2dCS%2FbtrR9dN2KPY%2FiS7byDsjN4IynqRBDekc9k%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;720&quot; height=&quot;376&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생활코딩 JavaScript 강의 발췌&lt;/figcaption&gt;
&lt;/figure&gt;
&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;span style=&quot;color: #333333;&quot;&gt;CommonJS와 Node.js&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;require의 시작&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;프로그래밍 언어인 JavaScript 가 갖추어야할 기능은 많아지고 언어의 범용화를 위해 모듈화에 대한 요구사항이 늘어났습니다. 이 때 CommonJS(&lt;a style=&quot;color: #333333;&quot; href=&quot;http://www.commonjs.org/&quot;&gt;http://www.commonjs.org/&lt;/a&gt;) 라는 자발적으로 조직된 워킹그룹이 JavaScript 의 범용화를 주도하였습니다. 이 시기 언저리에 브라우저와 별개 JavaScript를 독립적으로 실행할 수 있는 환경인 Node.js 가 생겨났습니다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(Node.js 말고도 많았지만 살아남은건...)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Node.js는 브라우와 별개의 독립실행 환경에서&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;b&gt;os 모듈, fs 모듈 등을 통해 시스템에 접근 가능&lt;/b&gt;하게 되었습니다. &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 때, os 와 fs 같은 &lt;u&gt;외부 모듈에 접근&lt;/u&gt;해서 로드할 수 있는 메서드가 &lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;`require()`&lt;/span&gt;&lt;/b&gt; 입니다. 이와 같은 CommonJS 형식의 모듈을 제작할 때, &lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;`module.exports`&lt;/span&gt;&lt;/b&gt; 를 사용합니다. 이 때 &lt;b&gt;모듈 단위&lt;/b&gt;는 &lt;u&gt;파일 이름&lt;/u&gt;이거나 &lt;u&gt;index.js를 포함하고 있는 폴더 이름&lt;/u&gt;입니다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(Python 에서의 모듈 개념과 비슷함. 파일 이름이거나, __init__.py를 포함하고 있는 폴더 이름)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 파일이름에서 .js를 빼기도 합니다.&lt;/span&gt;&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;CommonJS 모듈화&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CommonJS의 모듈화에 사용되는 개념은 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스코프(Scope)&lt;/b&gt;: 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 한다.&lt;/li&gt;
&lt;li&gt;정의(Definition): &lt;b&gt;모듈 정의는 exports 객체&lt;/b&gt;를 이용한다.&lt;/li&gt;
&lt;li&gt;사용(Usage): &lt;b&gt;모듈 사용은 require 함수&lt;/b&gt;를 이용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CommonJS(require) 사용 예시:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669451495414&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Foo.js
module.exports = fooA // fooA 라는 객체, 메서드(함수), 변수를 모듈 자체로 사용함

// App.js
var fooB = require('Foo.js') // 위에서 만들어진 모듈이 현재 파일에서 fooB 라는 이름으로 사용됨&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서 fooA 는 Foo.js 에서 정의할 때 쓴 이름이고, fooB 는 App.js 사용하려고 쓴 이름입니다. 헷갈린다면 공부!!&lt;/p&gt;
&lt;pre id=&quot;code_1669452016226&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Foo.js
module.exports.foo = fooA // fooA 라는 객체, 메서드(함수), 변수를 모듈 자체로 사용함

// App.js 사용방법 1.
var fooB = require('Foo.js') // 일단 module.exports 가 require('Foo.js') 그 자체
console.log(fooB.foo);

// App.js 사용방법 2.
var { foo } = require('Foo.js') // 모듈은 {} 로 불렀고 내부에 foo property 가져옴
console.log(foo);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용된 CommonJS 형태의 JS 코드는 몇가지 특징이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 자체가 모듈 형태임. 내부 객체를 빼낸다고 하더라도 객체 밖에 있는 코드는 전역적으로 한 번 동작함.&lt;/li&gt;
&lt;li&gt;동기(Synchronous) 형태임. 호출과 동시에 실행됨.&lt;/li&gt;
&lt;li&gt;비동기 기능을 수행하려면 Callback Function 형태를 이용해야 함. (콜백 지옥의 시작)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; background-color: #9feec3;&quot;&gt;브라우저 내 환경은 파일 시스템을 기반으로 하지 않기에, 파일 단위의 전역 기능을 사용할 수 없음.&lt;/span&gt; &lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;브라우저인지, 독립 환경(Node.js)인지에 따라서 JavaScript 모듈이 하는 역할(파일인가 데이터스트림인가)이 헷갈리는 이유&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;CommonJS 는 브라우저 상에서 사용될 &lt;b&gt;모듈 전송 포맷&lt;/b&gt;을 따로 정의 &lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;개인적으로 여기에서부터 CommonJS 를 잊어버려도 좋다고 생각&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;코드 중간에 동적 로드가 가능함.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;비동기와 AMD&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AMD의 약간 진화된 모듈화 (독립성&amp;uarr;)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CommonJS가 JavaScript를 브라우저에서 분리하려는 시도를 함과 달리, CommonJS 내에서 분리된 조직인 AMD는 브라우저 내에서의 JavaScript의 역할에 집중했습니다. AMD(&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;Asynchronous Module Definition)&lt;/span&gt;는 네트워크 상에서 JavaScript 모듈을 호출하고 실행하기 위해서는 &lt;u&gt;파일 단위가 아닌 실제 모듈의 정의와 호출 그리고 비동기 처리&lt;/u&gt;가 되어야 한다는 점에 집중했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;`define`&lt;/b&gt;&lt;/span&gt;이라는 함수를 통해, 실제 사용자가 사용할 수 있는 모듈 부분을 파일 자체가 아닌 코드로 별도의 &lt;b&gt;scope&lt;/b&gt;로 정의(의미론적으로 전역적으로 한 번 실행하는 부분을 없앤 모듈의 탄생)했습니다. '필요할 때 불러서 쓴다'라는 비동기 모듈 로드가 지원이 되었습니다. 이를 지원하는 AMD의 대표적인 모듈이 RequireJS 라는 모듈이 있습니다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(이거 때문에 또 헷갈림 +1)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CommonJS보다는 독립적인 모듈에 대한 정의를 명확히 했습니다. 하지만 이 또한 빌드 및 번들링 시, 전체 파일에 대한 패키징을 실행하기 때문에, 여전히 결과물의 파일 사이즈는 거대할 수 밖에 없었고 클라이언트 입장에서는 여전히 부담스러운 모듈이었습니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;모듈 패턴의 진화 UMD&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Commonjs, AMD 너네 그만 싸워&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UMD(Universal Module Definition)는 CommonJS(서버사이드 우선)와 AMD(브라우저 우선)를 통합하기 위한 일종의 디자인 패턴으로 만들어졌습니다. Webpack 이나 Rollup.js 등 번들러를 통해 JavaScript 모듈을 UMD 형태로 빌드하면, 아래와 같은 즉시 실행 함수(IIFE)가 코드의 맨 처음에 위치하게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;scheme&quot;&gt;&lt;code&gt;(function (root, factory) {
  if (typeof define === 'function' &amp;amp;&amp;amp; define.amd) {
    // AMD
    define(['exports', 'b'], factory);
  } else if (typeof exports === 'object' &amp;amp;&amp;amp; typeof exports.nodeName !== 'string') {
    // CommonJS
    factory(exports, require('b'));
  } else {
    // Browser globals
    factory((root.commonJsStrict = {}), root.b);
  }
}(this, function (exports, b) {
  //use b in some fashion.

  // attach properties to the exports object to define
  // the exported module properties.
  exports.action = function () {};
}));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 CommonJS, AMD 그 외 기타 window 내 property로 적용되는 함수를 모두 돌릴 수 있는 형태로 제작되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 CommonJS가 주도했던 형태의 require를 사용하는 모든 JS 라이브러리(CommonJS, AMD, UMD)는 내부 패키지를 포함하여 빌드되었기에 그대로 배포하면 엄청 무거운지라 Webpack 과 같은 Bundler와 코드 크기를 줄여주는 Minifier 가 필수적으로 따라다녀야했죠.&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;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;- three.js 를 사용하였던 필자는 three.js 를 통해 UMD를 처음 접함 (three.module.js / 번들러 Rollup.js)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 여기서 1탄은 일단락 합니다. (Classic JavaScript)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지는 require를 쓰는 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;빼먹은 내용 중에서 JavaScript 특성에 v8 Engine, JIT Compile, 그리고 ECMA 의 ES3 표준을 따랐던 ActionScript(Flash) 등이 있겠지만 여기 내용도 길어서 어느 부분에 끼워 넣을까 고민중입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS 역사 타임라인은 별도로 작성해다가 올려볼께요.&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;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# 수정이 많이 필요한 포스트&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;# 글은 나중에 정리 좀 해볼께요&lt;/span&gt;&lt;/i&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;다음 2탄에서는 Modern Javascript 에 대해 설명해보려합니다.&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>javascript</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/57</guid>
      <comments>https://parodev.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 28 Nov 2022 18:37:55 +0900</pubDate>
    </item>
    <item>
      <title>꼭 알아두면 좋은 VSCode 단축키 모음</title>
      <link>https://parodev.tistory.com/56</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-_-tl-001 (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLFFvf/btrR71tZXMP/WxuglJDZz8FyEuGYH942T1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLFFvf/btrR71tZXMP/WxuglJDZz8FyEuGYH942T1/img.png&quot; data-alt=&quot;VSCode 단축키 모음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLFFvf/btrR71tZXMP/WxuglJDZz8FyEuGYH942T1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLFFvf%2FbtrR71tZXMP%2FWxuglJDZz8FyEuGYH942T1%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-_-tl-001 (1).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VSCode 단축키 모음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세상엔 여러 개발자가 있습니다. 타자 속도 영문 100타의 독수리 타법을 구사하는 개발자도 있고 500타는 기본인 개발자도 있습니다. 어떤 개발자가 좋은 개발자인지의 기준은 여러가지가 있겠지만, 이번 포스트는 코드 수정 속도의 효율을 올려주는 '단축키' 에 대해 알아보겠습니다.&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;i&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;모든 단축키를 다 작성하지는 않고, 현업에서 제가 많이 쓰는 단축키 모음입니다.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt; MAC 으로 포스팅하고 있어서 Windows 단축키 체크는 미흡해서 몇 개 못 적었습니다. ㅠㅠ&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 언제까지 마우스로 폴더를 뒤적거릴건가?&amp;nbsp;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;* 프로젝트 내 전체 코드 검색&lt;/b&gt; : &lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;command + shift + F&lt;/span&gt;&lt;/b&gt; (MAC) / &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;ctrl + shift + F&lt;/b&gt;&lt;/span&gt; (Windows)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;* 파일명 검색 :&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;command + P&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; (MAC) / &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;ctrl + P&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; (Windows)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 동일한 변수명 또는 글자 바꾸기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 변수명을 바꿀 때, 많은 분들이 코드를 블럭처리하고 오른쪽 클릭을 해서 Refactor 라는 기능을 찾아 사용하는 경우가 많습니다. 특정 언어를 중심으로 Refactor 가 적용되는 경우엔 괜찮지만 JSON이나 XML, TXT 등 데이터 파일을 수정하는 경우엔 어떻게 할건가요?&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;파일 내 검색 : command + F (MAC) / ctrl + F (Windows)&lt;/li&gt;
&lt;li&gt;파일 내 찾아바꾸기 : command + option + F (MAC) / ctrl + H (Windows)&lt;/li&gt;
&lt;li&gt;프로젝트 내 검색 : command + shift + F (MAC) / ctrl + shift + F (Windows)&lt;/li&gt;
&lt;li&gt;프로젝트 내 찾아바꾸기 : command + shift + H (MAC) / ctrl + shift + H (Windows)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;** 검색할 때 대소문자 구분 : 위 커맨드 실행 후 &lt;span style=&quot;background-color: #f89009;&quot;&gt;command + option + C&lt;/span&gt;&lt;/b&gt; (MAC) / &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;alt + C&lt;/b&gt;&lt;/span&gt; (Windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 여러 단어 또는 여러 줄 한 번에 수정하기 (멀티커서)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기능을 잘 쓰면 코드는 순식간에 수정하고, 오후에 탱자탱자 놀기 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 멀티커서를 만들기 전에 문자나 단어를 선택, 블록 처리 하는 단축키입니다.&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;1. 블록 지정 단축키 (= 커서 드래그)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글자 선택 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;shift + &amp;larr; 또는 &amp;rarr; (공통)&lt;/li&gt;
&lt;li&gt;단어 선택 : 더블클릭 / option + shift + &amp;larr; 또는 &amp;rarr; (MAC)&lt;/li&gt;
&lt;li&gt;줄 선택 : command +&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;larr; 이후 option + command +&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; (화살표 반대로 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 건너뛰기 단축키&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글자 건너뛰기 : &amp;larr; 또는 &amp;rarr; (공통)&lt;/li&gt;
&lt;li&gt; 단어 건너뛰기 : option + &amp;larr; 또는 &amp;rarr; (MAC) / ctrl + &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;larr; 또는 &amp;rarr; (Windows)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;줄 맨 앞으로, 맨 뒤로 건너뛰기 : command + &amp;larr; 또는 &amp;rarr; (MAC) / home 또는 end (Windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 멀티커서 만들기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt; 마우스 이용 멀티커서 만들기 : option + Click (MAC) / alt + Click (Windows)&lt;/li&gt;
&lt;li&gt;방향키 이용 멀티커서 만들기 : command + option + &amp;uarr; 또는 &amp;darr; (MAC) / Windows 까먹음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;** 같은 문자 선택으로 멀티커서 만들기 :&amp;nbsp;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; 블록 지정 (1. 참고) &lt;/span&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;&amp;nbsp;후 command + D&lt;/span&gt;&lt;/b&gt;&lt;span&gt; (MAC) &lt;/span&gt;/ &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;alt + D&lt;/b&gt;&lt;/span&gt; (Windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEHoBE/btrR8Jzcev8/sQ2fXQ7fNsy1EU6h5Ylmx1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEHoBE/btrR8Jzcev8/sQ2fXQ7fNsy1EU6h5Ylmx1/img.gif&quot; data-alt=&quot;command + D / alt + D 예시 (출처: vscode docs)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEHoBE/btrR8Jzcev8/sQ2fXQ7fNsy1EU6h5Ylmx1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cEHoBE/btrR8Jzcev8/sQ2fXQ7fNsy1EU6h5Ylmx1/img.gif&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;607&quot; height=&quot;172&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;command + D / alt + D 예시 (출처: vscode docs)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티커서를 잘 활용하면, 드라마에서 종종 보던 코딩 속도에 근접(&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;u&gt;MSG 조금 뿌려서&lt;/u&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;하게 코드 수정 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 추가했으면 하는 단축키는 댓글로 알려주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;써보고 피드백 또는 추가해드립니다.&lt;/p&gt;</description>
      <category>IDE</category>
      <category>IDE</category>
      <category>vscode</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/56</guid>
      <comments>https://parodev.tistory.com/56#entry56comment</comments>
      <pubDate>Fri, 25 Nov 2022 19:48:45 +0900</pubDate>
    </item>
    <item>
      <title>협업을 위한 VSCode 확장프로그램(Extension) 추천</title>
      <link>https://parodev.tistory.com/55</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-_-tl-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZdFLL/btrR9jsZ7op/IimnKNy0nfjb0sdXa7kozk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZdFLL/btrR9jsZ7op/IimnKNy0nfjb0sdXa7kozk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZdFLL/btrR9jsZ7op/IimnKNy0nfjb0sdXa7kozk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZdFLL%2FbtrR9jsZ7op%2FIimnKNy0nfjb0sdXa7kozk%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-_-tl-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 회사에서 유료 IDE를 쓰거나 무거운 Visual Studio를 쓰는 것과 별개로 필자는 개인적으로 VSCode 이용을 추천합니다. 기본 프로그램 자체가 가벼운 측면도 있구, 필요한 툴을 확장(Extension) 프로그램만 설치해주면 되기 때문입니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;1. GitLens&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669304517987&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;GitLens &amp;mdash; Git supercharged - Visual Studio Marketplace&quot; data-og-description=&quot;Extension for Visual Studio Code - Supercharge Git within VS Code &amp;mdash; Visualize code authorship at a glance via Git blame annotations and CodeLens, seamlessly navigate and explore Git repositories, gain valuable insights via rich visualizations and powerfu&quot; data-og-host=&quot;marketplace.visualstudio.com&quot; data-og-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot; data-og-url=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bn9aGJ/hyQGjHGumX/P8GbCqrFsWo2BKK00af5O1/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128,https://scrap.kakaocdn.net/dn/bezXO1/hyQGkGBsgF/FV7hwbcfoUb9JWoV9iKkm0/img.png?width=952&amp;amp;height=300&amp;amp;face=0_0_952_300,https://scrap.kakaocdn.net/dn/bBBetG/hyQGkNlGn2/SYy3IKjkW203mN3oS57Ul1/img.png?width=600&amp;amp;height=200&amp;amp;face=0_0_600_200&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot; data-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bn9aGJ/hyQGjHGumX/P8GbCqrFsWo2BKK00af5O1/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128,https://scrap.kakaocdn.net/dn/bezXO1/hyQGkGBsgF/FV7hwbcfoUb9JWoV9iKkm0/img.png?width=952&amp;amp;height=300&amp;amp;face=0_0_952_300,https://scrap.kakaocdn.net/dn/bBBetG/hyQGkNlGn2/SYy3IKjkW203mN3oS57Ul1/img.png?width=600&amp;amp;height=200&amp;amp;face=0_0_600_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitLens &amp;mdash; Git supercharged - Visual Studio Marketplace&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Extension for Visual Studio Code - Supercharge Git within VS Code &amp;mdash; Visualize code authorship at a glance via Git blame annotations and CodeLens, seamlessly navigate and explore Git repositories, gain valuable insights via rich visualizations and powerfu&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;marketplace.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitLens는 Git이 세팅되어 있는 프로젝트에서 &lt;u&gt;줄(Line)에 커서를 올리면 언제 누가 수정했는지를 곧바로 알게&lt;/u&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l7vC6/btrR9vmhS6m/jU8RZ2trr2XWbWJ4eZgiQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l7vC6/btrR9vmhS6m/jU8RZ2trr2XWbWJ4eZgiQ1/img.png&quot; data-alt=&quot;GitLens 적용 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l7vC6/btrR9vmhS6m/jU8RZ2trr2XWbWJ4eZgiQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl7vC6%2FbtrR9vmhS6m%2FjU8RZ2trr2XWbWJ4eZgiQ1%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;720&quot; height=&quot;186&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitLens 적용 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. indent-rainbow&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&quot;&gt;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1669364257130&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;indent-rainbow - Visual Studio Marketplace&quot; data-og-description=&quot;Extension for Visual Studio Code - Makes indentation easier to read&quot; data-og-host=&quot;marketplace.visualstudio.com&quot; data-og-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&quot; data-og-url=&quot;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qAHLf/hyQHWdu8my/tzbT4lQ3gUJrn1WhRNsf0K/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128,https://scrap.kakaocdn.net/dn/cHhgam/hyQGsSDgLN/3iiBTwKY6pRTBk3Fe2ulJk/img.png?width=525&amp;amp;height=271&amp;amp;face=0_0_525_271&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qAHLf/hyQHWdu8my/tzbT4lQ3gUJrn1WhRNsf0K/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128,https://scrap.kakaocdn.net/dn/cHhgam/hyQGsSDgLN/3iiBTwKY6pRTBk3Fe2ulJk/img.png?width=525&amp;amp;height=271&amp;amp;face=0_0_525_271');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;indent-rainbow - Visual Studio Marketplace&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Extension for Visual Studio Code - Makes indentation easier to read&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;marketplace.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;indent-rainbow는 &lt;u&gt;들여쓰기의 단계마다 다른 색상으로 표현&lt;/u&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;python 과 같이 indent(들여쓰기)의 칸수가 맞지 않아서 오류가 나는 경우에는 빨간색으로 표시가 됩니다. indent-rainbow으로 들여쓰기 간격이 맞는지 일일이 체크해야하는 수고로움을 덜 수 있습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T9VE6/btrR74XU2wY/HdkPkWvIVoMtBCDmehJgY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T9VE6/btrR74XU2wY/HdkPkWvIVoMtBCDmehJgY0/img.png&quot; data-alt=&quot;indent-rainbow 사용 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T9VE6/btrR74XU2wY/HdkPkWvIVoMtBCDmehJgY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT9VE6%2FbtrR74XU2wY%2FHdkPkWvIVoMtBCDmehJgY0%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;720&quot; height=&quot;186&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;indent-rainbow 사용 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Material Icon Theme&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot;&gt;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1669364806923&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Material Icon Theme - Visual Studio Marketplace&quot; data-og-description=&quot;Extension for Visual Studio Code - Material Design Icons for Visual Studio Code&quot; data-og-host=&quot;marketplace.visualstudio.com&quot; data-og-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot; data-og-url=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rMPRz/hyQH8yeWN3/QQ8xrtMHM7OpdodgJq19t1/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rMPRz/hyQH8yeWN3/QQ8xrtMHM7OpdodgJq19t1/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Material Icon Theme - Visual Studio Marketplace&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Extension for Visual Studio Code - Material Design Icons for Visual Studio Code&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;marketplace.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Material Icon Theme는 &lt;u&gt;파일의 확장자 및 이름에 따라 폴더 및 파일의 아이콘을 보기 쉬운 아이콘으로 변경&lt;/u&gt;해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사 확장 프로그램으로 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vscode-icons&lt;/a&gt; 가 있습니다. 글 작성일 기준으로 다운로드 수가 각각 Material Icons Theme(15백만), vscode-icons(12.5백만)으로 취향 차이 정도로 생각하고 좋아하는 걸 쓰면 될 것 같습니다.&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&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/c6W6hU/btrR8JFxjlQ/TqNvXkrIOvXbnvJuFvyhK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6W6hU/btrR8JFxjlQ/TqNvXkrIOvXbnvJuFvyhK1/img.png&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;1146&quot; data-is-animation=&quot;false&quot; width=&quot;480&quot; height=&quot;500&quot; style=&quot;width: 49.4712%; margin-right: 10px;&quot; data-widthpercent=&quot;50.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6W6hU/btrR8JFxjlQ/TqNvXkrIOvXbnvJuFvyhK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6W6hU%2FbtrR8JFxjlQ%2FTqNvXkrIOvXbnvJuFvyhK1%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;1100&quot; height=&quot;1146&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EecYo/btrR702oQQM/j6v3PVnBBUFFHHanESqjgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EecYo/btrR702oQQM/j6v3PVnBBUFFHHanESqjgk/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;1138&quot; data-is-animation=&quot;false&quot; width=&quot;480&quot; height=&quot;501&quot; style=&quot;width: 49.366%;&quot; data-widthpercent=&quot;49.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EecYo/btrR702oQQM/j6v3PVnBBUFFHHanESqjgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEecYo%2FbtrR702oQQM%2Fj6v3PVnBBUFFHHanESqjgk%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;1090&quot; height=&quot;1138&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Material Icon Theme 적용 전 / 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Color Highlight&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&quot;&gt;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1669365882756&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Color Highlight - Visual Studio Marketplace&quot; data-og-description=&quot;Extension for Visual Studio Code - Highlight web colors in your editor&quot; data-og-host=&quot;marketplace.visualstudio.com&quot; data-og-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&quot; data-og-url=&quot;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tVhZK/hyQGqm0Nzl/3LqD3cebSaEwky3oziOzI0/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128&quot;&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tVhZK/hyQGqm0Nzl/3LqD3cebSaEwky3oziOzI0/img.png?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Color Highlight - Visual Studio Marketplace&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Extension for Visual Studio Code - Highlight web colors in your editor&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;marketplace.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Color Highlight 는 &lt;u&gt;입력된 색상(rgb, hex 등)을 바로 해당 텍스트에 색상으로 표시&lt;/u&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzyk4S/btrR7SQ5O7O/t6vsUBQ11iTQSvLOOjKn0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzyk4S/btrR7SQ5O7O/t6vsUBQ11iTQSvLOOjKn0k/img.png&quot; data-alt=&quot;Color Highlight 적용 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzyk4S/btrR7SQ5O7O/t6vsUBQ11iTQSvLOOjKn0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzyk4S%2FbtrR7SQ5O7O%2Ft6vsUBQ11iTQSvLOOjKn0k%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;720&quot; height=&quot;201&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Color Highlight 적용 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDE</category>
      <category>IDE</category>
      <category>vscode</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/55</guid>
      <comments>https://parodev.tistory.com/55#entry55comment</comments>
      <pubDate>Fri, 25 Nov 2022 18:11:26 +0900</pubDate>
    </item>
    <item>
      <title>맥 독(Dock) 뜨는 속도 빠르게 하는 방법</title>
      <link>https://parodev.tistory.com/54</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (4).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpphq5/btrRYtJldcC/sdE34SIq6jUvT4KaF965v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpphq5/btrRYtJldcC/sdE34SIq6jUvT4KaF965v1/img.png&quot; data-alt=&quot;맥 Dock 뜨는 속도 빠르게 하는 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpphq5/btrRYtJldcC/sdE34SIq6jUvT4KaF965v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpphq5%2FbtrRYtJldcC%2FsdE34SIq6jUvT4KaF965v1%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (4).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;맥 Dock 뜨는 속도 빠르게 하는 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MacOS를 사용하다보면 화면 아래에 숨겨진 독을 보기 위해 마우스를 화면 아래로 가져다대면 생각보다 한참 있다가 스르륵 하고 열리는 독을 볼 수 있을겁니다. 이를 답답해하는 분들이 있기에 독이 열리는 속도를 빠르게 할 수 있는 몇 가지 해결 방법을 가지고 와 봤습니다.&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;방법 1. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;단축키&lt;/span&gt;를 이용해 자동 숨김/보이기 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단축키 &lt;b&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;options + command + D&lt;/span&gt;&lt;/b&gt; 를 입력하면 화면 아래 가려져 있던 독이 올라오게 됩니다. 또 반대로 숨기는 것도 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 2. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;터미널&lt;/span&gt;을 통해 독 설정값 변경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 애니메이션 없이 바로 뜨게 하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1669212662065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;defaults write com.apple.dock autohide-time-modifier -int 0;killall Dock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 애니메이션 속도를 빠르게 하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1669212683586&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;defaults write com.apple.dock autohide-time-modifier -float 0.15;killall Dock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 원래 상태로 복구하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1669212749657&quot; class=&quot;sql&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;defaults delete com.apple.dock autohide-time-modifier;killall Dock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PC 관리/MacOS</category>
      <category>MacOS</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/54</guid>
      <comments>https://parodev.tistory.com/54#entry54comment</comments>
      <pubDate>Wed, 23 Nov 2022 23:13:00 +0900</pubDate>
    </item>
    <item>
      <title>Node.js 버전 변경하는 방법 - MAC</title>
      <link>https://parodev.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;이 포스트는 npm&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt; package 중 n 을 이용합니다.&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;Mac 에서 동작하는 방법이며, Windows Shell 또는 Git for Windows 에서는 동작하지 않습니다.&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (2).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OXUAO/btrRXnQAVRo/LS6JT9ktXmTzeWpj9TK2M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OXUAO/btrRXnQAVRo/LS6JT9ktXmTzeWpj9TK2M1/img.png&quot; data-alt=&quot;node.js 버전 변경하는 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OXUAO/btrRXnQAVRo/LS6JT9ktXmTzeWpj9TK2M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOXUAO%2FbtrRXnQAVRo%2FLS6JT9ktXmTzeWpj9TK2M1%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (2).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;node.js 버전 변경하는 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js 서버를 통해 이것저것 하다보면 버전의 영향을 많이 받을 수도 있는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;s&gt;예를 들어, serverless, node-sass, node-gyp 등의 오류를 피해 회피기동을 해야함.&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서 NodeJS 버전 변경을 필요로 하는 경우가 종종 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;오늘은 n 을 통하여 설치된 Node.js 버전을 변경하는 방법을 알아보도록 합니다.&lt;/u&gt;&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;이미 Node.js 가 설치되어 있는 경우,&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 좀 찾아보야겠으나, Homebrew를 통해 &lt;span style=&quot;background-color: #f89009;&quot;&gt;&lt;b&gt;/opt/homebrew/Cellar/node/{version}/&lt;/b&gt;&lt;/span&gt; 에 Node.js가 설치된 경우, n 과는 호환이 되지 않으므로 기존 Node를 지워줘야 합니다. 제거 방법은 아래 포스팅을 참고해주시기 바랍니다.&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;기존 Node.js 제거 후 Node.js 홈페이지를 통해 재설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/52&quot;&gt;2022.11.21 - [JavaScript] - Node.js 제거하는 방법 - MAC&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669045770368&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Node.js 제거하는 방법 - MAC&quot; data-og-description=&quot;1. Node.js 깔끔하게 지우는 방법 Node.js 홈페이지에서 받았을 때, sudo rm -rf /usr/local/lib/node sudo rm -rf /usr/local/lib/node_modules sudo rm /usr/local/lib/dtrace/node.d sudo rm /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/&quot; data-og-host=&quot;parodev.tistory.com&quot; data-og-source-url=&quot;https://parodev.tistory.com/52&quot; data-og-url=&quot;https://parodev.tistory.com/52&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AaiO3/hyQDxGGrQ5/H1CK9XFZvgL7bOPjOL78g1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/zH2Bm/hyQE0gdxve/cAJKBbkZtPbGfbmqPceNm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biEZuD/hyQDvhOfI7/bKYor5Kv8wRyb7kKvvEqmk/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/52&quot; data-source-url=&quot;https://parodev.tistory.com/52&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AaiO3/hyQDxGGrQ5/H1CK9XFZvgL7bOPjOL78g1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/zH2Bm/hyQE0gdxve/cAJKBbkZtPbGfbmqPceNm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biEZuD/hyQDvhOfI7/bKYor5Kv8wRyb7kKvvEqmk/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Node.js 제거하는 방법 - MAC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Node.js 깔끔하게 지우는 방법 Node.js 홈페이지에서 받았을 때, sudo rm -rf /usr/local/lib/node sudo rm -rf /usr/local/lib/node_modules sudo rm /usr/local/lib/dtrace/node.d sudo rm /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parodev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020.08.08 - [JavaScript] - Node.js 및 NPM 설치하는 방법&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669208610747&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Node.js 및 NPM 설치하는 방법&quot; data-og-description=&quot;Node.js 웹사이트 접속 Download URL : nodejs.org LTS 버전 : Long Term Support 의 약자 최신 버전보다는 안정화 버전으로 받는 것을 추천 12.18.3 LTS 버전 다운로드 특이한 점이 없으면 Next 클릭클릭 일부 NPM 모&quot; data-og-host=&quot;parodev.tistory.com&quot; data-og-source-url=&quot;https://parodev.tistory.com/38&quot; data-og-url=&quot;https://parodev.tistory.com/38&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cfC8vJ/hyQE8fMQuP/AkqXxbytcQHNPNDEEOSSa1/img.png?width=800&amp;amp;height=525&amp;amp;face=0_0_800_525,https://scrap.kakaocdn.net/dn/qc6YW/hyQE20V7be/KgauRDCx2Aw6mcUtelxbgK/img.png?width=800&amp;amp;height=525&amp;amp;face=0_0_800_525,https://scrap.kakaocdn.net/dn/PIybq/hyQGj03xra/KNX9lh0k7yrdY8mjU3Gz6K/img.png?width=935&amp;amp;height=614&amp;amp;face=0_0_935_614&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parodev.tistory.com/38&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cfC8vJ/hyQE8fMQuP/AkqXxbytcQHNPNDEEOSSa1/img.png?width=800&amp;amp;height=525&amp;amp;face=0_0_800_525,https://scrap.kakaocdn.net/dn/qc6YW/hyQE20V7be/KgauRDCx2Aw6mcUtelxbgK/img.png?width=800&amp;amp;height=525&amp;amp;face=0_0_800_525,https://scrap.kakaocdn.net/dn/PIybq/hyQGj03xra/KNX9lh0k7yrdY8mjU3Gz6K/img.png?width=935&amp;amp;height=614&amp;amp;face=0_0_935_614');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Node.js 및 NPM 설치하는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js 웹사이트 접속 Download URL : nodejs.org LTS 버전 : Long Term Support 의 약자 최신 버전보다는 안정화 버전으로 받는 것을 추천 12.18.3 LTS 버전 다운로드 특이한 점이 없으면 Next 클릭클릭 일부 NPM 모&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parodev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Node.js 버전 변경하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. npm 을 통해 n 을 전역에 설치해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1669208717979&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo npm install -g n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 현재 설치된 Node.js 버전 확인 ( 명령어: &lt;b&gt;sudo n ls &lt;/b&gt;)&lt;/p&gt;
&lt;pre id=&quot;code_1669211054070&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo n ls&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. 추가로 필요한 Node.js 버전 설치 ( 명령어: &lt;b&gt;sudo n install {버전}&lt;/b&gt; )&lt;/p&gt;
&lt;pre id=&quot;code_1669209710511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo n install 14 # 14버전 중 가장 최신버전
sudo n install 16 # 16버전 중 가장 최신버전&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6baFz/btrRXajFOlS/Xh74iBgfV83iAx1JYnOpG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6baFz/btrRXajFOlS/Xh74iBgfV83iAx1JYnOpG1/img.png&quot; data-alt=&quot;1~3 과정 요약&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6baFz/btrRXajFOlS/Xh74iBgfV83iAx1JYnOpG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6baFz%2FbtrRXajFOlS%2FXh74iBgfV83iAx1JYnOpG1%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;720&quot; height=&quot;504&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1~3 과정 요약&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 활성화시킬 Node.js 버전 변경 ( 명령어: &lt;b&gt;sudo n &amp;rarr; 엔터&lt;/b&gt;&amp;nbsp;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OLghL/btrRY5OZ6aR/QdXRWzOm2pShW0gdRvBnWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OLghL/btrRY5OZ6aR/QdXRWzOm2pShW0gdRvBnWK/img.png&quot; data-alt=&quot;sudo n&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OLghL/btrRY5OZ6aR/QdXRWzOm2pShW0gdRvBnWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOLghL%2FbtrRY5OZ6aR%2FQdXRWzOm2pShW0gdRvBnWK%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;720&quot; height=&quot;172&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sudo n&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드의 화살표를 움직여 활성화시킬 Node.js 버전을 선택해줍니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 명령어 앞에 sudo 를 붙이는 이유는 Node.js 를 관리하는 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;/usr/local/&lt;/span&gt; 경로에 접근하고 파일을 설치, 수정, 삭제하기 위해서입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sudo n&lt;/span&gt;&lt;/b&gt; : 활성화시킬 Node.js 버전 변경&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sudo n ls&lt;/span&gt;&lt;/b&gt; : 현재 설치된 Node.js 버전 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sudo n install {버전}&lt;/span&gt;&lt;/b&gt; : 특정 버전의 Node.js 설치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sudo n rm {버전}&lt;/span&gt;&lt;/b&gt; : 특정 버전의 Node.js 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금한 명령어는 n --help 를 통해 확인할 수 있습니다.&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>javascript</category>
      <category>node.js</category>
      <category>NPM</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/53</guid>
      <comments>https://parodev.tistory.com/53#entry53comment</comments>
      <pubDate>Wed, 23 Nov 2022 22:39:20 +0900</pubDate>
    </item>
    <item>
      <title>Node.js, NPM 제거하는 방법 - MAC</title>
      <link>https://parodev.tistory.com/52</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (3).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbcIjG/btrRY3Rb5ok/tN8b9CV3YjMmTDDB91CjI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbcIjG/btrRY3Rb5ok/tN8b9CV3YjMmTDDB91CjI1/img.png&quot; data-alt=&quot;node.js 제거하는 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbcIjG/btrRY3Rb5ok/tN8b9CV3YjMmTDDB91CjI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbcIjG%2FbtrRY3Rb5ok%2FtN8b9CV3YjMmTDDB91CjI1%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (3).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;node.js 제거하는 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Node.js 깔끔하게 지우는 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;https://nodejs.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Node.js&lt;/a&gt; 홈페이지에서 받았을 때,&lt;/h3&gt;
&lt;pre id=&quot;code_1669019640563&quot; class=&quot;crystal&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rm -rf /usr/local/lib/node
sudo rm -rf /usr/local/lib/node_modules
sudo rm /usr/local/lib/dtrace/node.d
sudo rm /usr/local/share/man/man1/node.1
sudo rm -rf /usr/local/share/doc/node
sudo rm -rf /usr/local/share/systemtap/tapset/node.stp
sudo rm -rf /usr/local/include/node
sudo rm /usr/local/bin/node
sudo rm /usr/local/bin/npm
sudo rm /usr/local/bin/npx&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Homebrew 에서 받았을 때,&lt;/h3&gt;
&lt;pre id=&quot;code_1669019832484&quot; class=&quot;crmsh&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew uninstall node
brew doctor
brew cleanup&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치된 NPM 캐시, 환경파일까지 제거하려면,&lt;/h3&gt;
&lt;pre id=&quot;code_1669019683377&quot; class=&quot;coffeescript&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo rm -rf /Users/$USER/.npm
sudo rm -rf ~/.npm&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Node.js 설치 및 제거 여부 확인 방법&lt;/h2&gt;
&lt;pre id=&quot;code_1669020185223&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// node 버전 확인
node -v		//버전표기(x.x.x)가 나오면 설치된 상태
        	//command not found: node 가 나오면 제거된 상태
            
// npm 버전 확인
npm -v		//버전표기(x.x.x)가 나오면 설치된 상태
        	//No such file or directory 가 나오면 제거된 상태&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>javascript</category>
      <category>node.js</category>
      <category>NPM</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/52</guid>
      <comments>https://parodev.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 21 Nov 2022 22:00:07 +0900</pubDate>
    </item>
    <item>
      <title>맥 화면캡처 시, 창 그림자 제거 방법</title>
      <link>https://parodev.tistory.com/51</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfZTOt/btrRzj9L9Yi/RBODhDQHnrNAT4IfkLEhOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfZTOt/btrRzj9L9Yi/RBODhDQHnrNAT4IfkLEhOK/img.png&quot; data-alt=&quot;화면캡처 그림자 제거 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfZTOt/btrRzj9L9Yi/RBODhDQHnrNAT4IfkLEhOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfZTOt%2FbtrRzj9L9Yi%2FRBODhDQHnrNAT4IfkLEhOK%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&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;MacOS 내에서 창 캡쳐를 하면서 생겼던 그림자가 포함되어 찍히는 문제를 해결하는 방법을 알아보도록 하겠습니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 맥에서 창 캡처(스크린샷)를 하는 방법은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ef6f53;&quot;&gt;&lt;b&gt;Shift + Command + 4&lt;/b&gt;&lt;/span&gt; 키를 누릅니다. 이 상태에서 &lt;span style=&quot;background-color: #ef6f53;&quot;&gt;&lt;b&gt;Space bar&lt;/b&gt;&lt;/span&gt; 를 누르면 마우스가 카메라 모양으로 바뀝니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 원하는 창에 올려두고 &lt;span style=&quot;background-color: #ef6f53;&quot;&gt;&lt;b&gt;Enter&amp;nbsp;&lt;/b&gt;&lt;/span&gt;를 누르면 창이 캡처가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그림자 유무 차이 비교&lt;/h2&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/1UYLV/btrRAMXnouo/u108qjgB57RXbbpKjYWoGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1UYLV/btrRAMXnouo/u108qjgB57RXbbpKjYWoGk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;1470&quot; data-filename=&quot;스크린샷 2022-11-19 오후 4.52.09.png&quot; style=&quot;width: 48.6973%; margin-right: 10px;&quot; data-widthpercent=&quot;49.27&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1UYLV/btrRAMXnouo/u108qjgB57RXbbpKjYWoGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1UYLV%2FbtrRAMXnouo%2Fu108qjgB57RXbbpKjYWoGk%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;1760&quot; height=&quot;1470&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tKZpH/btrRDUGSTI4/DaHxSVa4HGvrOqOxSyCkR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tKZpH/btrRDUGSTI4/DaHxSVa4HGvrOqOxSyCkR1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1246&quot; data-filename=&quot;스크린샷 2022-11-19 오후 4.50.34.png&quot; style=&quot;width: 50.1399%;&quot; data-widthpercent=&quot;50.73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tKZpH/btrRDUGSTI4/DaHxSVa4HGvrOqOxSyCkR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtKZpH%2FbtrRDUGSTI4%2FDaHxSVa4HGvrOqOxSyCkR1%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;1536&quot; height=&quot;1246&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;그림자 있을 때(좌), 그림자 없을 때(우) 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 캡처본은 별도의 설정없이 창 캡처를 했을 때의 결과물입니다. 이 경우, 창 밖의 그림자 부분까지 포함하여 캡처가 됩니다. 반대로 오른쪽 캡처본은 그림자 제거 설정을 하였기에, 창 밖의 그림자를 제외하고 창 부분만 깔끔하게 캡처가 된 모습입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;창 캡처 시, 배경은 투명 처리된 상태입니다.&lt;/i&gt;&lt;/span&gt;&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;/h2&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그림자 제거 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그림자 제거 활성화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'터미널' 앱을 열고 아래 명령어를 순서대로 실행해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 실행해면 아무 메세지 나오지 않지만 적용이 된 상태입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1668844731080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;defaults write com.apple.screencapture disable-shadow -bool true
killall SystemUIServer&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그림자 제거 비활성화 (원상복구)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 명령어를 실행했던 것처럼 '터미널' 앱을 열고 아래 명령어를 순서대로 실행해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1668844751472&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;defaults write com.apple.screencapture disable-shadow -bool false
killall SystemUIServer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PC 관리/MacOS</category>
      <category>MacOS</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/51</guid>
      <comments>https://parodev.tistory.com/51#entry51comment</comments>
      <pubDate>Sat, 19 Nov 2022 17:03:47 +0900</pubDate>
    </item>
    <item>
      <title>맥 자동실행 항목 설정 방법</title>
      <link>https://parodev.tistory.com/50</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;auto.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PObNg/btrRyVVs5lG/rV6Cxghqhka68HohepOGaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PObNg/btrRyVVs5lG/rV6Cxghqhka68HohepOGaK/img.png&quot; data-alt=&quot;맥 자동실행 항목 설정 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PObNg/btrRyVVs5lG/rV6Cxghqhka68HohepOGaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPObNg%2FbtrRyVVs5lG%2FrV6Cxghqhka68HohepOGaK%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;720&quot; height=&quot;720&quot; data-filename=&quot;auto.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;맥 자동실행 항목 설정 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;MacOS 부팅 시, 사용자의 기호에 따라 자동 실행이 필요한 앱들이 있습니다.&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;i&gt;AlDente(배터리 관리 프로그램),&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Rectangle(화면 분할 단축키 설정), &lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Karabiner(키보드 설정),&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;카카오톡(?)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 잘 만들어진 앱들은 앱 내부 설정으로 대부분 자동으로 등록되는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그렇지 않은 앱들도 종종 있는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 제가 사용중인 &lt;i&gt;TermHere(파인더 현재 경로에서 터미널 열기)&lt;/i&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;로그인 항목 설정하는 방법&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.13.57.png&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buUVB9/btrRDZVCctv/x6vfIn5KA4kQfTyrkCzcPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buUVB9/btrRDZVCctv/x6vfIn5KA4kQfTyrkCzcPK/img.png&quot; data-alt=&quot;Spotlight 검색 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buUVB9/btrRDZVCctv/x6vfIn5KA4kQfTyrkCzcPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuUVB9%2FbtrRDZVCctv%2Fx6vfIn5KA4kQfTyrkCzcPK%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;720&quot; height=&quot;55&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.13.57.png&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Spotlight 검색 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Command + Space bar&lt;/b&gt; 또는 &lt;b&gt;우상단 검색 아이콘&lt;/b&gt;을 눌르고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spotlight 검색을 열어 '&lt;b&gt;시스템 설정&lt;/b&gt;'을 입력하고 들어가줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.14.54.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bThHfO/btrRzgSC8pU/r7lAYQJ6uuu7YIdTRtjK4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bThHfO/btrRzgSC8pU/r7lAYQJ6uuu7YIdTRtjK4K/img.png&quot; data-alt=&quot;시스템 설정 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bThHfO/btrRzgSC8pU/r7lAYQJ6uuu7YIdTRtjK4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbThHfO%2FbtrRzgSC8pU%2Fr7lAYQJ6uuu7YIdTRtjK4K%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;720&quot; height=&quot;629&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.14.54.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시스템 설정 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 시스템 설정 창이 뜬 후,&lt;/p&gt;
&lt;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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;- Spotlight 검색에서 '로그인 항목' 검색해도 바로 들어가지네요.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.17.05.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/msuuI/btrRBIGPFeg/zenI63VVKRdhHj7uP9BUB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/msuuI/btrRBIGPFeg/zenI63VVKRdhHj7uP9BUB1/img.png&quot; data-alt=&quot;로그인 항목 설정 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/msuuI/btrRBIGPFeg/zenI63VVKRdhHj7uP9BUB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmsuuI%2FbtrRBIGPFeg%2FzenI63VVKRdhHj7uP9BUB1%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;720&quot; height=&quot;629&quot; data-filename=&quot;스크린샷 2022-11-19 오후 2.17.05.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;1250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 항목 설정 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 시 열기 항목에서 + 또는 - 버튼을 통해 응용 프로그램을 추가 또는 제거할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이 포스트는 MacOS Ventura(벤투라) 13.0.1 버전에서 작성되었습니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>PC 관리/MacOS</category>
      <category>MacOS</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/50</guid>
      <comments>https://parodev.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 19 Nov 2022 14:11:29 +0900</pubDate>
    </item>
    <item>
      <title>NPM 사용하지 않는 모듈 일괄 제거하는 방법 (depcheck)</title>
      <link>https://parodev.tistory.com/49</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (5).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdrvc5/btrR8s6gk2n/QpZNJ2bfRjCQQL1KKQ2VWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdrvc5/btrR8s6gk2n/QpZNJ2bfRjCQQL1KKQ2VWK/img.png&quot; data-alt=&quot;사용하지 않는 npm 모듈 제거 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdrvc5/btrR8s6gk2n/QpZNJ2bfRjCQQL1KKQ2VWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdrvc5%2FbtrR8s6gk2n%2FQpZNJ2bfRjCQQL1KKQ2VWK%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (5).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용하지 않는 npm 모듈 제거 방법&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;프로젝트를 장기간 진행하다보면, node module 을 설치하고 지우고를 반복하는 경우가 생깁니다. require 나 import 를 통해 node module 사용 부분은 지우기 편하지만, 설치 당시에 추가된 package.json 내부의 dependencies와 devDependencies 에서는 지우지 못해 남는 경우가 종종 생기곤 합니다. depcheck를 이용하면 미사용상태로 dependencies와 devDependencies 에 적혀있는 node module을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주의사항으로 lint, prettier 등 runtime 코드에서 호출되지 않고 개발을 위해서만 사용되는 module도 사용되지 않는 모듈에 포함될 수 있으니 숙련되기 전까지는 모르는 모듈 제거는 삼가하는 것을 추천합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&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;/h2&gt;
&lt;pre id=&quot;code_1662647431774&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g depcheck
depcheck&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_1662647447269&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx depcheck&lt;/code&gt;&lt;/pre&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/depcheck/depcheck&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/depcheck/depcheck&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1662647540434&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - depcheck/depcheck: Check your npm module for unused dependencies&quot; data-og-description=&quot;Check your npm module for unused dependencies. Contribute to depcheck/depcheck development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/depcheck/depcheck&quot; data-og-url=&quot;https://github.com/depcheck/depcheck&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BerTN/hyPILexatd/H9hXkFN1juTs90D1ILIoWK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/depcheck/depcheck&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/depcheck/depcheck&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BerTN/hyPILexatd/H9hXkFN1juTs90D1ILIoWK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - depcheck/depcheck: Check your npm module for unused dependencies&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Check your npm module for unused dependencies. Contribute to depcheck/depcheck development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;관련 포스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://parodev.tistory.com/48&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1662647712467&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;package.json 정리! 순서 정렬하는 방법 (sork-package-json)&quot; data-og-description=&quot;정리만 잘해도 코드의 품질은 올라갑니다. package.json 의 dependencies 나 devDependencies 가 알파벳 순서대로 정리하고 싶을 때, package.json의 키 순서가 섞여있어서 license 등 특정 키를 찾기 어려워 할..&quot; data-og-host=&quot;parodev.tistory.com&quot; data-og-source-url=&quot;https://parodev.tistory.com/48&quot; data-og-url=&quot;https://parodev.tistory.com/48&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b11X2R/hyPIH4gZuf/cLDVlPTNgVp0oXfa0OlYz1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYXsiJ/hyPJ0VsbT7/b04Bq6oSYGK8jY3WJpG2jK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/beEBtx/hyPJTPyxOd/Hk2KdYOUXIVt9dGRSwAFUk/img.png?width=775&amp;amp;height=312&amp;amp;face=0_0_775_312&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parodev.tistory.com/48&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b11X2R/hyPIH4gZuf/cLDVlPTNgVp0oXfa0OlYz1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYXsiJ/hyPJ0VsbT7/b04Bq6oSYGK8jY3WJpG2jK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/beEBtx/hyPJTPyxOd/Hk2KdYOUXIVt9dGRSwAFUk/img.png?width=775&amp;amp;height=312&amp;amp;face=0_0_775_312');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;package.json 정리! 순서 정렬하는 방법 (sork-package-json)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정리만 잘해도 코드의 품질은 올라갑니다. package.json 의 dependencies 나 devDependencies 가 알파벳 순서대로 정리하고 싶을 때, package.json의 키 순서가 섞여있어서 license 등 특정 키를 찾기 어려워 할..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parodev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>javascript</category>
      <category>NPM</category>
      <category>package.json</category>
      <category>클린코드</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/49</guid>
      <comments>https://parodev.tistory.com/49#entry49comment</comments>
      <pubDate>Thu, 8 Sep 2022 23:35:40 +0900</pubDate>
    </item>
    <item>
      <title>NPM package.json 순서 정렬하는 방법 (sort-package-json)</title>
      <link>https://parodev.tistory.com/48</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;parodev-blog-001 (6).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JwGAZ/btrR9XcNhhB/59RFZJT1i10DLJ4NvPups1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JwGAZ/btrR9XcNhhB/59RFZJT1i10DLJ4NvPups1/img.png&quot; data-alt=&quot;package.json 순서 정렬 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JwGAZ/btrR9XcNhhB/59RFZJT1i10DLJ4NvPups1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJwGAZ%2FbtrR9XcNhhB%2F59RFZJT1i10DLJ4NvPups1%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;720&quot; height=&quot;720&quot; data-filename=&quot;parodev-blog-001 (6).png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;package.json 순서 정렬 방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리만 잘해도 코드의 품질은 올라갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;package.json 의 dependencies 나 devDependencies 가 알파벳 순서대로 정리하고 싶을 때, package.json의 키 순서가 섞여있어서 license 등 특정 키를 찾기 어려워 할 때 터미널에서 &lt;b&gt;npx sort-package-json&lt;/b&gt;만 입력해주면 해당 디렉토리 내 package.json 내용이 정리가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용방법&lt;/h2&gt;
&lt;pre id=&quot;code_1662643742370&quot; class=&quot;gradle&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx sort-package-json&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;package.json 파일이 존재하는 폴더에서 터미널을 열고 위 명령어를 실행합니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/keithamus/sort-package-json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/keithamus/sort-package-json&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1662643729545&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - keithamus/sort-package-json: Sort an Object or package.json based on the well-known package.json keys&quot; data-og-description=&quot;Sort an Object or package.json based on the well-known package.json keys - GitHub - keithamus/sort-package-json: Sort an Object or package.json based on the well-known package.json keys&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/keithamus/sort-package-json&quot; data-og-url=&quot;https://github.com/keithamus/sort-package-json&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzWKxb/hyPIIWpkuL/Q1VUV6ExXjHQKqRttrLvp0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/keithamus/sort-package-json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/keithamus/sort-package-json&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzWKxb/hyPIIWpkuL/Q1VUV6ExXjHQKqRttrLvp0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - keithamus/sort-package-json: Sort an Object or package.json based on the well-known package.json keys&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sort an Object or package.json based on the well-known package.json keys - GitHub - keithamus/sort-package-json: Sort an Object or package.json based on the well-known package.json keys&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;관련 포스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://parodev.tistory.com/48&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1662647784977&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;package.json 정리! 순서 정렬하는 방법 (sork-package-json)&quot; data-og-description=&quot;정리만 잘해도 코드의 품질은 올라갑니다. package.json 의 dependencies 나 devDependencies 가 알파벳 순서대로 정리하고 싶을 때, package.json의 키 순서가 섞여있어서 license 등 특정 키를 찾기 어려워 할..&quot; data-og-host=&quot;parodev.tistory.com&quot; data-og-source-url=&quot;https://parodev.tistory.com/48&quot; data-og-url=&quot;https://parodev.tistory.com/48&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b11X2R/hyPIH4gZuf/cLDVlPTNgVp0oXfa0OlYz1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYXsiJ/hyPJ0VsbT7/b04Bq6oSYGK8jY3WJpG2jK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/beEBtx/hyPJTPyxOd/Hk2KdYOUXIVt9dGRSwAFUk/img.png?width=775&amp;amp;height=312&amp;amp;face=0_0_775_312&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parodev.tistory.com/48&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b11X2R/hyPIH4gZuf/cLDVlPTNgVp0oXfa0OlYz1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYXsiJ/hyPJ0VsbT7/b04Bq6oSYGK8jY3WJpG2jK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/beEBtx/hyPJTPyxOd/Hk2KdYOUXIVt9dGRSwAFUk/img.png?width=775&amp;amp;height=312&amp;amp;face=0_0_775_312');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;package.json 정리! 순서 정렬하는 방법 (sork-package-json)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정리만 잘해도 코드의 품질은 올라갑니다. package.json 의 dependencies 나 devDependencies 가 알파벳 순서대로 정리하고 싶을 때, package.json의 키 순서가 섞여있어서 license 등 특정 키를 찾기 어려워 할..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parodev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>javascript</category>
      <category>NPM</category>
      <category>package.json</category>
      <category>클린코드</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/48</guid>
      <comments>https://parodev.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 8 Sep 2022 22:31:01 +0900</pubDate>
    </item>
    <item>
      <title>VSCode 터미널 관리자 권한으로 열기</title>
      <link>https://parodev.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;VScode 내 Terminal을 이용하다가 권한이 부족하여 &lt;b&gt;'ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다'&lt;/b&gt; 와 같은 에러가 뜨는 경우가 종종 발생합니다. 이 경우, VSCode 를 관리자 모드로 열면 해결이 됩니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'시작' - 'Visual Studio Code' 검색 후 오른쪽 클릭 후 '관리자 권한으로 실행'을 클릭하여 VSCode 를 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csegK1/btrKU77pDrB/JPTyJKpOUzx3kaDNfrywI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csegK1/btrKU77pDrB/JPTyJKpOUzx3kaDNfrywI1/img.png&quot; data-alt=&quot;VSCode 관리자 권한으로 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csegK1/btrKU77pDrB/JPTyJKpOUzx3kaDNfrywI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsegK1%2FbtrKU77pDrB%2FJPTyJKpOUzx3kaDNfrywI1%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;775&quot; height=&quot;312&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VSCode 관리자 권한으로 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;관리자 모드로 열기 (열때마다)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode를 관리자 모드로 매번 실행하기 위해서는 VSCode 실행 파일의 속성을 수정해야합니다. 실행파일은 위 오른쪽 클릭 메뉴에서 '관리자 권한으로 실행' 밑의 &lt;b&gt;'파일 위치 열기'&lt;/b&gt;를 클릭하면 VSCode 파일 위치가 있는 탐색기가 실행됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.PNG&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BAwGx/btrKTPmdB4u/MgUjM4Y3OHk64WEZcbRC2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BAwGx/btrKTPmdB4u/MgUjM4Y3OHk64WEZcbRC2K/img.png&quot; data-alt=&quot;VSCode 파일 위치 열기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BAwGx/btrKTPmdB4u/MgUjM4Y3OHk64WEZcbRC2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBAwGx%2FbtrKTPmdB4u%2FMgUjM4Y3OHk64WEZcbRC2K%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;773&quot; height=&quot;310&quot; data-filename=&quot;2.PNG&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VSCode 파일 위치 열기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Visual Studio Code 실행 파일을 오른쪽 클릭 후, '속성'을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bluwys/btrKUtCSqiL/RbnZwX64N2oOMDxhJEeJr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bluwys/btrKUtCSqiL/RbnZwX64N2oOMDxhJEeJr0/img.png&quot; data-alt=&quot;VSCode 속성 열기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bluwys/btrKUtCSqiL/RbnZwX64N2oOMDxhJEeJr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbluwys%2FbtrKUtCSqiL%2FRbnZwX64N2oOMDxhJEeJr0%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;979&quot; height=&quot;795&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VSCode 속성 열기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 '호환성' 탭에서 아래 '관리자 권한으로 이 프로그램 실행' 에 체크표시한 후 적용을 눌러주면 이후 VSCode 실행 시 관리자 권한으로 실행되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.PNG&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdbRNY/btrKQRLAWFU/rKH8wekaMwrDpQpinrmJm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdbRNY/btrKQRLAWFU/rKH8wekaMwrDpQpinrmJm0/img.png&quot; data-alt=&quot;VSCode 관리자 권한으로 이 프로그램 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdbRNY/btrKQRLAWFU/rKH8wekaMwrDpQpinrmJm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdbRNY%2FbtrKQRLAWFU%2FrKH8wekaMwrDpQpinrmJm0%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;421&quot; height=&quot;598&quot; data-filename=&quot;4.PNG&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VSCode 관리자 권한으로 이 프로그램 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDE</category>
      <category>IDE</category>
      <category>Terminal</category>
      <category>vscode</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/47</guid>
      <comments>https://parodev.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 30 Aug 2022 00:25:15 +0900</pubDate>
    </item>
    <item>
      <title>Git 기본 명령어 모음 (기초)</title>
      <link>https://parodev.tistory.com/46</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2022-08-18 01;06;43.PNG&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rB53R/btrJZI1pQZ9/4alGBVsn2ZPlNbRZvRHTc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rB53R/btrJZI1pQZ9/4alGBVsn2ZPlNbRZvRHTc1/img.png&quot; data-alt=&quot;Git 기본 명령어 모음 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rB53R/btrJZI1pQZ9/4alGBVsn2ZPlNbRZvRHTc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrB53R%2FbtrJZI1pQZ9%2F4alGBVsn2ZPlNbRZvRHTc1%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;257&quot; height=&quot;257&quot; data-filename=&quot;2022-08-18 01;06;43.PNG&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Git 기본 명령어 모음 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기초 영역 (only. Local Repository)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git init ${폴더명}&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 디렉토리를 Local Repository 로 지정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;${폴더명} 은 작성하지 않으면 . 으로 인식하여, 현재 디렉토리를 Local Repository 로 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;${폴더명} 작성 시, 현재 디렉토리 내 ${폴더명} 디렉토리를 생성하며 해당 디렉토리를 Local Repository 로 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Local Repository 로 인식된 디렉토리는 .git 숨김 폴더가 생성됩니다. 또한, 일반적으로 master 브랜치가 생성됩니다.&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;Tip1. &lt;code&gt;git init&lt;/code&gt; = &lt;code&gt;git init .&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tip2. .git 폴더가 안 보일 때, Mac의 경우 Terminal 에서 &lt;code&gt;ls -al&lt;/code&gt; 로 확인, Windows의 경우 cmd 에서 &lt;code&gt;dir /a&lt;/code&gt; 로 확인합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git status&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 상태를 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 상태는 이전 포스트인 '&lt;a href=&quot;https://parodev.tistory.com/45?category=1029281#Git%--Status%---%ED%-C%-C%EC%-D%BC%--%EC%--%--%ED%--%-C-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Git 이란? Git 사용방법 알아보기 (기초)&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;해당 명령어 실행 시, 터미널 아래부분부터 Untracked Files, Changes not staged for commit, Changes to be committed가 존재합니다. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Untracked Files&lt;/u&gt; 에는 &lt;b&gt;Untracked - New Files 상태&lt;/b&gt;, 즉 새로 생성된 파일들이 존재합니다. &lt;br /&gt;&lt;u&gt;Changes not staged for commit&lt;/u&gt; 에는 &lt;b&gt;Tracked - Modified 상태&lt;/b&gt;, 즉 이전에 commit 되었던 파일 중 현재 작업 디렉토리에서 modified, deleted 된 파일들이 존재합니다. &lt;br /&gt;&lt;u&gt;Changes to be committed&lt;/u&gt; 에는 &lt;b&gt;Tracked - Staged 상태&lt;/b&gt;, 즉 &lt;code&gt;git add ${파일명 또는 폴더명}&lt;/code&gt; 또는 &lt;code&gt;git rm ${파일명 또는 폴더명}&lt;/code&gt; 명령어로 실행된 파일들이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;code&gt;git commit&lt;/code&gt; 명령어가 작동한 이후에는 Tracked - Staged 상태의 파일들이 작업 내역으로 반영되어 &lt;code&gt;git status&lt;/code&gt; 에서는 보이지 않는 &lt;b&gt;Tracked - Unmodified 상태&lt;/b&gt;가 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git add ${파일/폴더명}&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;git status&lt;/code&gt; 명령어를 통해 확인한 파일 중 Untracked, Tracked - Modified 상태의 파일을 Tracked - Staged 상태로 변경하는 명령어 입니다.&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;Tip1. &lt;code&gt;git add .&lt;/code&gt; 실행 시 현재 폴더 내 Untracked, Tracked - Modified Files 를 Tracked - Staged 로 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tip2. &lt;code&gt;git add&lt;/code&gt; 의 반대는 &lt;code&gt;git reset&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tip3. &lt;code&gt;git rm&lt;/code&gt; 은 &lt;code&gt;git add&lt;/code&gt;의 반대가 아닌 Tracked - Unmodified 상태인 파일을 '제거'된 형태로 Tracked - Staged 상태로 변경합니다. (해당 파일 제거를 Commit 에 반영할 것임을 예고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git diff ${파일/폴더명}&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Local Repository 내에서 동일한 파일의 변경 전 내용과 변경 후 내용을 비교하여 보여줍니다. &lt;br /&gt;&lt;br /&gt;저는 개인적으로 &lt;code&gt;git diff&lt;/code&gt; 명령어는 터미널에서 보기 힘들어 SourceTree, GitHub For Desktop, GitKraken 등 GUI 프로그램을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Tip1. &lt;code&gt;git diff&lt;/code&gt; 만 실행 시, 변경 점이 존재하는 모든 파일을 부분적으로 비교하여 보여줍니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git commit -m &quot;${커밋메세지}&quot;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tracked - Staged 상태의 파일들을 commit 에 반영합니다. &lt;br /&gt;&lt;br /&gt;이 때 commit 은 고유 해시 아이디를 지니게 되며, 앞에서 5~7자리 정도만 가지고 커밋을 추적할 때 많이 사용합니다. &lt;br /&gt;-m 옵션은 보통 제목 줄을 적을 때 사용하며, &lt;code&gt;git commit&lt;/code&gt; 명령어만 입력하면 Text Editor 가 실행이 됩니다. &lt;br /&gt;&lt;br /&gt;Editor 내에서 commit message 를 작성하여 저장 후 끝내기를 하면 입력된 commit messege 와 함께 commit이 실행됩니다. 커밋 메세지를 적는 방법은 다양하지만 대표적으로 깔끔하게 커밋 메세지를 작성하는 방법은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 첫번째 줄은 이슈번호 및 현상에 대해 간략히 설명함 &lt;br /&gt;2. 두번째 줄은 공백으로 남길 것!! &lt;br /&gt;3. 세번째 줄 이후는 - 로 시작하여 상세 설명을 기입함&lt;/p&gt;
&lt;pre id=&quot;code_1660750408763&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex.
EX-02 오탈자를 수정한다

- stagg 를 stage 로 변경
- 이걸 틀리다니
- 허허&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;이상 Local Repository 에서 사용하는 주요 git 명령어 모음이었습니다.&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;추가로! git commit 이 실행된 커밋을 제거하고 과거로 돌아가는 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;git reset HEAD^&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어는 git commit 이 실행된 이후에 commit을 제거하고 과거 지점으로 돌아갈 때 사용하는 방법입니다. &lt;br /&gt;Repository 에서는 &lt;b&gt;각 브랜치의 마지막 커밋인 HEAD &lt;/b&gt;라는 친구가 있습니다. 일반적으로 &lt;code&gt;git reset&lt;/code&gt;은 &lt;code&gt;git add&lt;/code&gt;로 Staged 상태로 들어간 내용은 Untracked 또는 Modified 상태로 바꿔줌을 의미했지만, 이미 생성된 커밋의 경우 &lt;code&gt;git reset HEAD^&lt;/code&gt; 를 통해서 해당 커밋을 지우고 Untracked 또는 Modified 상태로 변경할 수 있습니다. 같은 명령어로 &lt;code&gt;git reset HEAD~&lt;/code&gt; 를 사용할 수 있는데 ~ 뒤에 숫자를 붙임으로써 생성된 commit 여러 개를 시간 역순으로 동시에 지우고 Untracked 또는 Modified 상태로 나타낼 수 있습니다.&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;Ex. &lt;code&gt;git reset HEAD~4&lt;/code&gt; (HEAD 에서부터 4번째 커밋으로 돌아감)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;P.S. 아직 git push는 얘기도 안 했다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;P.S. &lt;code&gt;git commit&lt;/code&gt; 하고서 &lt;code&gt;git reset HEAD^&lt;/code&gt;실행하고 커밋 사라졌다고 울지 말기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git</category>
      <category>GIT</category>
      <category>명령어</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/46</guid>
      <comments>https://parodev.tistory.com/46#entry46comment</comments>
      <pubDate>Thu, 18 Aug 2022 01:10:12 +0900</pubDate>
    </item>
    <item>
      <title>Git이란? Git 사용방법 알아보기 (기초)</title>
      <link>https://parodev.tistory.com/45</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2022-08-17 01;28;42.PNG&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9pJvc/btrJRxfyDqW/LcpY6Ybnr8K88XeAZE2S70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9pJvc/btrJRxfyDqW/LcpY6Ybnr8K88XeAZE2S70/img.png&quot; data-alt=&quot;Git 알아보기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9pJvc/btrJRxfyDqW/LcpY6Ybnr8K88XeAZE2S70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9pJvc%2FbtrJRxfyDqW%2FLcpY6Ybnr8K88XeAZE2S70%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;257&quot; height=&quot;257&quot; data-filename=&quot;2022-08-17 01;28;42.PNG&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Git 알아보기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Git 이란?&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;형상 관리 도구&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git은 형상 관리 도구 (Configuration Management Tool) 중에 하나입니다. 형상 관리 도구는 다른 말로 &lt;b&gt;버전 관리 도구&lt;/b&gt;라고도 합니다. 형상 관리 도구는 기본적으로 과거 작업 내역과 현재 작업 내역, 그리고 변경점을 확인할 수 있도록 만들어진 도구입니다. 소프트웨어 개발에 필요한 소스코드를 효과적으로 관리할 수 있게 해주는 Free Software 중 하나입니다. Linux를 만들었던 리누스 토발즈(Linus Torvlads)에 의해 만들어졌습니다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SVN와 Git의 차이점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVN은 Git 이전까지 소스코드를 관리하는 대표적인 형상관리툴이었습니다. SVN 과 Git의 대표적인 차이점은 SVN은 중앙 서버 저장소에서 소스코드와 히스토리를 저장하는 형태이며, Git은 여러 서버 저장소와 여러 로컬 저장소에 분산해서 저장할 수 있다는 점입니다. 이를 다른 말로 &lt;b&gt;분산형 관리 시스템&lt;/b&gt;이라고 합니다. 서버가 고장이 나더라도 로컬 저장소를 통해 중앙 저장소를 복구할 수 있습니다. Git은 소스코드 사본을 로컬에서 관리할 수 있기 때문에 로그를 파악할 때마다 인터넷을 통해 저장소에 접근해야하는 SVN 과는 달리 시간 효율측면에서 이득이 됩니다.&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;Git 사용 전에 알아야 할 것&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;local, remote 및 origin, upstream 의 이해&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Git을 쓰기 전에 local, remote 를 모르면 Git을 쓸 수가 없습니다.&lt;/span&gt;&lt;/b&gt;&amp;nbsp;우선, local은 쉽게 말해 내 컴퓨터 안의 폴더입니다. Local Repository로 불리며, 저장소(Repository)로 인식되는 폴더(Directory)는 &lt;b&gt;.git&lt;/b&gt; 이라는 숨김 폴더를 가지고 있습니다. local 환경만으로는 네트워크 통신이 필요하지 않은 상태입니다. 다음으로, remote는 쉽게 말해 원격 서버에 있는 저장소입니다. Remote Repository로 불리며, &lt;u&gt;소스코드를 저장하고 공유할 수 있는 원격 저장소를 제공하는 대표적인 서비스로 Github, GitLab, Bitbucket&lt;/u&gt; 등이 있습니다. remote 내에서도 내가 저장하고 관리하는 원격 저장소(origin) 과 여러 명이 관리하는 원격 저장소(upstream) 가 있습니다. 다시 말해, &lt;b&gt;remote(upstream) 는 소스코드 원형이 기록된 서버 저장소&lt;/b&gt;, &lt;b&gt;remote(origin) 는 원형을 복제해다가 만든 내 서버 저장소&lt;/b&gt;, &lt;b&gt;local 은 remote(origin)을 토대로 내 PC에 저장해 놓은 저장소&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;.git 폴더는 &lt;code&gt;git init&lt;/code&gt; 명령어로 생성이 되며,&amp;nbsp; remote 에 생성된 저장소(Repository)를 &lt;code&gt;git clone&lt;/code&gt; 명령어를 통해 Local에 내려받았을 때에도 생성됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git Status (파일 상태)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b02kfA/btrJTQL4qZ2/GQYuhkWu8pKdoWZ1K8xle0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b02kfA/btrJTQL4qZ2/GQYuhkWu8pKdoWZ1K8xle0/img.png&quot; data-alt=&quot;출처:https://git-scm.com/book/ko/v2/Git의-기초-수정하고-저장소에-저장하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b02kfA/btrJTQL4qZ2/GQYuhkWu8pKdoWZ1K8xle0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb02kfA%2FbtrJTQL4qZ2%2FGQYuhkWu8pKdoWZ1K8xle0%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;720&quot; height=&quot;306&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:https://git-scm.com/book/ko/v2/Git의-기초-수정하고-저장소에-저장하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 중인 파일은 local에서 4가지의 상태를 나타냅니다. 위에 표기된 상태로는 Untracked, Unmodified, Modified, Staged 로 나누지만, 디테일한 설명을 위해서 각각 Untracked - New Files, Tracked - Unmodifed, Tracked - Modified, Tracked - Staged 하도록 하겠습니다.&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;폴더에 파일이 새로 생성되는 경우 Untracked - New Files 상태를 의미하며, Commit을 한 번이라도 실행하여 추적이 가능한 상태를 Tracked - Unmodified 상태라고 합니다. Working Directory 에서 파일을 수정이나 제거하는 경우 Tracked - Modified 상태로 변경이 됩니다. Untracked - New Files 및 Tracked - Modified 상태에서는 &lt;code&gt;git add&lt;/code&gt; 명령어를 통해 Git에 반영 대기중인 Tracked - Staged 상태로 만들 수 있습니다. 이 상태에서 &lt;code&gt;git commit&lt;/code&gt; 명령어를 통해 Git 저장소에 히스토리인 Commit 으로 반영되며, 반영된 파일들은 다시 Tracked - Unmodifed 상태가 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git Branch (브랜치)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A라는 작업과 B라는 작업을 동시에 작업하려 할 때, 어느 것을 먼저 작업하고 백업하고 다시 불러오고 할 것이 아닌 Branch 를 이용하면 여러 작업이 가능합니다. 독립적인 작업 공간을 만들 수 있다는 얘기입니다. 마지막 작업 지점인 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HEAD&lt;/b&gt;&lt;/span&gt; 에서 A라는 Branch를 생성 및 작업을 하고 Commit을 한 이후&lt;b&gt;(HEAD는 A 마지막 작업 지점으로 변경됨)&lt;/b&gt;에 작업 이전인 원래의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HEAD&lt;/b&gt;&lt;/span&gt; 위치로 돌아와서 B라는 Branch를 생성 및 작업을 하면 A 작업 내역과 B 작업 내역을 동시에 확인할 수 있습니다. 두 개의 작업한 Branch A와 Branch B를 하나의 Branch로 합치는 과정을 Merge라고 합니다. 필요에 따라 Branch A 에서 B를 가져와서 Merge를 할 수 있고, Branch B 에서 A를 가져와서 Merge 할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Git 명령어에 대한 자세한 설명과 헷갈릴만한 내용들은 추가 포스트로 작성 예정입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위 내용 중 어려운 부분은 코멘트 남겨주시면 답변드리겠습니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Git</category>
      <category>GIT</category>
      <category>형상관리</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/45</guid>
      <comments>https://parodev.tistory.com/45#entry45comment</comments>
      <pubDate>Wed, 17 Aug 2022 08:00:39 +0900</pubDate>
    </item>
    <item>
      <title>정렬 알고리즘 #4. 빗질 정렬 (Comb Sort)</title>
      <link>https://parodev.tistory.com/44</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빗질 정렬은 버블 정렬의 답답함을 해결하기 위해 고안된 비교적 간단한 정렬이다. 정렬을 거북이와 토끼에 비유를 했는데, 버블 정렬을 거북이라 비유하고, 해결하기 위한 방법으로 거북이를 토끼처럼 만드는 것으로 생각하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기본 과정은 버블 정렬 (Bubble Sort) 와 동일하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 특정한 감소량 (shrink factor) 를 통해 차이 (Gap)을 줄여가며 버블 정렬을 실행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. shrink factor는 1.3이 가장 이상적이라는 소문이 있으나, 가장 빠른 수치로 결정하면 됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAc8S/btqWXalwGE0/19qFJggIDomFJBfJY6BxrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAc8S/btqWXalwGE0/19qFJggIDomFJBfJY6BxrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAc8S/btqWXalwGE0/19qFJggIDomFJBfJY6BxrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAc8S%2FbtqWXalwGE0%2F19qFJggIDomFJBfJY6BxrK%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;419&quot; height=&quot;464&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Gap 이 결정되면 해당 대상과의 Gap 만큼 차이가 나는 노드의 크기를 비교하여 버블 정렬을 수행함&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간복잡도는 O(n^2)으로 버블 정렬을 개선했다고는 하나, shrink factor를 적절하게 잘 선택해야하는 이슈가 있으며, 역정렬을 행할때는 버블 정렬과 똑같은 시간복잡도를 가진다. 때문에 이게 버블 정렬보다 나은가는 shrink factor라는 변수와 전체 데이터셋이 잘 맞아야하기 때문에 효율적인지는 의문이다.&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;/h3&gt;
&lt;pre id=&quot;code_1613132404229&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void combSort(int *data, int n)
{
  float shrink = 1.3;
  int j, tmp, gap = n, swapped = 1;
 
  while(gap &amp;gt; 1 || swapped)
  {
    if ((gap/=shrink) &amp;lt; 1) gap = 1;
    for(j = swapped = 0; j &amp;lt; n-gap; j++)
    {
      if (data[j] &amp;lt;= data[j+gap]) continue;
     
      swapped = 1;
      tmp = data[j]; data[j] = data[j+gap]; data[j+gap] = tmp;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>Algorithm</category>
      <category>sort</category>
      <category>정렬</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/44</guid>
      <comments>https://parodev.tistory.com/44#entry44comment</comments>
      <pubDate>Fri, 12 Feb 2021 21:20:24 +0900</pubDate>
    </item>
    <item>
      <title>C / C++ 에서 int main() 과 int main(void) 의 차이점</title>
      <link>https://parodev.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 int main()과 int main(void), 그리고 void main()의 차이점에서 설명하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612278455717&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 1번 항목
int main()
{
	return 0;
}

// 2번 항목
int main(void)
{
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 작성한 1번 항목과 2번 항목의 차이점은 무엇일까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사실 C나 C++에서 모두 작동합니다.&lt;/b&gt; 다만, C에서는 매개변수로 void가 존재하는 것, 즉 int main(void)가 매개변수를 넣지 않고서만 작동을 하기 때문에 기술적으로 더 나은 것으로 판단합니다. C에서는 함수의 매개변수를 지정하지 않으면 이는 여러 매개변수를 사용하거나, 매개변수 없이 모두 사용가능함을 의미합니다.&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_1612278697645&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 1번 항목
void mat() { }
int main(void)
{
	mat(10, &quot;ff&quot;, &quot;FGF&quot;);
    	return 0;
}

// 2번 항목
void mat(void) { }
int main(void)
{
	mat(10, &quot;ff&quot;, &quot;FGF&quot;);
    	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 1번 항목과 2번 항목을 비교해봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 항목에서는 C에서 컴파일이 가능하지만, C++의 경우 컴파일 오류가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 항목에서는 C와 C++ 모두 컴파일 오류가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼, C에서 int main()은 여러 매개변수를 사용하여 호출할 수 있지만, int main(void)는 매개변수없이만 호출이 가능하다는 점입니다. 대부분의 경우 차이가 없지만 &lt;b&gt;&quot;int main(void)&quot;가 C에서 권장되는 방법&lt;/b&gt;입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남은 항목은 void main() 이겠죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 void main() 혹은 main()을 쓰면 오류가 나는 것은 아닙니다. C와 관련된 표준 C99에서는 정상적인 실행의 경우 main 함수는 int 0을 return 해야한다고 알려줍니다. 컴파일러가 허용한다고는 하지만, C와 C++을 쓰는 프로그래머라면 이건 당연히 해야하는 일 정도로 생각하시면 될 것 같습니다. C++의 경우 명시적인 return 문을 포함할 필요는 없습니다. 이 경우 반환되는 값은 0이며, 실행 성공을 의미합니다. 하지만 습관적으로라도 return 0; 는 &lt;u&gt;명시적으로 꼭 쓰는게 동료 개발자와의 혼동을 없애는 것&lt;/u&gt;일지도 모릅니다.&lt;/p&gt;</description>
      <category>C, C++, C#</category>
      <category>c</category>
      <category>c++</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/43</guid>
      <comments>https://parodev.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 3 Feb 2021 00:14:49 +0900</pubDate>
    </item>
    <item>
      <title>C 언어 기초 (C Language)</title>
      <link>https://parodev.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;C는 &lt;b&gt;절차적 프로그래밍 언어&lt;/b&gt;입니다. &lt;u&gt;Dennis Ritchie&lt;/u&gt;가 운영체제를 작성하기 위한 시스템 프로그래밍 언어로 개발했습니다. C 언어 주요 기능은 메모리에 대한 저수준 액세스를 담당하고 있으며, C언어를 운영체제 또는 컴파일러 개발과 같은 시스템 프로그래밍에 적합합니다.&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;이후의 많은 언어는 C 언어에서 직접적으로 혹은 간접적으로 구문/기능을 차용했습니다. Java의 구문과 마찬가지로 PHP, JavaScript 및 기타 여러 언어는 주로 C 언어를 기반으로 합니다. C++는 C 언어의 상위 집합입니다.&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;C 프로그램 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C 프로그램의 구조는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ef0ih/btqVh7YJxiR/iFj92v4g92WCgpz69bquL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ef0ih/btqVh7YJxiR/iFj92v4g92WCgpz69bquL1/img.png&quot; data-alt=&quot;C 언어의 기본 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ef0ih/btqVh7YJxiR/iFj92v4g92WCgpz69bquL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEf0ih%2FbtqVh7YJxiR%2FiFj92v4g92WCgpz69bquL1%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;700&quot; height=&quot;601&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;C 언어의 기본 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;include Header&lt;/b&gt; : C 언어로 작성되 프로그램에서 가장 중요한 요소는 헤더 파일을 포함하는 것입니다. 헤더 파일은 여러 소스 파일간에 공유할 C 함수 선언 및 매크로를 정의합니다. Header 파일의 확장자는 .h입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 특정 헤더 파일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stddef.h : 몇 가지 유용한 유형과 매크로를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stdint.h : 정확한 정수 유형을 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stdio.h : 입력과 출력 기능을 정의합니다. (키보드, 마우스 등 IO)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- stdlib.h : 숫자 변환 함수, 랜덤 생성기, 메모리 할당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- string.h : 문자열 처리 함수를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- math.h : 일반적인 수학 함수를 정의합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612186904137&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt; 대상 &amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&lt;b&gt; 메인 메서드 선언&lt;/b&gt; : 다음 부분은 main() 함수를 선언하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1612186944657&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main()
{
}&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. &lt;b&gt;변수 선언&lt;/b&gt; : 함수에서 사용할 변수를 나타냅니다. 선언을 하지 않고는 변수를 사용할 수 없습니다. 또한 변수는 함수에서 사용 전에 선언되어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612187022825&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main()
{
	int a;
}&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;4. &lt;b&gt;기타 메서드&amp;nbsp;선언&lt;/b&gt; : 컨트롤, 검색, 정렬, 프린트 등을 표현합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612187067698&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main()
{
	int a;
    
    printf(&quot;%d&quot;, a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. &lt;b&gt;Return 문&lt;/b&gt; : C 프로그램의 마지막 부분은 return 문입니다. return은 함수에서 값을 반환하는 것을 나타냅니다. 이 return 문과 반환 값은 함수의 반환 유형에 따라 다릅니다. 예를 들어 반환 유형이 void면, return 문이 없기도 합니다. int, char 등에 따라 해당 유형으로 반환하여야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1612187160817&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main()
{
	int a = 5;
    print(&quot;%d&quot;, a);
    return 0;
}&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;다음은 C프로그래밍의 종합 예시입니다. 먼저 따라해보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1612187207761&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#inclue &amp;lt;stdio.h&amp;gt;
int main(void)
{
	printf(&quot;Hello World&quot;);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C, C++, C#</category>
      <category>c</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/42</guid>
      <comments>https://parodev.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 1 Feb 2021 22:47:51 +0900</pubDate>
    </item>
    <item>
      <title>Bash 폴더 내 파일 전부 옮기기 (mv 명령어)</title>
      <link>https://parodev.tistory.com/41</link>
      <description>&lt;pre id=&quot;code_1611050897652&quot; class=&quot;html xml&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; word-break: break-all; white-space: pre-wrap; overflow-wrap: break-word; color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mv /var/www/* /recovery/wwwrecovery/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용은 /var/www 폴더 내부에 있는 파일 모두를 /recovery/wwwrecovery/ 로 이동한다는 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;* 주의할 점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;source에 해당하는 경로는 파일 레벨에서 *를 붙여주며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;destination에 해당하는 경로는 폴더명 뒤에 / 까지 확실히 붙여주어야 합니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Bash</category>
      <category>bash</category>
      <category>Linux</category>
      <category>MacOS</category>
      <category>명령어</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/41</guid>
      <comments>https://parodev.tistory.com/41#entry41comment</comments>
      <pubDate>Tue, 19 Jan 2021 19:08:33 +0900</pubDate>
    </item>
    <item>
      <title>윈도우10 제품 시리얼 키(ProductKey) 확인하는 방법</title>
      <link>https://parodev.tistory.com/40</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Regedit 에서 확인하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시작 &amp;rarr; 실행에서 &quot;regedit&quot; 를 입력하고 실행합니다. ( '실행' 단축키 : Windows Key + R )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 레지스트리 편집기에서 다음 순서대로 경로를 찾습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611050807761&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HKEY_LOCAL_MACHINE
	└ SOFTWARE
		└ Microsoft
			└ Windows NT
				└ CurrentVersion
					└ SoftwareProtectionPlatform&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwfmmU/btqT7XaJr9Y/VtxyakoqPtW7jciWUAfeX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwfmmU/btqT7XaJr9Y/VtxyakoqPtW7jciWUAfeX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwfmmU/btqT7XaJr9Y/VtxyakoqPtW7jciWUAfeX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwfmmU%2FbtqT7XaJr9Y%2FVtxyakoqPtW7jciWUAfeX0%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;939&quot; height=&quot;519&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ytsY/btqT7WbShvu/OUpgGEpUoCgihtmmMcBKjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ytsY/btqT7WbShvu/OUpgGEpUoCgihtmmMcBKjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ytsY/btqT7WbShvu/OUpgGEpUoCgihtmmMcBKjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ytsY%2FbtqT7WbShvu%2FOUpgGEpUoCgihtmmMcBKjK%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;939&quot; height=&quot;519&quot; data-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;다운로드 (2).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z3JaY/btqTV8FctTK/pYwEAxynJRbjznHmkjPn11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z3JaY/btqTV8FctTK/pYwEAxynJRbjznHmkjPn11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z3JaY/btqTV8FctTK/pYwEAxynJRbjznHmkjPn11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz3JaY%2FbtqTV8FctTK%2FpYwEAxynJRbjznHmkjPn11%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;939&quot; height=&quot;519&quot; data-filename=&quot;다운로드 (2).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;다운로드 (3).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nmq7i/btqT8IEpvgL/rFGTSn1OVFtBZZ11kKlDK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nmq7i/btqT8IEpvgL/rFGTSn1OVFtBZZ11kKlDK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nmq7i/btqT8IEpvgL/rFGTSn1OVFtBZZ11kKlDK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnmq7i%2FbtqT8IEpvgL%2FrFGTSn1OVFtBZZ11kKlDK1%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;939&quot; height=&quot;519&quot; data-filename=&quot;다운로드 (3).png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &quot;SoftwareProtectionPlatform&quot; 폴더 클릭 후, &quot;&lt;b&gt;BackupProductKeyDefault&lt;/b&gt;&quot; 의 데이터가 Windows의 제품키 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.&amp;nbsp; 아래의 주소값을 복사해서 레지스트리 편집기 주소창에 입력하셔도 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611050867917&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform&lt;/code&gt;&lt;/pre&gt;</description>
      <category>PC 관리/Windows</category>
      <category>registry</category>
      <category>WINDOWS10</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/40</guid>
      <comments>https://parodev.tistory.com/40#entry40comment</comments>
      <pubDate>Tue, 19 Jan 2021 19:08:04 +0900</pubDate>
    </item>
    <item>
      <title>Node.js 및 NPM 설치하는 방법</title>
      <link>https://parodev.tistory.com/38</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Node.js 웹사이트 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Download URL : &lt;a href=&quot;http://nodejs.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;nodejs.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EoAnA/btqGrBypeva/jpXqKXSOoCkAWZg5TRRJFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EoAnA/btqGrBypeva/jpXqKXSOoCkAWZg5TRRJFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EoAnA/btqGrBypeva/jpXqKXSOoCkAWZg5TRRJFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoAnA%2FbtqGrBypeva%2FjpXqKXSOoCkAWZg5TRRJFK%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;935&quot; height=&quot;614&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTS 버전 : Long Term Support 의 약자&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8619591050588950&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;12.18.3 LTS 버전 다운로드&lt;/h3&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/dFHUk4/btqGkWjORb6/9uJKTZIA4NetJVtQOuzTSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFHUk4/btqGkWjORb6/9uJKTZIA4NetJVtQOuzTSk/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFHUk4/btqGkWjORb6/9uJKTZIA4NetJVtQOuzTSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFHUk4%2FbtqGkWjORb6%2F9uJKTZIA4NetJVtQOuzTSk%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;495&quot; height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ku03e/btqGqanRLMo/UKfawjvVICO8D3gxAY7eK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ku03e/btqGqanRLMo/UKfawjvVICO8D3gxAY7eK0/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ku03e/btqGqanRLMo/UKfawjvVICO8D3gxAY7eK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKu03e%2FbtqGqanRLMo%2FUKfawjvVICO8D3gxAY7eK0%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;495&quot; height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/ejz35b/btqGrepTFcZ/3paNNrpXKBBf0k1Yx3jHp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejz35b/btqGrepTFcZ/3paNNrpXKBBf0k1Yx3jHp1/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejz35b/btqGrepTFcZ/3paNNrpXKBBf0k1Yx3jHp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fejz35b%2FbtqGrepTFcZ%2F3paNNrpXKBBf0k1Yx3jHp1%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;495&quot; height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdGaxo/btqGqQ3KuRE/YAQ6hkrt0GOi4mgmGNknKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdGaxo/btqGqQ3KuRE/YAQ6hkrt0GOi4mgmGNknKk/img.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdGaxo/btqGqQ3KuRE/YAQ6hkrt0GOi4mgmGNknKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdGaxo%2FbtqGqQ3KuRE%2FYAQ6hkrt0GOi4mgmGNknKk%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;495&quot; height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;특이한 점이 없으면 Next 클릭클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uGpJo/btqGmPrkocX/LKCQlr2sECEzFusS7C5faK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uGpJo/btqGmPrkocX/LKCQlr2sECEzFusS7C5faK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uGpJo/btqGmPrkocX/LKCQlr2sECEzFusS7C5faK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuGpJo%2FbtqGmPrkocX%2FLKCQlr2sECEzFusS7C5faK%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;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 NPM 모듈의 경우 C/C++ 컴파일러를 사용하기 때문에, Necessary tools와 Chocolatey를 자동으로 설치하도록 체크버튼을 클릭 후 Next!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(옛날에는 하나씩 다 설치했는데, 세상 많이 좋아짐)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GXfTf/btqGiT2l2Gl/VoerO7OniMig1dfztsi291/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GXfTf/btqGiT2l2Gl/VoerO7OniMig1dfztsi291/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GXfTf/btqGiT2l2Gl/VoerO7OniMig1dfztsi291/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGXfTf%2FbtqGiT2l2Gl%2FVoerO7OniMig1dfztsi291%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;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;체크했던 추가 툴 설치 화면&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 끝나고나면 cmd 창에 Enter를 누르라는게 나오는데 계속 누르면 됨 (Powershell로 전환될 수도 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sc849/btqGp2KuqKn/hBosRJXsquHxm6EaGkk8q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sc849/btqGp2KuqKn/hBosRJXsquHxm6EaGkk8q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sc849/btqGp2KuqKn/hBosRJXsquHxm6EaGkk8q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsc849%2FbtqGp2KuqKn%2FhBosRJXsquHxm6EaGkk8q1%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;859&quot; height=&quot;452&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/STfXi/btqGriFJy3t/FWrRbKRmY4H4kbF6mDBtoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/STfXi/btqGriFJy3t/FWrRbKRmY4H4kbF6mDBtoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/STfXi/btqGriFJy3t/FWrRbKRmY4H4kbF6mDBtoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSTfXi%2FbtqGriFJy3t%2FFWrRbKRmY4H4kbF6mDBtoK%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;859&quot; height=&quot;732&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>node.js</category>
      <category>NPM</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/38</guid>
      <comments>https://parodev.tistory.com/38#entry38comment</comments>
      <pubDate>Sat, 8 Aug 2020 13:36:23 +0900</pubDate>
    </item>
    <item>
      <title>Git 팁 - Hook commit-msg 한글 문자열 길이 적용하기</title>
      <link>https://parodev.tistory.com/37</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;String Length 오류가 발생하는 원인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;일반적으로 PC에서 동작하는 Bash에서 &lt;a href=&quot;https://parodev.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Bash 문자열 길이 구하기&lt;/a&gt;는 한글 문자열 길이를 인식하는데 문제가 없지만, Git Hook에 해당하는 Bash Script는 한글을 UTF-8로 인식하기 때문에 글자수가 많게 출력된다. 때문에 commit-msg를 한글로 입력하게 정책이 세워진 팀이나 단체라면 의도치 않게 제한된 문자열 길이를 늘려 사용하고는 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Script 내, LC_CTYPE 변수에 en_US.utf8 을 적용한 뒤에 길이 구하는 로직을 적용하면 한글을 포함하여 정확한 문자열 길이가 출력할 수 있다.&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;/h3&gt;
&lt;pre id=&quot;code_1596188354652&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by &quot;git commit&quot; with one argument, the name of the file
# that has the commit message.  The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit.  The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to &quot;commit-msg&quot;.

# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*&amp;gt;\).*$/Signed-off-by: \1/p')
# grep -qs &quot;^$SOB&quot; &quot;$1&quot; || echo &quot;$SOB&quot; &amp;gt;&amp;gt; &quot;$1&quot;

# This example catches duplicate Signed-off-by lines.
LC_CTYPE=en_US.utf8

filename=&quot;$1&quot;
# copy=$(tempfile -p gitco)
# cat $filename &amp;gt;&amp;gt; $copy
lineno=0

error() {
    echo &quot;{&quot;
    echo &quot;    Error : hooks/commit-msg&quot;
    echo &quot;    Message : INAPPROPRIATE LOG MESSAGE FORMATTING&quot;
    echo &quot;    Detail : $1!&quot;
    echo &quot;}&quot;
    # echo &quot;&quot;
    # echo &quot;Original checkin message has been stored in '_gitmsg.saved.txt'&quot;
    # mv $copy '_gitmsg.saved.txt'
    exit 1
}

while read -r line
do
    # Ignore comment lines (don't count line number either)
    [[ &quot;$line&quot; =~ ^#.* ]] &amp;amp;&amp;amp; continue
    v_utf8=$line

    let lineno+=1
    length=${#v_utf8}

    # Subject line tests
    if [[ $lineno -eq 1 ]]; then
        [[ $length -gt 50 ]] &amp;amp;&amp;amp; error &quot;Limit the subject line to 50 characters // Current : $length&quot;
        [[ &quot;$line&quot; == *. ]] &amp;amp;&amp;amp; error &quot;Do not end the subject line with a period&quot;
    fi

    # Rules related to the commit message body
    [[ $lineno -eq 2 ]] &amp;amp;&amp;amp; [[ -n $line ]] &amp;amp;&amp;amp; error &quot;Separate subject from body with a blank line&quot;
    [[ $lineno -gt 1 ]] &amp;amp;&amp;amp; [[ $length -gt 72 ]] &amp;amp;&amp;amp; error &quot;Wrap the body at 72 characters&quot;
done &amp;lt; &quot;$filename&quot;
# rm -f $copy
exit 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드는 커밋할 때, 메세지에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목 줄은 50자 이하,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 다음 줄은 공백이 존재 필수,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본문은 각 줄마다 72자 이하&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;</description>
      <category>Git</category>
      <category>GIT</category>
      <category>hook</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/37</guid>
      <comments>https://parodev.tistory.com/37#entry37comment</comments>
      <pubDate>Fri, 31 Jul 2020 18:43:56 +0900</pubDate>
    </item>
    <item>
      <title>Bash 문자열 길이 구하기</title>
      <link>https://parodev.tistory.com/36</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Shell Script 문자열 길이 구하는 방법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;변수 선언&lt;/h4&gt;
&lt;pre id=&quot;code_1596186741048&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ VAR=&quot;Bash Scripting&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문자열 길이 구하는 명령어&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;${#변수명}\&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1596186852714&quot; class=&quot;html xml&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo &quot;${#VAR}&quot;
14&lt;/code&gt;&lt;/pre&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;expr length &quot;$변수명&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1596186869413&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ expr length &quot;$VAR&quot;
14&lt;/code&gt;&lt;/pre&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;awk '{print length}'&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1596186889723&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo $VAR | awk '{print length}'
14&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Bash</category>
      <category>bash</category>
      <category>Linux</category>
      <category>MacOS</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/36</guid>
      <comments>https://parodev.tistory.com/36#entry36comment</comments>
      <pubDate>Fri, 31 Jul 2020 18:19:16 +0900</pubDate>
    </item>
    <item>
      <title>Android Studio ADB 설정 및 환경변수 세팅</title>
      <link>https://parodev.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 스튜디오(Android Studio)를 설치하고 난 후 거의 무조건 거쳐야하는 설정이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 ADB 환경변수 설정이다. 테스트폰을 연결해서 디버그를 한다거나 하면 무조건 실행하게 되는데, 환경변수를 미리 설정하지 않으면 매우 불편한 상황이 벌어진다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ADB란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADB는 Android Debug Bridge의 약자로 앱의 설치 및 디버깅과 같은 다양한 기기 작업에 도움이 되며, 기기에서 다양한 명령어를 실행하는데 사용할 수 있는 Unit Shell에 관한 명령어이다.&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;기본적으로 Android SDK가 설치되면 해당 폴더 내에 'platform-tools'라는 폴더에 안에 위치하고 있다. Terminal에서 매번 해당 폴더를 찾아가 adb shell 명령어를 칠 수 없는 노릇. 그냥 Terminal을 열고 'adb shell'을 입력하면 다음과 같이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;2020-07-25 00;40;52.PNG&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XrLee/btqFZ5Btg5f/g80ACmI9twU1ISgw8tLWv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XrLee/btqFZ5Btg5f/g80ACmI9twU1ISgw8tLWv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XrLee/btqFZ5Btg5f/g80ACmI9twU1ISgw8tLWv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXrLee%2FbtqFZ5Btg5f%2Fg80ACmI9twU1ISgw8tLWv0%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;481&quot; height=&quot;120&quot; data-filename=&quot;2020-07-25 00;40;52.PNG&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제를 해결하기 위해서는 시스템 환경 변수에 adb 경로를 등록해주어야한다.&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;ADB 환경변수 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우키 + 'R' 을 누르면 실행창이 뜨는데, 여기에 'sysdm.cpl'을 입력한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pdnOh/btqF1StWpUh/9wgK0SUw0BTQWcTx24zqh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pdnOh/btqF1StWpUh/9wgK0SUw0BTQWcTx24zqh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pdnOh/btqF1StWpUh/9wgK0SUw0BTQWcTx24zqh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpdnOh%2FbtqF1StWpUh%2F9wgK0SUw0BTQWcTx24zqh1%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 '고급' 탭 &amp;rarr; 우측 하단 '환경 변수(N)'을 눌러준다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RLqMF/btqFZ52AYF5/uuU26kMos8ZX3LtvjgAOTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RLqMF/btqFZ52AYF5/uuU26kMos8ZX3LtvjgAOTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RLqMF/btqFZ52AYF5/uuU26kMos8ZX3LtvjgAOTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRLqMF%2FbtqFZ52AYF5%2FuuU26kMos8ZX3LtvjgAOTK%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 창이 뜨면, 시스템 변수(S) 항목에서 Path를 찾은 다음, 아래쪽 '편집' 버튼을 눌러준다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XvL5p/btqF0ZHyiGZ/4qSB8lsPfEnnwdTic282c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XvL5p/btqF0ZHyiGZ/4qSB8lsPfEnnwdTic282c1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XvL5p/btqF0ZHyiGZ/4qSB8lsPfEnnwdTic282c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXvL5p%2FbtqF0ZHyiGZ%2F4qSB8lsPfEnnwdTic282c1%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 만들기를 누른 뒤, '&lt;b&gt;{Android SDK 경로}&lt;/b&gt;\platform-tools' 경로를 입력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;{Android SDK 경로}&lt;/b&gt;의 자세한 경로는 다음 항목에서 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tF2KE/btqFZzJO9fA/7y8hk6TxQIQkXogJyKWkVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tF2KE/btqFZzJO9fA/7y8hk6TxQIQkXogJyKWkVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tF2KE/btqFZzJO9fA/7y8hk6TxQIQkXogJyKWkVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtF2KE%2FbtqFZzJO9fA%2F7y8hk6TxQIQkXogJyKWkVK%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 입력하고 '확인' 버튼을 꾹꾹 눌러서 나간 뒤 Terminal을 열어 ADB가 작동하는지 확인해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmMKEp/btqF0RbTnMX/z7ik98kwZDRTsVCFRSPHz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmMKEp/btqF0RbTnMX/z7ik98kwZDRTsVCFRSPHz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmMKEp/btqF0RbTnMX/z7ik98kwZDRTsVCFRSPHz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmMKEp%2FbtqF0RbTnMX%2Fz7ik98kwZDRTsVCFRSPHz1%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Android Studio에서 SDK 경로 확인하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android Studio 를 열고 File &amp;rarr; Settings 를 클릭한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzhfoh/btqF0ZOmffv/mkqhWKrJfzHNC2EQc6ent0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzhfoh/btqF0ZOmffv/mkqhWKrJfzHNC2EQc6ent0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzhfoh/btqF0ZOmffv/mkqhWKrJfzHNC2EQc6ent0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzhfoh%2FbtqF0ZOmffv%2FmkqhWKrJfzHNC2EQc6ent0%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Appearance &amp;amp; Behaviour &amp;rarr; System Settings &amp;rarr; Android SDK 를 들어가면, Android SDK Location이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmaGVb/btqFZ5nXg1n/W6fna8JLjQAIzVXXEpSVJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmaGVb/btqFZ5nXg1n/W6fna8JLjQAIzVXXEpSVJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmaGVb/btqFZ5nXg1n/W6fna8JLjQAIzVXXEpSVJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmaGVb%2FbtqFZ5nXg1n%2FW6fna8JLjQAIzVXXEpSVJ1%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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Android</category>
      <category>Android</category>
      <category>환경설정</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/34</guid>
      <comments>https://parodev.tistory.com/34#entry34comment</comments>
      <pubDate>Sat, 25 Jul 2020 00:59:55 +0900</pubDate>
    </item>
    <item>
      <title>정렬 알고리즘 #3. 버블 정렬 (Bubble Sort)</title>
      <link>https://parodev.tistory.com/33</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버블 정렬은 연속된 두 개의 Index를 비교하여 정렬한 다음, 후 순위 숫자와 다음 Index를 다시 연속적으로 비교하여 정렬하는 방법이다&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;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;두 번째 Index부터 시작한다&lt;/li&gt;
&lt;li&gt;현재 Index와 바로 이전의 Index 값을 비교한다&lt;/li&gt;
&lt;li&gt;이전 Index가 크면, 현재 Index와 값을 바꿔준다&lt;/li&gt;
&lt;li&gt;현재 Index가 크면, 다음 두 연속된 배열 값을 비교한다&lt;/li&gt;
&lt;li&gt;(전체 배열의 크기 - 현재까지 순환한 바퀴 수)만큼 1 ~ 4 항목을 반복한다&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간복잡도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1부터 비교를 시작하여, n-1, n-2, ..., 1개를 반복하며, 전체를 대상으로 비교를 진행하므로 O(n^2)이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q0Ixg/btqFYYVW7do/DxN93wc9Cvsn6SWPjr8qk1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q0Ixg/btqFYYVW7do/DxN93wc9Cvsn6SWPjr8qk1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q0Ixg/btqFYYVW7do/DxN93wc9Cvsn6SWPjr8qk1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/q0Ixg/btqFYYVW7do/DxN93wc9Cvsn6SWPjr8qk1/img.gif&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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1595514628389&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void BubbleSort(vector&amp;lt;int&amp;gt; v)
{
    for(int i = 0; i &amp;lt; v.size()-1; i++)
    {
        for(int j = 1; j &amp;lt; v.size()-1; j++)
        {
            if(v[j-1] &amp;gt; v[j])            
                swap(v[j-1], v[j]);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>Algorithm</category>
      <category>sort</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/33</guid>
      <comments>https://parodev.tistory.com/33#entry33comment</comments>
      <pubDate>Thu, 23 Jul 2020 23:30:58 +0900</pubDate>
    </item>
    <item>
      <title>정렬 알고리즘 #2. 삽입 정렬 (Insertion Sort)</title>
      <link>https://parodev.tistory.com/32</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;기본 로직&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;두 번째 Index부터 시작&lt;/li&gt;
&lt;li&gt;현재 Index는 별도의 변수에 저장하고, 비교 Index는 현재 Index - 1로 설정&lt;/li&gt;
&lt;li&gt;별도로 저장해 둔 변수의 값과 비교 Index의 값을 비교&lt;/li&gt;
&lt;li&gt;저장된 변수의 값이 더 작으면 현재 비교 Index로 저장, 비교 Index - 1하여 비교를 반복&lt;/li&gt;
&lt;li&gt;저장된 변수의 값이 더 크면, 비교 Index + 1에 저장&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간 복잡도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최악의 경우 n-1, n-2, ... , 1개를 반복하여 O(n^2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 정렬되어 있는 경우 1번씩만 하기 때문에 O(n)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfJ9TQ/btqFWBN9GOW/tmaEPmAsyXEbKy2OShTkL1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfJ9TQ/btqFWBN9GOW/tmaEPmAsyXEbKy2OShTkL1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfJ9TQ/btqFWBN9GOW/tmaEPmAsyXEbKy2OShTkL1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cfJ9TQ/btqFWBN9GOW/tmaEPmAsyXEbKy2OShTkL1/img.gif&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; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1595512679559&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void InsertionSort(vector&amp;lt;int&amp;gt; v)
{
    for(int i = 0; i &amp;lt; v.size(); i++)
    {
    	int key = v[i];
        int j = i-1;
        
        while(j &amp;gt;= 0 &amp;amp;&amp;amp; key &amp;lt; v[j])
        {
            swap(v[j], v[j+1]);
            j--;
        }
        v[j+1] = key;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>Algorithm</category>
      <category>sort</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/32</guid>
      <comments>https://parodev.tistory.com/32#entry32comment</comments>
      <pubDate>Thu, 23 Jul 2020 22:59:28 +0900</pubDate>
    </item>
    <item>
      <title>정렬 알고리즘 #1. 선택 정렬 (Selection Sort)</title>
      <link>https://parodev.tistory.com/31</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;설명&lt;/h3&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;현재 위치에 저장되는 값에 따라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;최소 선택 정렬(Min-Selection)&lt;/b&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;최대 선택정렬(Max-Selection)&lt;/b&gt;로 나뉜다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 로직&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;정렬되지 않은 Array의 Index의 맨 앞을 대상으로 이후 가장 작은 값을 찾는다 (최솟값 찾기)&lt;/li&gt;
&lt;li&gt;가장 작은 값을 찾으면, 현재 Index의 위치의 값과 바꾼다&lt;/li&gt;
&lt;li&gt;다음 Index에서 위 1, 2번 과정을 반복한다&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간 복잡도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n-1개, n-2개, ..., 1개의 비교를 반복한다. 전체 비교를 진행하므로 시간복잡도는 O(n^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-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;Selection-Sort-Animation.gif&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VefN8/btqFZjZPUjh/xvfu9uT1RrTlkgxKVboud0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VefN8/btqFZjZPUjh/xvfu9uT1RrTlkgxKVboud0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VefN8/btqFZjZPUjh/xvfu9uT1RrTlkgxKVboud0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/VefN8/btqFZjZPUjh/xvfu9uT1RrTlkgxKVboud0/img.gif&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;100&quot; height=&quot;371&quot; data-filename=&quot;Selection-Sort-Animation.gif&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드 (C++)&lt;/h3&gt;
&lt;pre id=&quot;code_1595511910384&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void SelectionSort(vector&amp;lt;int&amp;gt; v)
{
	for(int i = 0; i &amp;lt; v.size()-1; i++)
    {
    	int temp = i;
        for(int j = i+1; j &amp;lt; v.size(); j++)
        {
        	if(v[temp] &amp;gt;= v[j]) 
            	temp = j;
        }
        swap(v[i], v[temp]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>Algorithm</category>
      <category>sort</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/31</guid>
      <comments>https://parodev.tistory.com/31#entry31comment</comments>
      <pubDate>Thu, 23 Jul 2020 22:45:27 +0900</pubDate>
    </item>
    <item>
      <title>3D 그래픽스 - 그래픽스 파이프라인이란? (Graphics Pipeline)</title>
      <link>https://parodev.tistory.com/30</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래픽스 파이프라인이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;3D 컴퓨터 그래픽스에서 그래픽스 파이프라인(Graphics Pipeline) 이란 3차원의 도형 혹은 이미지를 2차원 래스터 이미지로 표현을 하기 위한 &lt;b&gt;단계적 방법&lt;/b&gt;(방법을 몇 단계로 나눈 것)을 의미한다. 래스터(raster)는 컴퓨터에서 어떤한 도형 혹은 이미지를 픽셀로 구성하고, 이 점들의 모습을 조합, 일정한 간격의 픽셀들을 나열하여 하나의 화면을 표현하는것을 의미한다. OpenGL과 Direct3D가 3차원 그래픽 표준이며, 비슷한 그래픽스 파이프라인을 가지고 있다. 다른 단어로, &lt;b&gt;렌더링 파이프라인 (Rendering Pipeline)&lt;/b&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;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rXy3W/btqFT8Y7sRG/loQuGtEC3esWuMXCVEXt6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rXy3W/btqFT8Y7sRG/loQuGtEC3esWuMXCVEXt6k/img.png&quot; data-alt=&quot;초록색 도형(고정 기능), 노란색 도형(사용자 조작)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rXy3W/btqFT8Y7sRG/loQuGtEC3esWuMXCVEXt6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrXy3W%2FbtqFT8Y7sRG%2FloQuGtEC3esWuMXCVEXt6k%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;300&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;초록색 도형(고정 기능), 노란색 도형(사용자 조작)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Input Assembler (입력 어셈블러)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저장된 버퍼에서 원시 Vertex 데이터를 수집하고, Index 버퍼를 이용하여 Vertex 의 복제나 중복을 막는다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;Vertex Shader (버텍스 셰이더)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 Vertex 위치를 Model Matrix에서 View Matrix &amp;rarr; Projection Matrix로 변환하는 작업을 한다&lt;/li&gt;
&lt;li&gt;Matrix 변환 과정에서 임의로 변형이 가능하다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;Geometry Shaer (지오메트리 셰이더) : 생략 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vertex Shader에서 생성되지 않은 임의의 점, 선, 삼각형 생성 및 수정할 수 있는 셰이더&lt;/li&gt;
&lt;li&gt;예를 들어, 실제 객체로 생성한 캐릭터의 모양을 바꿔보이게 (실제로는 바뀌지 않음) 하거나, 실제 객체로는 존재하지 않지만, 눈에 보이는 도형을 그릴 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;Rasterization (래스터화)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vertex Shader와 Geometry Shader를 지난 도형이 픽셀로 변경되는 것을 의미한다&lt;/li&gt;
&lt;li&gt;Vertex 사이에 공간이 존재할텐데 그 부분은 보간 작업을 통해 알맞은 픽셀이 표시가 된다 (보간 = 두 데이터의 평균 혹은 중간값으로 처리하는 방법 = 도울 보, 사이 간)&lt;/li&gt;
&lt;li&gt;이 단계에서는 색깔이 표현되지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;Fragment Shader (프래그먼트 셰이더) = Pixel Shader&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Rasterize 된 픽셀들에 색을 부여하는 단계&lt;/li&gt;
&lt;li&gt;Vertex Shader에 보간된 데이터를 통해 색을 표현하거나, 텍스쳐 좌표(UV), Normal Mapping 등을 이용&lt;/li&gt;
&lt;/ul&gt;
&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;Matrix&lt;/b&gt; 란? &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;공간&lt;/b&gt;을 의미한다. Model Matrix는 모델이 놓여진 3D 공간, View Matrix는 3D 공간 내에서 카메라가 보는 공간, Projection Matrix는 카메라 센서에 투영되는 2D 공간을 의미한다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;OpenGL 및 Direct3D와 같은 이전 API를 사용했다면, glBlendFunc, OMSetBlendState 메서드 호출로 임의의 파이프라인을 설정할 수 있다. 최근에 생긴 Vulkan의 경우, 그래픽스 파이프라인은 변경할 수 없으므로, 셰이더를 변경하거나, 파이프라인을 새로 만들어야 한다. 파이프라인을 새로 만드는 수고를 하고서라도 Vulkan 사용의 장점은 모든 그래픽스 파이프라인을 확인할 수 있으므로, 극한의 최적화를 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>3D Graphics</category>
      <category>3D</category>
      <category>graphics</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/30</guid>
      <comments>https://parodev.tistory.com/30#entry30comment</comments>
      <pubDate>Wed, 22 Jul 2020 17:14:11 +0900</pubDate>
    </item>
    <item>
      <title>3D 그래픽스 - 솔리드 모델링(Solid Modeling)이란?  (+ CSG, B-Rep)</title>
      <link>https://parodev.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDNF6U/btqFSZV2pzs/6QWedh5SdEhjc0VXH9uT1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDNF6U/btqFSZV2pzs/6QWedh5SdEhjc0VXH9uT1k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDNF6U/btqFSZV2pzs/6QWedh5SdEhjc0VXH9uT1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDNF6U%2FbtqFSZV2pzs%2F6QWedh5SdEhjc0VXH9uT1k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Solid Modeling System&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;솔리드( solid )&lt;/b&gt;&lt;span&gt;란 의미 그대로 담는 그릇에 따라 모양이 바뀌는 물이나 공기같은 것이 아니라 고정된 물체, 즉 고체를 의미한다. &lt;/span&gt;&lt;b&gt;솔리드 모델링&lt;/b&gt;&lt;span&gt;이란 고정된 물체를 컴퓨터에서 표현하는 Geometric Modeling System 가운데 하나이다.&lt;/span&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;span&gt;Geometric Modeling System&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Wireframe Modeling System
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점과 선으로 물체의 외양만 표현하는 방법. 철사로 만들어진 분자모델과 같이 3차원 물체상의 점과 특징선을 입력받아 점을 표현하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Surface Modeling System
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Wireframe 모델에 면(face) 정보를 추가한 형태. 면 사이의 상호관계는 저장하지 않고 면의 List만 저장함. 각 곡면들에 대하여 곡면방정식을 유도할 수 있는 정보만을 저장하는 모델링 시스템.&lt;/li&gt;
&lt;li&gt;곡면 입력 방법 3가지
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;곡면상의 점들을 이용하여 점을 보간하는 곡면 생성&lt;/li&gt;
&lt;li&gt;곡면상의 고선들을 그물형태로 입력한 곡선망으로부터 보간곡면을 생성&lt;/li&gt;
&lt;li&gt;곡선 입력 후 이를 직선이동 또는 회전이동하여 곡면을 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Solid Modeling System&lt;/b&gt;&lt;/u&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모양 뿐만 아니라 물체의 다양한 성질을 좀 더 정확하게 표현하기 위해 고안된 방법&lt;/li&gt;
&lt;li&gt;기본적인 착상은 &amp;ldquo;실제 물체가 3차원 공간을 두개의 공간으로 즉, 외부와 내부로 나눈다&amp;rdquo; 임&lt;/li&gt;
&lt;li&gt;면(face)들 사이의 상호 연결관계, 면들의 내부/외부에 관한 추가정보도 보유하는 방식으로 3차원 입체의 부피에 관한 정보를 보유하므로 부피 단위의 작업이 가능한 모델링 시스템.&lt;/li&gt;
&lt;li&gt;완전한 입체를 모델링 해야하는 부담이 있음.&lt;/li&gt;
&lt;li&gt;모델링 기능 5가지
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Primitive를 변형하거나 Boolean Operation 수행&lt;/li&gt;
&lt;li&gt;2차원 단면형상을 이용하는 Sweeping &amp;amp; Skinning&lt;/li&gt;
&lt;li&gt;이미 만들어진 입체를 국부적으로 수정하는 Rounding &amp;amp; Lifting&lt;/li&gt;
&lt;li&gt;입체를 이루는 꼭지점, 모서리, 면을 조작하는 Boundary Modeling&lt;/li&gt;
&lt;li&gt;익숙한 형상단위로 모델링하는 Feature-Based Modeling&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CSG (Constructive Solid Geometry)&lt;/b&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Primitive의 조합으로 솔리드를 표현하는 방법&lt;/li&gt;
&lt;li&gt;부드러운 곡면을 표현하는데 한계가 있음.&lt;/li&gt;
&lt;li&gt;Primitive에 대한 Boolean Operation 수행 과정을 &lt;b&gt;Tree 구조&lt;/b&gt;로 저장하는 방식&lt;/li&gt;
&lt;li&gt;초기 솔리드 모델링 시스템에서 보편적임&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B-Rep (Boundary Representation)&lt;/b&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방향성과 경계가 있는 곡면들로 솔리드를 표현&lt;/li&gt;
&lt;li&gt;Vertex, Edge, Face로 구성 (Topology Entity)&lt;/li&gt;
&lt;li&gt;Geometric Entity, Surface, Curve, Point 는Topology Entity에 대응되는 요소&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Decomposition&lt;/b&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간단한 형상의 집합으로 Approximation 시켜서 표현하는 방식&lt;/li&gt;
&lt;li&gt;Winged-Edge Data Structure
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Half-Edge 이전 단계. Index를 사용하는 형식으로 방향을 판단하는 로직이 필요&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u data-renderer-mark=&quot;true&quot;&gt;Half-Edge Data Structure&lt;/u&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;면과 면 사이의 변을 서로 다른 방향을 가지는 두 개의 변으로 나누어 데이터를 저장. 변(edge)이 방향성을 가져서 특정한 방향의 반공간(half-space)만을 의미하게 되었기 때문에 half-edge라고 한다.&lt;/li&gt;
&lt;li&gt;일반적으로 half-edge의 왼쪽이 유효한 half-space가 되고, 여러 개의 half-edge에 의해 정의되는 half-space의 교집합에 의해서 면(face)이 정의된다. 따라서 한 면의 경계인 half-edge들은 항상 같은 방향으로 연결되어 있어야 한다. 또, 인접한 면과 이웃한 half-edge는 서로 방향이 반대인 것을 알 수 있다. 그렇게 해야만, 면들이 서로 같은 방향성을 가져서 안과 밖을 구분할 수 있기 때문이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-renderer-start-pos=&quot;1709&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;글에서 알 수 있는 것&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-renderer-start-pos=&quot;1709&quot; data-ke-size=&quot;size16&quot;&gt;솔리드 모델링을 생성하는 목적에 따라 방법을 나누어 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;생성하는 각 방법은 상호호환적이지 않으며, 되도록 한 가지의 방법 안에서 형상화하는 것을 추천&lt;/li&gt;
&lt;li&gt;전문가에게 &amp;lsquo;모델링이 뭐에요&amp;rsquo;라는 질문을 받을 때 이 글 하나면 설명 충분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-renderer-start-pos=&quot;2134&quot; data-ke-size=&quot;size23&quot;&gt;참고&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=y244&amp;amp;logNo=221025760391&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=y244&amp;amp;logNo=221025760391&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.unity3d.com/Packages/com.unity.probuilder@4.0/api/UnityEngine.ProBuilder.WingedEdge.html&quot;&gt;https://docs.unity3d.com/Packages/com.unity.probuilder@4.0/api/UnityEngine.ProBuilder.WingedEdge.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pre-scient.com/resources/knowledge-center/geometric-modelling/brep-csg.html&quot;&gt;https://pre-scient.com/resources/knowledge-center/geometric-modelling/brep-csg.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>3D Graphics</category>
      <category>3D</category>
      <category>graphics</category>
      <category>Modeling</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/29</guid>
      <comments>https://parodev.tistory.com/29#entry29comment</comments>
      <pubDate>Tue, 14 Jul 2020 15:15:44 +0900</pubDate>
    </item>
    <item>
      <title>HTTP #2. TCP/IP, UDP 프로토콜 개념 알아보기</title>
      <link>https://parodev.tistory.com/28</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;TCP/IP 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약 (프로토콜)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OSI 7 계층을 4계층으로 단순화&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;TCP/IP는 한 컴퓨터가 인터넷을 통해 데이터 패킷을 컴파일하여 올바른 위치로 보내서 다른 컴퓨터와 통신할 수 있도록 하는 인터넷의 기본 통신 언어이다. 여기서 패킷은 인터넷을 통해 전송되는 정보의 가장 작은 단위이다&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;TCP와 IP 두가지 프로토콜로 이루어져 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TCP는 많은 양의 데이터를 가져와서 패킷으로 컴파일하여 동료 TCP 계층이 수신할 수 있도록 전송 (최상위 계층)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP는 정보 패킷이 정확한 위치로 전송 및 수신될 수 있게하는 쌍의 역할을 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 요약하면 TCP가 데이터, IP는 인터넷 위치 GPS 쯤&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OSI 7계층과 TCP/IP 4계층&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;2020-07-11 00;57;34.PNG&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QCbMF/btqFAq5Fd6a/KBDcAmfk16D8NFUgjXiED1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QCbMF/btqFAq5Fd6a/KBDcAmfk16D8NFUgjXiED1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QCbMF/btqFAq5Fd6a/KBDcAmfk16D8NFUgjXiED1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQCbMF%2FbtqFAq5Fd6a%2FKBDcAmfk16D8NFUgjXiED1%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;700&quot; height=&quot;488&quot; data-filename=&quot;2020-07-11 00;57;34.PNG&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;488&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;프로토콜이 자신의 기능만 하도록 &lt;b&gt;독립성을 보장&lt;/b&gt;하기 위해서 계층이 나뉘게 된다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 접근 계층 : 인터넷 계층에서 생성된 패킷을 &lt;b&gt;전기신호&lt;/b&gt; 또는 &lt;b&gt;광신호&lt;/b&gt;로 바꾸어 전달&lt;/li&gt;
&lt;li&gt;인터넷 계층 : IP (Internet Protocol) 이 존재하는 계층, 라우팅 방법을 정의하고 데이터 전달의 신뢰성을 책임짐&lt;/li&gt;
&lt;li&gt;전송 계층 : TCP, UDP가 존재하는 계층, 인터넷 계층에서 결정한 목적지까지 실제 데이터를 전송&amp;nbsp;&lt;/li&gt;
&lt;li&gt;응용 계층 : 응용프로그램들 간의 데이터 통신이 이루어짐 (SMTP, FTP, HTTP)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TCP, UDP 프로토콜&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP 프로토콜
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연결 지향 프로토콜&lt;/li&gt;
&lt;li&gt;데이터 송수신을 위해 클라이언트와 서버의 소켓이 연결되어야 함&lt;/li&gt;
&lt;li&gt;데이터가 유실되면 재전송을 요청함 (신뢰성)&lt;/li&gt;
&lt;li&gt;HTTP, FTP 대부분의 응용 계층 프로트콜의 전송 계층으로 이용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UDP 프로토콜
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비연결 지향 프로토콜&lt;/li&gt;
&lt;li&gt;전송한 데이터가 제대로 전달되었는지 확인하지 않고 데이터만 보냄&lt;/li&gt;
&lt;li&gt;신뢰성이 떨어지지만, 속도가 빠름&lt;/li&gt;
&lt;li&gt;Header에 checksum이 존재하므로 신뢰성이 아예 없는 것은 아님&lt;/li&gt;
&lt;li&gt;음악, 동영상 스트리밍 같은 서비스에 이용&lt;/li&gt;
&lt;/ul&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>HTTP</category>
      <category>network</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/28</guid>
      <comments>https://parodev.tistory.com/28#entry28comment</comments>
      <pubDate>Sat, 11 Jul 2020 01:06:49 +0900</pubDate>
    </item>
    <item>
      <title>HTTP #1. URI, URL 개념, 차이점 알아보기</title>
      <link>https://parodev.tistory.com/27</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;URI (Uniform Resource Identifier)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI 이란, 통합자원식별자 즉 웹 리소스를 고유하게 식별할 수 있는 구분자 혹은 유일한 주소라고 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI는 인터넷에서 요구되는 기본 조건이며, 인터넷 프로토콜에 붙어다닌다&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;URI의 종류는 URL, URN 두 가지이며, 일반적으로 URL을 사용한다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URL : 특정 서버에서 하나의 리소스에 대해 구체적인 위치를 서술&lt;/li&gt;
&lt;li&gt;URN : 리소스가 어디에 있던지 찾을 수 있는 방식을 설명&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI가 URL보다 큰 개념이지만, 혼용해서 쓰는 개발자들이 많다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(URI가 URL은 아니지만, URL이 URI이긴 하니까...!!?)&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;URL (Uniform Resource Locator) 구조&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1594375363469&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;scheme (스킴)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터넷 프로토콜(규약)을 의미하며, 리소스를 어떻게 요청하고 접근할지를 명시&lt;/li&gt;
&lt;li&gt;HTTP, FTP, MAILTO, RTSP 등이 있으며, 웹에서는 HTTP를 주로 씀&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;user, password (사용자 이름, 비밀번호)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에 접근하기 위해 사용자의 이름과 비밀번호를 요구하기도 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP://userid:12345@host/file.ppt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아무것도 입력하지 않았을 때, 기본값&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 이름 : anonymous&lt;/li&gt;
&lt;li&gt;비밀번호 : 브라우저에서 제공하는 기본 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;host:port
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Host는 하나의 컴퓨터를 의미, Socket에 따라 Process가 달리 작동&lt;/li&gt;
&lt;li&gt;Port 는 Socket을 구분하는 역할&lt;/li&gt;
&lt;li&gt;로컬에서 개발하면 기본적인 URL은 localhost:8080&lt;/li&gt;
&lt;li&gt;HTTP에서 포트 번호를 명시하지 않으면, 80번 포트를 기본 값으로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;path, query, fragment
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 호스트에서 자원의 경로, 전달 파라미터, ID를 의미한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;URL 허용 문자 (Escape string)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트의 요청 URL 문자열이 서버측으로 손실되지 않고 전달하기 위함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 URL 설계자들은 ASCII 문자만으로 URL을 작성하도록 권장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹이 커지면서 비영어권에서 ASCII 문자가 아닌 문자를 사용해야하는 상황이 발생 (ex. UNICODE 문자)&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;해당 문자를 %기호로 시작하고 ASCII 코드로 표현되는 &lt;b&gt;이스케이프 문자&lt;/b&gt;로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 변경 전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/category/폴리그랏&quot;&gt;https://parodev.tistory.com/category/폴리그랏&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594376064631&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;'폴리그랏' 카테고리의 글 목록&quot; data-og-description=&quot;지나가는 그래픽스 개발자의 블로그&quot; data-og-host=&quot;parodev.tistory.com&quot; data-og-source-url=&quot;https://parodev.tistory.com/category/폴리그랏&quot; data-og-url=&quot;https://parodev.tistory.com/category/%ED%8F%B4%EB%A6%AC%EA%B7%B8%EB%9E%8F&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdItoY/hyGIvY5xUe/VvQleaSepxIGH4nnegeKY0/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/c2s1ie/hyGIrbjcJ1/DMNHVSuQeZow6BMSGGKGt1/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/cpJ4Mh/hyGIrbjcLF/GDgIu4XqxvMQmzNTuOlpC1/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/category/폴리그랏&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parodev.tistory.com/category/폴리그랏&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdItoY/hyGIvY5xUe/VvQleaSepxIGH4nnegeKY0/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/c2s1ie/hyGIrbjcJ1/DMNHVSuQeZow6BMSGGKGt1/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/cpJ4Mh/hyGIrbjcLF/GDgIu4XqxvMQmzNTuOlpC1/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;'폴리그랏' 카테고리의 글 목록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지나가는 그래픽스 개발자의 블로그&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parodev.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 변경 후 (이스케이프 문자 변환)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://parodev.tistory.com/category/%ED%8F%B4%EB%A6%AC%EA%B7%B8%EB%9E%8F&quot;&gt;https://parodev.tistory.com/category/%ED%8F%B4%EB%A6%AC%EA%B7%B8%EB%9E%8F&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>HTTP</category>
      <category>network</category>
      <category>web</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/27</guid>
      <comments>https://parodev.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 10 Jul 2020 19:15:31 +0900</pubDate>
    </item>
    <item>
      <title>윈도우10 자동 로그인 설정, 로그인창 제거 방법 (netplwiz)</title>
      <link>https://parodev.tistory.com/26</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Windows 10에서는 매번 비밀번호를 입력하고 시스템에 로그인 해야합니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;매번 로그인 암호를 입력해서 들어가는것도 여간 번거로운 일이 아니죠&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;단일 사용자 시스템일 때 유용한 자동으로 로그인하는 방법에 대해 설명하려고 합니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Netplwiz 및 레지스트리 편집기와 같은 도구를 이용하여 자동 로그인을 구성할 수 있습니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Windows 7과 8 마찬가지로 동작합니다&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;Windows 10 자동 로그인 방법 - netplwiz 이용&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 시작 메뉴에서 &quot;netplwiz&quot;를 검색, 결과에서 &quot;관리자 권한으로 실행&quot; 옵션을 클릭합니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;(Win키 + R 키를 눌러 실행창을 띄운 후에 &quot;netplwiz&quot; 입력 후 Ctrl + Shift + Enter 키를 누르면 동일하게 실행됩니다)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oFoTX/btqFiACKF6A/TPT9G041nVH8Af6t5fkvQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oFoTX/btqFiACKF6A/TPT9G041nVH8Af6t5fkvQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oFoTX/btqFiACKF6A/TPT9G041nVH8Af6t5fkvQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoFoTX%2FbtqFiACKF6A%2FTPT9G041nVH8Af6t5fkvQ1%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; alt=&quot;netplwiz&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;638&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. &quot;사용자 이름과 암호를 입력해야 이 컴퓨터를 사용할 수 있음&quot; 에 &lt;b&gt;체크 표시 해제&lt;/b&gt;를 한 후 &lt;b&gt;적용&lt;/b&gt;버튼을 누릅니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVYHQ/btqFjcVEQhE/RdvtuyJrQTtL3fsGUWoDs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVYHQ/btqFjcVEQhE/RdvtuyJrQTtL3fsGUWoDs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVYHQ/btqFjcVEQhE/RdvtuyJrQTtL3fsGUWoDs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVYHQ%2FbtqFjcVEQhE%2FRdvtuyJrQTtL3fsGUWoDs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;518&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 자동 로그인에 &lt;b&gt;암호 입력 및 확인창&lt;/b&gt;이 뜨게 됩니다. 비밀번호를 입력하고 &quot;확인&quot; 버튼을 클릭하세요&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bko0qi/btqFjEKYihB/5Aa8OH3xmua5xd3KKhnrm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bko0qi/btqFjEKYihB/5Aa8OH3xmua5xd3KKhnrm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bko0qi/btqFjEKYihB/5Aa8OH3xmua5xd3KKhnrm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbko0qi%2FbtqFjEKYihB%2F5Aa8OH3xmua5xd3KKhnrm0%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;450&quot; height=&quot;250&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 Windows 10 자동 로그인 기능을 사용할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 작업을 취소하고 싶다면,&lt;/b&gt; 2번 작업에 체크표시를 하고 진행하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PC 관리/Windows</category>
      <category>netplwiz</category>
      <category>WINDOWS10</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/26</guid>
      <comments>https://parodev.tistory.com/26#entry26comment</comments>
      <pubDate>Fri, 3 Jul 2020 10:32:15 +0900</pubDate>
    </item>
    <item>
      <title>NoSQL이란 무엇인가? 개념, 특징과 장점</title>
      <link>https://parodev.tistory.com/25</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL 이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;NoSQL은 Not Only SQL의 약자입니다. 이미 여러분들이 평소에 Facebook, Twitter, Netflix, Instagram 등의 서비스에서 이미 NoSQL 을 사용하고 있습니다. NoSQL은 기존 RDBMS의 한계를 극복하기 위해 만들어진 형태의 데이터 베이스입니다. Relation 즉 관계형이 아니어서 고정된 스키마가 없으며, Join이 힘들지요. 빅데이터를 다룰때, RDBMS로만으로는 트래픽을 감당하기 어려워졌고, 여러분들이 올린 사진이나, 메시지를 저장할 때, 동시 다발적으로 상품을 추천해 줄 때, 데이터를 더 빠르게 처리하기 위해서 개발된 것이 NoSQL 입니다. 핵심 요소는 Horizontal Scalability(수평확장)과 High Availability(고가용성) 이지요.&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;이 용어가 처음으로 등장한 시기는 1998년 카를로 스트로찌(Carlo Strozzi)라는 엔지니어가 공개한 표준 SQL 인터페이스를 사용하지 않은 자신의 경량 Open Source 관계형 데이터베이스를 NoSQL이라고 명명한데서 유래했다고 합니다. 2009년에 요한 오스칼손(Johan Oskarsson)이라는 엔지니어가 Open Source 기반의 분산 데이터베이스 관련 행사를 준비하면서 NoSQL이라는 용어를 사용했다고 하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기존 RDBMS의 한계&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터양과 데이터 처리량이 지속해서 증가하면 아래와 같은 문제점을 만납니다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;스키마 문제 : 빅데이터를 RDB의 스키마에 맞춰 변경해서 넣으려면 매우 긴 시간의 PayLoad가 발생&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;스케일업의 한계 : RDBMS는 스케일 아웃을 염두에 두고 설계되지 않았기 때문에, 관계 모델에서 트랜잭션의 연산, 일관성, 속성을 유지하면서 스케일 아웃 환경에서 조작하는것이 어렵습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL의 특징과 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Map 형태의 Key-Value 형식을 지원&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;RDBMS가 데이터의 관계를 Foreign Key(FK) 등으로 정의하고 Join 등 관계형 연산을 하지만 NoSQL은 관계를 정의하지 않음&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;대용량의 데이터를 저장, 처리하기 쉬움&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Schema-less&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;읽기 작업보다 쓰기 작업이 더 빠르며, 일반적으로 RDBMS에 비하여 읽기, 쓰기 성능이 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL의 종류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Key/Value Database : Redis(인메모리), Oracle Coherence 등&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;단순한 저장구조, 복잡한 조회 연산 X&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;고속 읽기와 쓰기에 최적화&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Key에 대한 단위 연산이 빠름, 여러 Key에 대해서는 느릴 수 있음&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;메모리를 저장소로 쓰기 때문에, 아주 빠른 Get, Put을 지원&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Value는 문자열, 정수와 같은 원시 타입 및 Column Family 형태 (Column, Value) 를 지원한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Big Table Database (= Ordered Key/value) : BigTable, Cassandra, HBase 등&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Key/Value Store 와 데이터 저장 방식 동일&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;내부적으로 Key에 대한 정렬 지원 (보통 NoSQL은 지원안함)&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;순차적인 날짜 데이터를 정렬해서 보여줄 때 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Document Database : MongoDB, CouchDB 등&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Key/Value Store의 확장된 형태&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Value에 Document라는 타입을 저장 (XML, JSON, YAML 등)&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;복잡한 데이터 구조 표현가능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Document id 또는 특정 속성값 기준으로 인덱스 생성&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;Sorting, Join, Grouping 등이 가능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;데이터를 파싱해서 연산 &amp;rarr; Key/Value 모델보다 오버헤드가 큼&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;큰 크기의 Document를 다룰 때 성능 저하&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Graph Database : Sone, AllegroGraph, Neo4j&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node들과 RelationShip으로 구성된 개념&lt;/li&gt;
&lt;li&gt;Key/Value Store이며 모든 노드는 끊기지 않고 연결됨&lt;/li&gt;
&lt;li&gt;RelationShip은 Direaction, Type, Start Node, End Node 등 속성을 가짐&lt;/li&gt;
&lt;li&gt;보통 Weight 속성을 가짐&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;a href=&quot;http://blog.naver.com/PostView.nhn?blogId=naverdev&amp;amp;logNo=120116323974&amp;amp;parentCategoryNo=8&amp;amp;viewDate=&amp;amp;currentPage=1&amp;amp;listtype=0&quot;&gt;http://blog.naver.com/PostView.nhn?blogId=naverdev&amp;amp;logNo=120116323974&amp;amp;parentCategoryNo=8&amp;amp;viewDate=&amp;curren;tPage=1&amp;amp;listtype=0&lt;/a&gt;&lt;/p&gt;</description>
      <category>Database</category>
      <category>DATABASE</category>
      <category>MongoDB</category>
      <category>NoSQL</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/25</guid>
      <comments>https://parodev.tistory.com/25#entry25comment</comments>
      <pubDate>Tue, 30 Jun 2020 22:36:36 +0900</pubDate>
    </item>
    <item>
      <title>3D 그래픽스 - 누구든지 하는 VR, AR 공간</title>
      <link>https://parodev.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mb2uc/btqE9vBoL2W/MrDvO9qpdockPomcMkOiYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mb2uc/btqE9vBoL2W/MrDvO9qpdockPomcMkOiYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mb2uc/btqE9vBoL2W/MrDvO9qpdockPomcMkOiYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmb2uc%2FbtqE9vBoL2W%2FMrDvO9qpdockPomcMkOiYk%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;640&quot; height=&quot;487&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;size18&quot;&gt;&lt;b&gt;공간&lt;/b&gt;&lt;span&gt;(空間,&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%98%81%EC%96%B4&quot;&gt;영어&lt;/a&gt;:&amp;nbsp;&lt;/span&gt;&lt;span&gt;space&lt;/span&gt;&lt;span&gt;)은 어떤&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%AC%BC%EC%A7%88&quot;&gt;물질&lt;/a&gt;&lt;span&gt;&amp;nbsp;또는&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%AC%BC%EC%B2%B4&quot;&gt;물체&lt;/a&gt;&lt;span&gt;가 존재할 수 있거나&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%82%AC%EA%B1%B4&quot;&gt;어떤 일이 일어날&lt;/a&gt;&lt;span&gt;&amp;nbsp;수 있는 장소이다. ( 참조 : 위키백과 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;3D 그래픽스에서 다루는 공간은 X, Y, Z 축이 존재하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;유클리드 공간&lt;/b&gt;&lt;/span&gt;이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;유클리드 공간&lt;/span&gt;&lt;/b&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;선형적&lt;/u&gt;인 축들로 이루어진 공간이며, &lt;/span&gt;&lt;/span&gt;&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;span&gt;&lt;span&gt;서로 다른 두 직선은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;한 지점에서 만나거나 평행&lt;/span&gt;&lt;/b&gt;하게 이동한다는 사실에 근거하고 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;공간의 과거&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;고전물리학에서 설명하는 유클리드 공간에&amp;nbsp;반기를 들었던 수학자들이 많았는데,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;1800년대 말, 많은 수학자들이 &lt;/span&gt;&lt;span&gt;타원과,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;쌍곡선 기하학에 근거하여&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;비유클리드 공간&lt;/b&gt;&lt;/span&gt;의 존재를&lt;/span&gt;&lt;span&gt;&amp;nbsp;입증하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Iss27/btqFaMvuwxf/RsZvT7KI6CavIHrbb4cdik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Iss27/btqFaMvuwxf/RsZvT7KI6CavIHrbb4cdik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Iss27/btqFaMvuwxf/RsZvT7KI6CavIHrbb4cdik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIss27%2FbtqFaMvuwxf%2FRsZvT7KI6CavIHrbb4cdik%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;399&quot; height=&quot;149&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;위 그림에서 알 수 있듯이, 삼각형은 우리가 생각하는 내각의 합이 180도인 그런 것만 있는 것이 아니라는 것이다.&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;1900년대 초에는 아인슈타인이 일반 상대성 이론을 통해 시공간에 대한 개념을 도출하였고,&amp;nbsp;&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;비유클리드 공간&lt;/span&gt;&lt;/b&gt;&amp;nbsp;)&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;그리고 2015년에 중력파 검출 실험이 성공하면서 물리학계에 많은 파장을 일으켰다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcUmwV/btqFaNnAZGp/Z5gXyAfIr6qxDaNlrxgciK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcUmwV/btqFaNnAZGp/Z5gXyAfIr6qxDaNlrxgciK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcUmwV/btqFaNnAZGp/Z5gXyAfIr6qxDaNlrxgciK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcUmwV%2FbtqFaNnAZGp%2FZ5gXyAfIr6qxDaNlrxgciK%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;458&quot; height=&quot;295&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이를 통해 알 수 있는 것은 우리가 만든 평면은 실제로 평면이 아닐 가능성이 높으며, 만약 실제로 평면이라 하더라도 중력을 받는 힘이 중심부와 끝부분이 다르다는 것이다.&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;쉽게 설명해서, 우리가 만들고 있는 VR과 AR은 1900년대 이전 고전 물리학을 토대로 하여 만들어진 반쪽짜리 공간인 것이다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 공간 안에서 일어나는 일들을 표현하는데에 있어서는 꽤나 최근의 물리학을 근거로 표현되고 있다. ( 최근의 유체역학 같은거 )&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 물리학, 수학, 그리고 공간&lt;/b&gt;&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;/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;(1) 고전물리학 : 뉴턴의 제 1법칙 - 제 3법칙까지&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;(2) 선형대수학 : 선형적인 공간을 표현해야하니... ( Vector, Matrix )&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;(3) 삼각함수 : 삼각함수는 선형대수에 포함되지 않는다. 딱 봐도 곡선&amp;nbsp;( sin / cos / tan )&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;고등학교 때 배운거에 조금만 더 설명을&amp;nbsp;덧붙이면 앞의 내용들을 이해할 수 있다.&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;&lt;span&gt;(수학을 왜 배우는지, 물리학을 왜 배우는지 이제서야 이해함)&lt;/span&gt;&lt;/b&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 좌표축이 3개라고 했지 방향이 어디라고 얘기 안했다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brMpfL/btqFbCMdlmJ/1UIJR8Uf8H1pEWVpW9Z6sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brMpfL/btqFbCMdlmJ/1UIJR8Uf8H1pEWVpW9Z6sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brMpfL/btqFbCMdlmJ/1UIJR8Uf8H1pEWVpW9Z6sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrMpfL%2FbtqFbCMdlmJ%2F1UIJR8Uf8H1pEWVpW9Z6sK%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;364&quot; height=&quot;138&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;좌표축은 3개인데, 표현하는 사람에 따라서 축이 나타내는 방향이 다 다르다.&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;3Ds Max 라는 AutoDesk의 모델링 프로그램에서는 z축이 위 방향을 나타내고,&amp;nbsp;&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;그래픽스 라이브러리인 OpenGL과 DirectX는 y축이 위 방향을 나타내지만, z축의 방향이 서로 다르다.&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;Unity Engine은 X축이 OpenGL에 반대이다.&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;/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;일반적인 시각에서&amp;nbsp;&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;평면에 높이를 표현해야하는 건축계에서는 Z축이 높이,&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;화면에 깊이를 표현해야하는 컴퓨터에서는 Z축이 깊이, 정도로 이해를 하면 될 것 같다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;* 여기에서 설명이 필요한 단어나 용어들은 추후에 용어정리나, 링크를 통해서 전달하도록 하겠다.&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;* 공간에 대해서&amp;nbsp;모르겠다! 하시는 분들은 댓글 남겨주세요~~!&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;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>3D Graphics</category>
      <category>3D</category>
      <category>graphics</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/24</guid>
      <comments>https://parodev.tistory.com/24#entry24comment</comments>
      <pubDate>Fri, 26 Jun 2020 23:56:52 +0900</pubDate>
    </item>
    <item>
      <title>3D 그래픽스 개념 - Point Light, Spot Light</title>
      <link>https://parodev.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99AFF2335C1A7C1022?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99AFF2335C1A7C1022?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AFF2335C1A7C1022&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AFF2335C1A7C1022&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;700&quot; height=&quot;524&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 인공적으로 만든 Light : 인조광?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/998FE2505C1A75E30A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/998FE2505C1A75E30A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998FE2505C1A75E30A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998FE2505C1A75E30A&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;540&quot; height=&quot;180&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 왼쪽에 있는 것이 Point Light, 중앙이 Spot Light,&amp;nbsp; 오른쪽은 광각이 넓은 Spot Light 혹은 IES Light(?)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;a. Point Light&lt;/h4&gt;
&lt;div&gt;Point Light(포인트 라이트) 한 점을 기준으로 주변에 빛을 뿌리는 역할을 합니다.&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;b. Spot Light&lt;/h4&gt;
&lt;div&gt;Spot Light(스팟 라이트)는 한 지점을 원뿔 모양으로 비추는 조명입니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>3D Graphics</category>
      <category>3D</category>
      <category>graphics</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/21</guid>
      <comments>https://parodev.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 20 Dec 2018 02:12:58 +0900</pubDate>
    </item>
    <item>
      <title>[공지] 딴지는 싫어요. 대화는 좋아요.</title>
      <link>https://parodev.tistory.com/notice/13</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;기존의 생활 블로그를 운영한지 3년쯤 ( 실제로는 3달쯤 )&amp;nbsp;지나오면서,&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;많은 사람들이 댓글을 남겼는데 뭔가 글의 흠만 보이면 싸우려고 하는 사람이&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;꼭 인터넷 상에 존재한다는 것을 매번 느끼는 것 같습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;사람이기에 정보의 오류가 조금 존재할 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;최대한 오류없이 작성하도록 노력하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;딴지는 싫습니다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;대화는 좋아합니다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;틀린게 있다면 착하고 바르고 고운말로 지적해주세요.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;재빠르게 내용 확인 후 코멘트를 달겠습니다.&amp;nbsp;&lt;img src=&quot;http://i1.daumcdn.net/deco/contents/emoticon/per_03.gif?v=2&quot; border=&quot;0&quot; class=&quot;txc-emo&quot;&gt;&lt;/p&gt;</description>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/notice/13</guid>
      <pubDate>Wed, 12 Dec 2018 03:25:42 +0900</pubDate>
    </item>
    <item>
      <title>소개글</title>
      <link>https://parodev.tistory.com/pages/introduce</link>
      <description>&lt;p&gt;(내용없음)&lt;/p&gt;</description>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/pages/introduce</guid>
      <pubDate>Tue, 11 Dec 2018 02:03:06 +0900</pubDate>
    </item>
    <item>
      <title>윈도우10 C 디스크 정리 방법 (용량 확보)</title>
      <link>https://parodev.tistory.com/7</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99D3613B5C0FFB9105?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99D3613B5C0FFB9105?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D3613B5C0FFB9105&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D3613B5C0FFB9105&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;700&quot; height=&quot;524&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터를 구입한지 2년정도 되어가는데, 이제는 프로그램을 삭제해도 용량이 작은 SSD의 공간이 확보가 되지 않더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꾸준히 파일관리하는 것도 중요하지만, 임시파일, 다운로드 파일, 윈도우 백업파일과 같은 불필요한 데이터들이 존재하기 때문인데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;용량이 부족한 경우!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows10 내 C 드라이브 용량 정리하는 방법을 알려드릴까 합니다&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;/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;▶ '내 PC'에서 로컬 디스크(C:)에 우측 마우스를 클릭하여 '속성'을 선택해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶ 이후 '일반'탭에서 '디스크 정리'를 눌러주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99DD5F4C5C0E994107?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99DD5F4C5C0E994107?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DD5F4C5C0E994107&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DD5F4C5C0E994107&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;700&quot; height=&quot;561&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9919974C5C0E994221?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9919974C5C0E994221?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9919974C5C0E994221&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9919974C5C0E994221&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;400&quot; height=&quot;513&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;513&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶ 왼쪽이 일반, 오른쪽이 시스템 파일 정리를 눌렀을 때 ( 한 번 정리해서 크게 차이가 없네요 :0&amp;nbsp;- 많을 때 10기가까지도 정리가 됩니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9925B2445C0E99EB34?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9925B2445C0E99EB34?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9925B2445C0E99EB34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9925B2445C0E99EB34&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;400&quot; height=&quot;484&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99EAED445C0E99EC01?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99EAED445C0E99EC01?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EAED445C0E99EC01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EAED445C0E99EC01&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;400&quot; height=&quot;484&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;▶ 파일 삭제를 누르면 디스크 정리가 시작됩니다. 시간은 조금 걸려요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/9994F04D5C0E9A1809?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/9994F04D5C0E9A1809?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9994F04D5C0E9A1809&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9994F04D5C0E9A1809&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;400&quot; height=&quot;159&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PC 관리/Windows</category>
      <category>WINDOWS10</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/7</guid>
      <comments>https://parodev.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 11 Dec 2018 01:54:04 +0900</pubDate>
    </item>
    <item>
      <title>C# / .NET - Exception 예외 종류와 설명</title>
      <link>https://parodev.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99AD74365C0E898208?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99AD74365C0E898208?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AD74365C0E898208&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AD74365C0E898208&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;700&quot; height=&quot;524&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table class=&quot;txc-table&quot; style=&quot;border: none; border-collapse: collapse; width: 100%;&quot; border=&quot;0&quot; width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-width: 1px; border-style: solid; border-color: #000000 #d9d9d9 #d9d9d9 #000000; background-color: #000000; color: #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;Exception Type&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; border-top: 1px solid #000000; background-color: #000000; color: #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;Description&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;Exception&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;.NET Framework에서 모든 예외들의 Main 클래스&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;AmbiguousMatchException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;클래스를 호출했는데, 어떤 클래스인지 확인할 수 없을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;ArgumentException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;메서드의 Argument(Parameter)가 유효하지 않을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;ArgumentNullException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;메서드의 Argument가 허용할 수 없는 null Reference 일 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;ArgumentOutOfRangeException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;메서드의 Argument가 허용할 수 없는 범위 외의 값일 때 발생&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;AppDomainUnloadedException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;로드되지 않은 어플리케이션 도메인에 접근하려고 할 때 발생&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;ArithmeticException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;계산상의 오류가 있을&amp;nbsp;때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;ArrayTypeMismatchException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;두 배열이 동일한 타입의 배열인지 확인한 뒤&amp;nbsp;같지 않을&amp;nbsp;때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;BadImageFormatException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;DLL이나 실행 프로그램의 이미지가 올바르지 않을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;CannotUnloadAppDomainException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;어플리케이션의 도메인 언로드에 실패할 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;ConfigurationException&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;환경설정의 오류가 있을 때 발생&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;ContextMarshalException&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;u&gt;마샬링&lt;/u&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(아래 설명추가)&lt;/span&gt;을 하는데 실패할 때 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;CryptographicExcpetion&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;암호화 작업중 오류가 있을&amp;nbsp;때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;DataException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;.NET 구성 요소를 사용해서 오류가 있을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;DivideByZeroException&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;0으로 나눗셈을 하려고 할 때 발생&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;ExecutionEngineException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;실행 엔진 오류가 있을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 895px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;-&amp;nbsp;.NET 4.5부터는 사용하지 않음&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;ExternalException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;모든 COM interop 예외 및 SEH 예외에 대한 기본 예외 형식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 895px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;lt;대표적인 케이스&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Data.Common.DbException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Data.OleDb.OleDbException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Messaging.MessageQueueException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Runtime.InteropServices.COMException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Runtime.InteropServices.SEHException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;- Web.HttpException&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;FileNotFoundException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;찾는 파일이 없을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;FormatException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;Argument로 쓰이는&amp;nbsp;문자열 서식이 잘못되거나 그 사양에 맞지 않을 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;IndexOutOfRangeException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;배열에서 찾고자 하는 인덱스(순서)가 범위 밖에 있을 때 발생&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;InvalidCastException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;Type Casting 에 실패할 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;NullReferenceException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #d9d9d9; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;참조하는 Reference가 null일 때 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 431px; height: 24px; border-bottom: 1px solid #000000; border-right: 1px solid #d9d9d9; border-left: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;OutOfMemoryException&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 0 5 0 5; width: 464px; height: 24px; border-bottom: 1px solid #000000; border-right: 1px solid #000000; background-color: transparent; color: #000000;&quot; rowspan=&quot;1&quot;&gt;&lt;span&gt;&amp;nbsp;메모리 영역을 넘어가는 값이나 Reference를 가져올&amp;nbsp;때 발생&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;* Exception&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;ApplicationException / SystemException / IOException 등의 부모 클래스&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;* SystemException&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ArithmeticException / ArgumentException / OutOfMemoryExcpetion / &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;NullReferenceException &lt;/span&gt;/ IndexOutOfRangeException 등의 부모 클래스&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;* IOException&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EndOfStreamException / FileNotFoundException / DirectoryNotFoundException 등의 부모 클래스&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;* ArithmeticException ( 계산상의 오류 )&lt;/h3&gt;
&lt;div&gt;- DivideByZeroException&lt;/div&gt;
&lt;div&gt;- OverflowException&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;* ArgumentException ( Argument 오류 - 파라미터 관련 )&lt;/h3&gt;
&lt;div&gt;- ArgumentOutOfRangeException&lt;/div&gt;
&lt;div&gt;- ArgumentNullException&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;* 마샬링&amp;lt;Marshalling&amp;gt;이란?&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;데이터를 전송하기 위한 포맷으로 변환하는 것을 말한다. ( 전송하기 위해 만들었던 포맷을 다시 되돌리는 것은 언마샬링&amp;lt;Unmarshalling&amp;gt;)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C, C++, C#</category>
      <category>.NET</category>
      <category>C#</category>
      <category>exception</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/8</guid>
      <comments>https://parodev.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 11 Dec 2018 01:26:39 +0900</pubDate>
    </item>
    <item>
      <title>MySQL Workbench - UPDATE Query Error ( Code 1175 )</title>
      <link>https://parodev.tistory.com/6</link>
      <description>&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;*에러 메세지가 다음과 같이 발생하는 경우&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-size: 10pt;&quot;&gt;Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: '맑은 고딕', sans-serif; font-size: 10pt;&quot;&gt;that uses a KEY column To disable safe mode, toggle the option in Preferences -&amp;gt; SQL Queries and reconnect.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;* 해결방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Query 입력&lt;/span&gt; :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;SET SQL_SAFE_UPDATES =0;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; letter-spacing: -1px; line-height: 24px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Workbench 설정&lt;/span&gt; :&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; color: #000000; font-family: '맑은 고딕', sans-serif;&quot;&gt;&amp;nbsp;safe 모드 체크 해지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px; clear: none; float: none; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #7f7f7f; font-family: Dotum; font-size: 12px; letter-spacing: -1px; line-height: 24px; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000; font-family: '맑은 고딕', sans-serif;&quot;&gt;이 모든 문제의 원인 : Safe Update&amp;nbsp;모드 상태로 설정되어 있을 때 &amp;rarr;&amp;nbsp;UPDATE시 KEY Column을 이용하지 않으면 업데이트 불가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database</category>
      <category>DATABASE</category>
      <category>MySQL</category>
      <category>rdbms</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/6</guid>
      <comments>https://parodev.tistory.com/6#entry6comment</comments>
      <pubDate>Sun, 9 Dec 2018 21:34:48 +0900</pubDate>
    </item>
    <item>
      <title>윈도우10 Windows.old 폴더 제거/삭제하는 방법</title>
      <link>https://parodev.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Windows7 혹은 Windows8.1&amp;nbsp;에서 Windows10으로 업그레이드 할 때는 기존의 파일이나 폴더가 삭제되지 않고 바로 업그레이드가 진행된다. 하지만 바로 업그레이드 되는 만큼, 기존의 파일들의 충돌 위험성이 있기 때문에&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;Windows.old&lt;/span&gt;&lt;/b&gt;라는 폴더가 C:\안에 생기게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;▼ C:\ 안에 Windows.old 폴더가 생긴 모습 (왠걸 폴더 용량이 6G...)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;▼ 제어판 - 관리 도구 - 디스크 정리에 들어가서 '디스크 정리' 열기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;▼ 윈도우가 깔린 드라이브를 선택하고 확인을 누른 후, 디스크 정리 창이 뜨면&amp;nbsp;&lt;span style=&quot;color: #ff5e00;&quot;&gt;&lt;b&gt;'시스템 파일 정리'&lt;/b&gt;&lt;/span&gt;&amp;nbsp;클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 14.6667px; line-height: 22px;&quot;&gt;▼&lt;span style=&quot;color: #ff5e00;&quot;&gt;&lt;b&gt;&amp;nbsp;'&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;&lt;b&gt;이전 Windows 설치'&lt;/b&gt;&lt;/span&gt;를 체크해주고 오른쪽 하단에 확인 클릭하면 끝!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start; font-size: 14.6667px; line-height: 22px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PC 관리/Windows</category>
      <category>WINDOWS10</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/4</guid>
      <comments>https://parodev.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 9 Dec 2018 21:23:56 +0900</pubDate>
    </item>
    <item>
      <title>윈도우10 hiberfil.sys 파일 제거하는 방법</title>
      <link>https://parodev.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Windows10 에 있는 Hiberfil.sys 파일의 정체!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 윈도우에는 절전모드 / 최대절전모드가 기능이 있습니다. 모두 컴퓨터를 켜 놓은 상태에서 오랜 시간 동안 사용하지 않으면 임시 절전되는 모드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이전에는 노트북에만 적용되는 절전모드 기능이 윈도우7부터는 기본 PC에 적용이 되어있지요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전기를 아껴주는 기능이지만, 최대절전모드(Hibernation) 기능의 경우 SSD나 HDD의 일정 공간을 항상 차지하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;▲ 무려 3GB나 차지하고 있네요. 많은 경우 10GB가 넘어간다고 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;SSD 128GB 중 10GB면 정말 엄청난 공간을 차지하고 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;* 삭제하는 방법&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;▲ 작업표시줄에 '윈도우 아이콘'을 누르고 'cmd'를 치면 명령 프롬프트가 나옵니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;명령프롬프트를 마우스 오른쪽 클릭 - 관리자 권한으로 실행 - 예(Y) 를 눌러주세요&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;▲ powercfg -h off 라고 쳐주시면 아래와 같이 hiberfil.sys 파일이 없어져있음을 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;* 파일이 안 보이시는 분들 같은 경우에는 C:\ 에서&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;[보기 탭 - 맨 오른쪽 옵션 - 폴더 및 검색옵션 변경] 에서&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;숨김 파일, 폴더 및 드라이브 표시!!&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;보호된 운영 체제 파일 숨기기(권장) 해제!!&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;하시면 파일이 보여요~!!&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PC 관리/Windows</category>
      <category>WINDOWS10</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/3</guid>
      <comments>https://parodev.tistory.com/3#entry3comment</comments>
      <pubDate>Sun, 9 Dec 2018 21:21:05 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 무선랜 인터넷 끊김 해결방법 (rtl8723be)</title>
      <link>https://parodev.tistory.com/2</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;rails server 개발 때문에 멀티부팅으로 리눅스를 설치하고 나니&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;무선랜이 갑자기 중간에 뚝뚝 끊기기 시작했다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 와중에 구글신 강림해서 또 열심히 검색한 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;http://askubuntu.com/questions/590414/wifi-problems-with-rtl8723be-in-ubuntu-14-04&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://askubuntu.com/questions/590414/wifi-problems-with-rtl8723be-in-ubuntu-14-04&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 커널에 설치된 드라이버 외에 새로 설치해야 한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&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;script&gt;      (adsbygoogle = window.adsbygoogle || []).push({}); &lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Install required packages&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;sudo apt-get install build-essential git &lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;git clone new realtek wifi modules&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/lwfinger/rtlwifi_new/ &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;enter the directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd rtlwifi_new &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;build it&lt;/li&gt;
&lt;li&gt;&lt;code&gt;make &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;install&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo make install &lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Now you can reboot or unload/load modules&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;unload modules&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo modprobe -r rtl8723be &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;load new module&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo modprobe rtl8723be &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if it still doesn't work, try the sollution from &lt;a href=&quot;http://askubuntu.com/questions/632719/my-wifi-drops-the-connection-after-a-few-minutes-realtek8723be&quot;&gt;this post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo &quot;options rtl8723be fwlps=0&quot; | sudo tee /etc/modprobe.d/rtl8723be.conf &lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 방법으로 진행 후에는 정상적으로 작동하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(끝나고 재부팅 안하면 잘 안 되는거 같기도...)&lt;/p&gt;</description>
      <category>PC 관리/Linux</category>
      <category>Linux</category>
      <category>RTL8723E</category>
      <category>네트워크</category>
      <author>kgenots</author>
      <guid isPermaLink="true">https://parodev.tistory.com/2</guid>
      <comments>https://parodev.tistory.com/2#entry2comment</comments>
      <pubDate>Sun, 9 Dec 2018 21:09:59 +0900</pubDate>
    </item>
  </channel>
</rss>