<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>닉군의 좌충우돌 창업기 [개인사업자] [1인 창업]</title>
    <link>https://nicgoon.tistory.com/</link>
    <description>IT 관련 사업을 하는 닉군 입니다.
그리 거창하진 않구요.
이제 막 시작해 1인 창업자 입니다.

언젠가 대기업이 되겠죠. ^^</description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 01:27:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>창업닉군</managingEditor>
    <image>
      <title>닉군의 좌충우돌 창업기 [개인사업자] [1인 창업]</title>
      <url>https://tistory1.daumcdn.net/tistory/1547827/attach/9ce00bb519d044e280d23da8e289782a</url>
      <link>https://nicgoon.tistory.com</link>
    </image>
    <item>
      <title>Just SVG</title>
      <link>https://nicgoon.tistory.com/287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포토샵을 쓰려고 보니, 동작을 안해서(결제가 안됐나?), 이미지 에디터를 찾아보니, 설치할 필요도 없는 웹 에디터가 있어 소개해 드립니다. 한 번 쓰려고 설치하지 않아도 되니, 하드디스크가 지저분해 지지 않고, 편리하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://j-svg.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Just SVG&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://j-svg.com&quot;&gt;https://j-svg.com&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;처음 접속하면, Welcome 창이 뜨는데, 그냥 새작업을 선택해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vKwwV/btsuGodnivD/4VddrlfKme3n4qnKS4FkE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vKwwV/btsuGodnivD/4VddrlfKme3n4qnKS4FkE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vKwwV/btsuGodnivD/4VddrlfKme3n4qnKS4FkE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvKwwV%2FbtsuGodnivD%2F4VddrlfKme3n4qnKS4FkE1%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;1920&quot; height=&quot;1060&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀다운 메뉴에 튜토리얼 보며 사용방법 익힌 뒤 원하시는 그림을 마구 마구 그리시면됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhvLyJ/btsuIzyOSti/iMtKtYSdy7jvgjeIAyEkZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhvLyJ/btsuIzyOSti/iMtKtYSdy7jvgjeIAyEkZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhvLyJ/btsuIzyOSti/iMtKtYSdy7jvgjeIAyEkZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhvLyJ%2FbtsuIzyOSti%2FiMtKtYSdy7jvgjeIAyEkZk%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;1920&quot; height=&quot;1060&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능을 써보니, Path를 이용한 드로잉 부터, 마스크, 이펙트, 그라디언트등의 기능이 있어 간단한 이미지 그리는데 아주 편리하네요.&lt;/p&gt;</description>
      <category>Tool 소개</category>
      <category>j-svg.com</category>
      <category>Just SVG</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/287</guid>
      <comments>https://nicgoon.tistory.com/287#entry287comment</comments>
      <pubDate>Tue, 19 Sep 2023 18:32:44 +0900</pubDate>
    </item>
    <item>
      <title>공공데이터포털을 이용한 PHP 주식시세</title>
      <link>https://nicgoon.tistory.com/286</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공공데이터 포털에서는 금융감독원에서 제공하는 주식시세의 OPEN API를 이용할 수 있습니다. 이 OPEN API를 이용해 시세를 정보를 얻어오는 샘플 코드를 만들어 보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공공 데이터 포털에 접속 후 금융위원회에서 제공하는 주식시세 정보 aip 활용신청을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230107a_page1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VzNPz/btrVzFnfivq/LnddZDqQcsj4WmC5SoIW11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VzNPz/btrVzFnfivq/LnddZDqQcsj4WmC5SoIW11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VzNPz/btrVzFnfivq/LnddZDqQcsj4WmC5SoIW11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVzNPz%2FbtrVzFnfivq%2FLnddZDqQcsj4WmC5SoIW11%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230107a_page1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230107a_page2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HHDtL/btrVEqu8LRE/pPtY0BSvRxaeCDK1q697o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HHDtL/btrVEqu8LRE/pPtY0BSvRxaeCDK1q697o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HHDtL/btrVEqu8LRE/pPtY0BSvRxaeCDK1q697o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHHDtL%2FbtrVEqu8LRE%2FpPtY0BSvRxaeCDK1q697o0%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230107a_page2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230107a_page3.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIP8FB/btrVzUYKVD5/bhf8c3HF2sOPqmKIk452N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIP8FB/btrVzUYKVD5/bhf8c3HF2sOPqmKIk452N0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIP8FB/btrVzUYKVD5/bhf8c3HF2sOPqmKIk452N0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIP8FB%2FbtrVzUYKVD5%2Fbhf8c3HF2sOPqmKIk452N0%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230107a_page3.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&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;그럼 아래와 같이 활용신청이 나고 사용가능한 상태가 됩니다. 페이지 내용에 들어 가면 간단히 api를 활용할 수 있는 상태가 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230107a_page4.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWkBFl/btrVBR01eCr/DC7R5NgVlKQo4ghnEqSoT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWkBFl/btrVBR01eCr/DC7R5NgVlKQo4ghnEqSoT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWkBFl/btrVBR01eCr/DC7R5NgVlKQo4ghnEqSoT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWkBFl%2FbtrVBR01eCr%2FDC7R5NgVlKQo4ghnEqSoT0%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230107a_page4.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&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;REST API 이므로 아래와 같이 간단한 코드로 사용이 가능합니다. 주의할점은 http_build_query 가 자동으로 urlEncoding까지 하므로, &lt;b&gt;일반 인증키(decoding)&lt;/b&gt;을 사용하도록 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673098815239&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php

function get_search($serviceKey, $stdt){ // 상품검색명령

    $param = array(
        'serviceKey'=&amp;gt;$serviceKey,
        'stdt'=&amp;gt;$stdt
    );

    $url = &quot;https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService/getStockPriceInfo&quot; . &quot;?&quot; . http_build_query($param);
    echo $url . PHP_EOL;
    $ch = curl_init();                                 //curl 초기화
    curl_setopt($ch, CURLOPT_URL, $url);               //URL 지정하기
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    //요청 결과를 문자열로 반환 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);      //connection timeout 10초 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   //원격 서버의 인증서가 유효한지 검사 안함
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return $response;

}

echo get_search([일반 인증키(Decoding)], &quot;2023&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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>PHP</category>
      <category>php</category>
      <category>공공데이터포털</category>
      <category>주식시세</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/286</guid>
      <comments>https://nicgoon.tistory.com/286#entry286comment</comments>
      <pubDate>Sat, 7 Jan 2023 22:42:14 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 사용자 계정 관리 명령</title>
      <link>https://nicgoon.tistory.com/285</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;useradd&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useradd 명령으로 계정을 만들면 홈디렉토리를 만들지 않고 유저가 추가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useradd [옵션] [로그인ID]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;adduser&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;adduser 명령으로 계정을 만들면 홈 디렉토리를 함께 만들어 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;adduser [옵션] [로그인ID]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;usermod&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 계정의 정보를 수정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;usermod [옵션] [로그인ID]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;userdel&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 계정을 삭제하며, -r 옵션을 주면 홈 디렉토리도 함께 삭제 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;userdel [옵션] [로그인ID]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/285</guid>
      <comments>https://nicgoon.tistory.com/285#entry285comment</comments>
      <pubDate>Tue, 3 Jan 2023 01:29:31 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 사용자 계정 관련 파일</title>
      <link>https://nicgoon.tistory.com/284</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/passwd&lt;/b&gt;&lt;/h4&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;로그인ID:x:UID:GID:설명:홈디렉토리:로그인 셀&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 로그인ID : 로그인시 사용되는 ID 입니다. 중복되지 않는다면, ':' 와 '엔터문자'를 제외한 모든 문자를 사용할 수 있습니다. 다른 운영체제와 연동을 고려한다면, 8자로 제한하는 것이 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) x : 예전에 패스워드 저장 공간으로 사용했지만, 보안상 /etc/shadow 에 저장하기 시작하며, 더 이상 사용하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) UID : 시스템의 사용자를 구분하기 위해 사용하는 번호. 일반적으로 0~999번과 65535번은 시스템 사용자를 위해 예약되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) GID : 유저가 소속된 그룹ID, 유저는 무조건 하나의 그룹에 소속되며, 지정하지 않으면, 자신의 아이디로 지정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 홈디렉토리 : 사용자 계정에 할당된 홈 디렉토리 정대 경로를 기록합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 로그인 셀 : 사용자가 로그인 시 기본적으로 동작하는 셸입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/shadow&lt;/b&gt;&lt;/h4&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;로그인ID:암호(패스워드):최종 변경일:MIN:MAX:WARNING:INACTIVE:EXPIRE:Fag&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 로그인ID : 사용자 계정의 이름으로 /etc/passwd 파일의 로그인 ID와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 암호(패스워드) : 실제 비밀번호가 암호화되어 저장된다. 비밀번호는 한방향 암호여서 복호화 할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 최종 변경일 : 암호가 마지막으로 변경된 날짜를 지정합니다. 일반적인 형태가 아니라, 유닉스 전통에 따라 1970년 1월 1일을 기준으로 1일에 1씩 더해가며 저장이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) MIN : 암호변경 후 최소 사용해야 하는 기간 입니다. 예를 들어 7이면 7일간 변경없이 사용해야 하는 기간 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) MAX : 암호를 사용할 수 있는 최대기간 입니다. 80이면 80일이 지나기전에 암호를 변경해야 합니다. 이 기간이 지나면 새로운 암호를 입력해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) WARNING : 암호가 만료되기 전에 경고를 시작하는 날 수 입니다. 10 이면 암호가 만료되기 10일 전부터 로그인할 때 경고 메시지가 나타납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) INACTIVE : 암호가 만료된 후에도 이 항목에 지정한 날 수 동안은 로그인이 가능하며, 이 기간 동안에도 패스워드를 변경하지 않으면, 계정이 잠기게됩니다. 이럴 경우 관리자에게 문의해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) EXPIRE : 사용자 계정이 만료되는 날로, 이 날짜가 지나면 해당 계정으로 로그인 할 수 없습니다. 최종변경일 처럼 1970년 1월 1일을 기준으로 한 날 수로 표시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9) Flag : 향후 사용할 목적으로 비워둔 항목입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/login.defs&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 계정의 설정과 관련된 기본값을 정의한 파일입니다. 각 항목은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) MAIL_DIR : 기본메일 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WAN_AGE : 패스워드 에이징&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) UID_MIN, UID_MAX : 사용자 계정의 UID 범위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) SYS_UID_MIN, SYS_UID_MAX : 시스템 계정의 UID 범위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) GID_MIN, GID_MAX : 사용자 계정의 GID 범위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) SYS_GID_MIN, SYS_GID_MAX : 시스템 계정의 GID 범위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) UMASK : umask 값 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) USERGROUPS_ENAB : 사용자 계정 삭제 시 그룹 삭제 여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9) ENCRYPT_METHOD : 패스워드 암호화 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/group&lt;/b&gt;&lt;/h4&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;그룹이름:x:GID:그룹멤버&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 그룹이름 : 그룹의 이름입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) x : 그룹의 암호를 저장하는 곳이었지만 현재는 /etc/gshadow 파일에 저장하고 비워 둡니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) GID : 그룹을 식별하는 번호 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 그룹멤버 : 그룹에 속한 멤버들이 ,로 구분되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;/etc/gshadow&lt;/b&gt;&lt;/h4&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;1) 그룹이름 : 그룹의 이름입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 그룹암호 : 암호화된 그룹 암호입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 관리자 : 그룹의 암호나 멤버를 바꿀 수 있는 사용자 계정으로 여러개일 경우 쉼표로 구분한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/284</guid>
      <comments>https://nicgoon.tistory.com/284#entry284comment</comments>
      <pubDate>Tue, 3 Jan 2023 01:16:58 +0900</pubDate>
    </item>
    <item>
      <title>window 장고설치</title>
      <link>https://nicgoon.tistory.com/283</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;파이썬 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬이 설치되었나를 확인하려면 터미널을 열고 python을 입력해 봅니다. 없다면 &lt;a href=&quot;https://python.org&quot;&gt;https://python.org&lt;/a&gt; 를 방문해 파이썬을 다운로드 후 설치해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230102c.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZFpkS/btrU55tlVN6/6nUfkaewPALHABa3HMwuh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZFpkS/btrU55tlVN6/6nUfkaewPALHABa3HMwuh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZFpkS/btrU55tlVN6/6nUfkaewPALHABa3HMwuh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZFpkS%2FbtrU55tlVN6%2F6nUfkaewPALHABa3HMwuh1%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230102c.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;아나콘다&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬의 여러 모듈을 한 번에 다운로드 받기 귀찮으므로, https://www.anaconda.com 아나콘다를 설치해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230102c_anaconda.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6b5or/btrVf7vWfp7/eAE7k06XlyW6BAGeMZ7yKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6b5or/btrVf7vWfp7/eAE7k06XlyW6BAGeMZ7yKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6b5or/btrVf7vWfp7/eAE7k06XlyW6BAGeMZ7yKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6b5or%2FbtrVf7vWfp7%2FeAE7k06XlyW6BAGeMZ7yKk%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;20230102c_anaconda.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;django 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 아래와 같이 입력하면 django가 설치 되고 종료 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ pip install django&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬</category>
      <category>window</category>
      <category>장고</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/283</guid>
      <comments>https://nicgoon.tistory.com/283#entry283comment</comments>
      <pubDate>Mon, 2 Jan 2023 23:27:52 +0900</pubDate>
    </item>
    <item>
      <title>리액트 설치 및 기본</title>
      <link>https://nicgoon.tistory.com/282</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;공식사이트 : &lt;a href=&quot;https://ko.reactjs.org/docs/add-react-to-a-website.html#add-react-in-one-minute&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.reactjs.org/docs/add-react-to-a-website.html#add-react-in-one-minute&lt;/a&gt; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트 코드는 단 2줄이면 끝이 납니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672664377281&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://unpkg.com/react@18/umd/react.development.js&quot; crossorigin&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/react-dom@18/umd/react-dom.development.js&quot; crossorigin&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 기본형은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672664689638&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/react@18/umd/react.development.js&quot; crossorigin&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/react-dom@18/umd/react-dom.development.js&quot; crossorigin&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;div id=&quot;like_button_container&quot;&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;

    const e = React.createElement;

    class LikeButton extends React.Component {
        constructor(props) {
            super(props);
            this.state = { liked: false };
        }

        render() {
            if (this.state.liked) {
            return 'You liked this.';
            }

            return e(
            'button',
            { onClick: () =&amp;gt; this.setState({ liked: true }) },
            'Like'
            );
        }
    }

    const domContainer = document.querySelector('#like_button_container');
    const root = ReactDOM.createRoot(domContainer);
    root.render(e(LikeButton));

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아래 문장으로 루트를 지정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672664992531&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const domContainer = document.querySelector('#like_button_container');
const root = ReactDOM.createRoot(domContainer);&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_1672665072588&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root.render(e(LikeButton));&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;선언된 컴포넌트는 버튼인데 클릭시 버튼이 사라지고 'You Liked this'버튼으로 바뀝니다. 이 기능의 핵심은 'this.state = { liked: false };'의 state 값을 변경시키는데 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>React.js</category>
      <category>리액트</category>
      <category>설치</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/282</guid>
      <comments>https://nicgoon.tistory.com/282#entry282comment</comments>
      <pubDate>Mon, 2 Jan 2023 22:14:11 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell 파일 사용 명령</title>
      <link>https://nicgoon.tistory.com/281</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Get-Content&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 내용 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ Get-Content [파일경로]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Get-Content -wait&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 내용을 출력하고 대기 리눅스의 tail 처럼 사용이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ Get-Content [파일경로] -wait&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;copy&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ copy 파일경로1 파일경로2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;rd&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 삭제 (디렉토리 삭제도 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ rd 파일경로1 파일경로2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mv&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ mv 파일경로1 파일경로2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mklink&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심볼릭 링크, 하드링크 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ mklink [옵션] 원본파일명 생성될링크명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PowerShell</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/281</guid>
      <comments>https://nicgoon.tistory.com/281#entry281comment</comments>
      <pubDate>Mon, 2 Jan 2023 19:06:05 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell 디렉토리 사용명령</title>
      <link>https://nicgoon.tistory.com/280</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Get-Location&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 위치 확인, 현재 디렉토리 절대 경로명 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ Get-Location&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cd [원하는 디렉토리명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;dir&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 디렉토리 리스트 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ dir&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$mkdir [디렉토리명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;rd&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$rd [디렉토리명]&lt;/p&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>PowerShell</category>
      <category>CD</category>
      <category>dir</category>
      <category>Get-Location</category>
      <category>mkdir</category>
      <category>RD</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/280</guid>
      <comments>https://nicgoon.tistory.com/280#entry280comment</comments>
      <pubDate>Mon, 2 Jan 2023 18:53:24 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 파일 사용 명령</title>
      <link>https://nicgoon.tistory.com/279</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;cat&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 내용을 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cat [옵션] 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;more&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 내용을 화면 단위로 꾾어서 출력해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ more [옵션] 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;less&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;more 명령의 보강판 파일 내용을 앞뒤로 스크롤 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ less [옵션] 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;tail&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 뒷 부분의 몇 줄을 출력해 줍니다. -f 옵션을 주면 종료되지 않고 내용이 추가 될 때 마다 출력해 주므로, 프로그램의 실행 로그를 보기 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ tail&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;cp&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 복사할 때 cp 명령을 사용한다. cp 명령으로 디렉토리 도 복사할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cp [옵션] 파일1(디렉토리) 파일2(디렉토리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mv&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 이동한다. 하지만 목적지 파일이나 디렉토리 이름을 달리 하면 이름이 변경됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ mv [옵션] 파일1(디렉토리) 파일2(디렉토리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;rm&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 삭제하는 명령, -r 옵션을 지정하면 디렉토리도 삭제할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ rm [옵션] 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ln&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일의 링크를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ ln [옵션] 원본파일 링크파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;touch&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빈 파일을 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ touch [-acm] [-r ref_file | -t time ] 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;grep&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지정한 패턴이 포함된 행을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ grep [옵션] 패턴 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;find&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 검색하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ find [경로 검색 조건] [동작]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;whereis, which&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정명령이 있는 위치를 찾아 절대 경로를 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ whereis [옵션] 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <category>cat</category>
      <category>more</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/279</guid>
      <comments>https://nicgoon.tistory.com/279#entry279comment</comments>
      <pubDate>Mon, 2 Jan 2023 17:26:22 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 디렉토리 사용명령</title>
      <link>https://nicgoon.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 디렉토리 사용명령을 정리해 둡니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;pwd &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 위치를 확인한다. 현재 디렉토리의 절대경로명 출력.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ pwd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cd [원하는디렉토리명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ls&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 디렉토리 리스트 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ ls [옵션] [디렉토리(파일)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리를 생성한다. (디렉토를 여러개 만들려면 띄워쓰기를 여러개 적어주면된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ mkdir [디렉토리명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;rmdir&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ rmdir [옵션] 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/278</guid>
      <comments>https://nicgoon.tistory.com/278#entry278comment</comments>
      <pubDate>Mon, 2 Jan 2023 17:02:39 +0900</pubDate>
    </item>
    <item>
      <title>Single-File Components vue.js</title>
      <link>https://nicgoon.tistory.com/277</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SFC 는 뷰의 컴포넌트를 따로 분리하는 기법입니다.&lt;br /&gt;확장자는 *.Vue 이고, script, template, style 태그로 구성되어 있습니다. script, style 태그는 흔히 알고 있겠지만, template 태그는 대체로 잘 사용되지 않는 태그 입니다.이 태그는 querySelector 로 속이 검색되지 않으며 브라우저에 바로 표시가 되지 않습니다. 주로 html 태그 조각을 담아두는 데 사용이 됩니다. template 태그 대신 div나 일반 태그에 담고 감춰두면 되지 않을까 라고 생각되시는 분들도 있으시겠지만, tr, td 같은 태그들은 template가 아니면, 넣어두고 꺼낼 수가 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조는 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672638970426&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
export default {
  data() {
    return {
      greeting: 'Hello World!'
    }
  }
}
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;p class=&quot;greeting&quot;&amp;gt;{{ greeting }}&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;style&amp;gt;
.greeting {
  color: red;
  font-weight: bold;
}
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모듈화 된 컴포넌트를 꺼내어 쓰려면, 아래와 같이 사용하면됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672643513614&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Vue.js</category>
      <category>sfc</category>
      <category>Single-File Components</category>
      <category>vue.js</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/277</guid>
      <comments>https://nicgoon.tistory.com/277#entry277comment</comments>
      <pubDate>Mon, 2 Jan 2023 16:12:03 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js install</title>
      <link>https://nicgoon.tistory.com/276</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서: &lt;a href=&quot;https://vuejs.org/guide/quick-start.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vuejs.org/guide/quick-start.html&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;Vue.js의 인스톨은 CDN을 사용하는 경우 상당히 간단합니다. 한 줄만 추가하면됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672601592417&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://unpkg.com/vue@3/dist/vue.global.js&quot;&amp;gt;&amp;lt;/script&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;그리고 가장 간단한 Hello Vue 예제 입니다. '.mount()'&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메소드에 쿼리셀렉터로 적용대상을 지정함을 눈여겨 봐두면 될것 같습니다. 기본 형태는 data 메소드를 통해 message값을 던저 주는 예제 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672601783176&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://unpkg.com/vue@3/dist/vue.global.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;div id=&quot;app&quot;&amp;gt;{{ message }}&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
  const { createApp } = Vue

  createApp({
    data() {
      return {
        message: 'Hello Vue!'
      }
    }
  }).mount('#app')
&amp;lt;/script&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;그리고 아래는 ES Module Build 를 위한 예제 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672601835954&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;app&quot;&amp;gt;{{ message }}&amp;lt;/div&amp;gt;

&amp;lt;script type=&quot;module&quot;&amp;gt;
  import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

  createApp({
    data() {
      return {
        message: 'Hello Vue!'
      }
    }
  }).mount('#app')
&amp;lt;/script&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Vue.js</category>
      <category>install</category>
      <category>vue.js</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/276</guid>
      <comments>https://nicgoon.tistory.com/276#entry276comment</comments>
      <pubDate>Mon, 2 Jan 2023 04:39:02 +0900</pubDate>
    </item>
    <item>
      <title>PHP 8.2 업데이트</title>
      <link>https://nicgoon.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근 php 8.2가 업데이트 되어 글을 남깁니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Readonly Classes&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스를 선언할 때 readonly 키워드를 앞에 붙여 선언할 수 있게 되었습니다. readonly로 클래스를 선언하면, type을 꼭 지정해 프로퍼티를 선언해야 하며, static property를 선언할 수 없습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672592135979&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php

// 8.2 버전부터는 AllowDynamicProperties 가 Deprecated 경고가 뜬다고 합니다.
#[AllowDynamicProperties]
readonly class Foo {
}

// Fatal error: Cannot apply #[AllowDynamicProperties] to readonly class Foo
?&amp;gt;


&amp;lt;?php
readonly class Foo
{
    public $bar;
}

// Fatal error: Readonly property Foo::$bar must have type
?&amp;gt;


&amp;lt;?php
readonly class Foo
{
    public static int $bar;
}

// Fatal error: Readonly class Foo cannot declare static properties
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DNF&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNF 유형을 사용하면 교집합과 합집합을 결합할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;stand-alone type : null, false and true&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null, false, true를 int 같은 타입으로 선언해 사용할 수 있습니다. 클래스의 멤버 변수로 지정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;New &quot;Random&quot; extension&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Random 기능이 확장되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Constants&amp;nbsp;in&amp;nbsp;traits&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;trait 에 상수 선언이 가능해졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Deprecate&amp;nbsp;dynamic&amp;nbsp;properties&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dynamic properties가 지원이 중단 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PHP</category>
      <category>8.2</category>
      <category>php</category>
      <category>readonly class</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/275</guid>
      <comments>https://nicgoon.tistory.com/275#entry275comment</comments>
      <pubDate>Mon, 2 Jan 2023 02:07:32 +0900</pubDate>
    </item>
    <item>
      <title>javascript, optional, chaining</title>
      <link>https://nicgoon.tistory.com/274</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 중첩된 값이 있다면, 각각의 단계별로 객체가 존재하나 여부를 확인하고 값을 꺼내는 코드를 작성해야 합니다. 옵셔널 체이닝 없이 꺼낸다면, 코드가 길어지고, 무엇보다 직관적이지 못합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672581414182&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const some = {
        deeply:{
            nested:{
                value:99
            }
        },
        dialog:{
            say:&quot;hello&quot;
        }
    };

    const x = some &amp;amp;&amp;amp; some.deeply &amp;amp;&amp;amp; some.deeply.nested &amp;amp;&amp;amp; some.deeply.nested.value;
    const y = some &amp;amp;&amp;amp; some.dialog &amp;amp;&amp;amp; some.dialog.say &amp;amp;&amp;amp; some.dialog.say;
    console.log(x, y);

&amp;lt;/script&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;하지만 옵셔널 체이닝을 사용하면, 아래와 같이 코드가 간결해 지며, 중간에 null 이나 undefine을 만나면 undefine을 반환하고 코드를 수행하지 않습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672581706058&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const some = {
        deeply:{
            nested:{
                value:99
            }
        },
        dialog:{
            say:&quot;hello&quot;
        }
    };

    const x = some?.deeply?.nested?.value;
    const y = some?.dialog?.say;
    console.log(x, y);

&amp;lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>Chaining</category>
      <category>javascript</category>
      <category>optional</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/274</guid>
      <comments>https://nicgoon.tistory.com/274#entry274comment</comments>
      <pubDate>Sun, 1 Jan 2023 23:02:08 +0900</pubDate>
    </item>
    <item>
      <title>javascript, 디스트럭처링(destructuring)</title>
      <link>https://nicgoon.tistory.com/273</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;디스트럭처링은 객체나 배열에서 값을 쉽게 가지고 오는 방법입니다. 디스트럭처링이 없을 때는 객체나 배열에서 값을 가지고 올 때 다소 코드가 길었지만, 아래 예들 처럼 디스트럭처링을 사용한다면, 코드가 상당히 간결해 질 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 아래와 같이 사용해 값들을 가지고 왔습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672577487179&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;

    const hotel = {
        door:3,
        light:6
    };

    const door = hotel.door;
    const light = hotel.light;

    console.log(door, light);

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 아래와 같이 디스트럭처링을 하면 길이가 상당히 짧아 집니다. 아래 처럼 변수를 또 나눌 일은 없지만, 함수에서 결과로 객체를 받을 경우에 사용한다면 상당히 효과적입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672577585458&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const hotel = {
        door:3,
        light:6
    };

    const {door, light} = hotel;
    console.log(door, light);

&amp;lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;배열&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 방법&lt;/p&gt;
&lt;pre id=&quot;code_1672578087179&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const soldier = ['jake', 'jun', 'jane', 'Paul'];

    const soldier_0 = soldier[0];
    const soldier_2 = soldier[2];
    console.log(soldier_0, soldier_2);

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스트럭쳐&lt;/p&gt;
&lt;pre id=&quot;code_1672578104983&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const soldier = ['jake', 'jun', 'jane', 'Paul'];
    const [soldier_0, , soldier_2,] = soldier;
    console.log(soldier_0, soldier_2);

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;중첩된 디스트럭쳐&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 속에 배열이 있는 경우 아래와 같은 방법으로 가지고 올 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672579115744&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;

    const jade = {
        mountain:[&quot;한라산&quot;,&quot;백두산&quot;],
        river:[&quot;한강&quot;,&quot;낙동강&quot;]
    };
    const {mountain:[choice_m],river:[,river_nak]} = jade;
    console.log(choice_m, river_nak);

&amp;lt;/script&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;&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;</description>
      <category>JavaScript</category>
      <category>Destructuring</category>
      <category>javascript</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/273</guid>
      <comments>https://nicgoon.tistory.com/273#entry273comment</comments>
      <pubDate>Sun, 1 Jan 2023 22:02:33 +0900</pubDate>
    </item>
    <item>
      <title>javascript, for-in, for-of</title>
      <link>https://nicgoon.tistory.com/272</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;for-of : 배열의 값을 반복해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for-in : 객체의 키값으로 반복을 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 소스로 차이를 느껴보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1672574033206&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;

    const one = [6,8,2,4,0];
    for( let o of one ){
        console.log('o', o);
    }

    const two = {'과일':'사과','나라':'미쿡','언어':'바디랭귀지'};
    for( let key in two ){
        console.log( key, two[key] );
    }

&amp;lt;/script&amp;gt;&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>for-in</category>
      <category>for-of</category>
      <category>javascript</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/272</guid>
      <comments>https://nicgoon.tistory.com/272#entry272comment</comments>
      <pubDate>Sun, 1 Jan 2023 20:54:08 +0900</pubDate>
    </item>
    <item>
      <title>javascript, var, let, const</title>
      <link>https://nicgoon.tistory.com/271</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;javascript는 다른 언어와 다르게 선언하는 방법이 var 하나만 있었습니다. c++, c# 처럼 형식을 정의하지 않았고 변수로 바로 사용하기에 하나만 밖에 필요가 없었습니다. 하지만 javascript는 눈부시게 발전해 복잡하고, 기능이 다양해 지며 아주 많은 문제를 만들어 냈습니다. 특히 promise 전까지 함수 중첩 지옥에서는 전역변수인 var는 정말 오류를 만들기 쉬웠습니다. 이를 극복하기 위해 ES2015에서는 let과 const가 도입됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;var, let&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var는 선언된 바깥 스코프에서도 사용이 가능합니다. 같은 function 속이 scope 입니다. let 을 실행하면 외부에서 사용이 불가능합니다. try-catch 문 같이 try 부분에 사용된 변수중 catch로 전달될 값이 있다면, var 그 외에 일반적인 경우 let을 사용하면 좋을 듯 합니다. 아래의 코드를 실행해 보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1672571995177&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;

    for(var i=0;i&amp;lt;10;i++){

    }
    console.log(&quot;i&quot;, i);

    for(let u=0;u&amp;lt;9;u++){

    }
    console.log(&quot;u&quot;, u);

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const는 상수를 정의할 때 사용합니다. javascript같은 경우 언어가 유연해, override 되기 쉬온데, cosnt를 사용하면 그럴 우려는 없습니다. 하지만, const 내부의 값들은 변경이 가능합니다. 아래의 코드를 실행해 차이를 느껴보세요.&lt;/p&gt;
&lt;pre id=&quot;code_1672572469500&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;

    let spr = {in:1};
    console.log('spr', spr);

    spr.in += 4;
    console.log('spr', spr);

    spr = {in:2};
    console.log('spr', spr);



    const ho = {out:1};
    console.log('ho', ho);

    ho.out+= 6;
    console.log('ho', ho);

    ho = {out:3};
    console.log('ho', ho);

&amp;lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>const</category>
      <category>javascript</category>
      <category>let</category>
      <category>Var</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/271</guid>
      <comments>https://nicgoon.tistory.com/271#entry271comment</comments>
      <pubDate>Sun, 1 Jan 2023 20:28:44 +0900</pubDate>
    </item>
    <item>
      <title>python WebSocket Server</title>
      <link>https://nicgoon.tistory.com/270</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;WebSockets 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 구현하기 위해서는 먼저, python과 pip로 websockets 를 설치하셔야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹소켓 설치&lt;br /&gt;$ pip install websockets&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치확인&lt;br /&gt;$ pip list&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;웹소켓 서버 코딩&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 간단해서 사실 놀랐습니다. websockets.serve 함수에 인자로 각각 '실행메소드', 'ip 혹은 주소', 'port'를 넣어주고, 응답을 대기하는 동안 종료되지 않도록. asyncio.get_event_loop().run_until_complete, asyncio.get_event_loop().run_forever를 이용해 실행해 주시면되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 복잡하지 않도록 응답을 그대로 돌려 주는 에코 서버로 만들었습니다. 소스는 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672562641591&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import asyncio;
import websockets;

port = 10000

async def accept(self, path):
    while True:
        data = await self.recv()
        print(&quot;receive:&quot; + data)
        send_str = 'echo : ' + data
        await self.send(send_str)
        print('send =&amp;gt; ' + send_str)

print(&quot;웹소켓 시작 포트넘버:&quot; + str(port))
start_server = websockets.serve(accept, &quot;localhost&quot;, port)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
print(&quot;End Service!&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;클라이언트 코딩&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 html과 javascript를 통해 예제를 만들어 봤습니다. 대체로, websocket.onopen, websocket.onclose 등의 함수를 사용하지만 저는 괄호가 중첩되는 것이 싫어 이벤트 형식으로 만들었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672562800358&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;title&amp;gt;WebSocket 테스트&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
    .spacer {margin-bottom: 1rem;}
&amp;lt;/style&amp;gt;

&amp;lt;div class=&quot;spacer&quot;&amp;gt;
    &amp;lt;span&amp;gt;상태 : &amp;lt;/span&amp;gt;&amp;lt;span id=&quot;status&quot;&amp;gt;접속안됨&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&quot;recived&quot; class=&quot;spacer&quot; style=&quot;height: 15rem; border: #aaa 1px solid; padding: 0.5rem; max-width: 30rem;&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;spacer&quot;&amp;gt;
    &amp;lt;input id=&quot;message&quot; /&amp;gt;
    &amp;lt;button id=&quot;send&quot;&amp;gt;보내기&amp;lt;/button&amp;gt;
    &amp;lt;button id=&quot;close&quot;&amp;gt;종료&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;

    const url = 'ws://localhost:10000';
    const ws = new WebSocket(url);

    const E_Receive = document.querySelector('#recived');
    const E_Message = document.querySelector('#message');
    const E_Status = document.querySelector('#status');
    const E_Btn_Send = document.querySelector('#send');
    const E_Btn_Close = document.querySelector('#close');

    // 웹소켓 이벤트 처리.
    ws.addEventListener(&quot;open&quot;, e=&amp;gt;{
        E_Status.innerHTML = &quot;접속&quot;;
    });
    ws.addEventListener(&quot;message&quot;, e=&amp;gt;{
        console.log(&quot;e&quot;,e);
        E_Receive.innerHTML += `&amp;lt;div&amp;gt;수신 : ${e.data}&amp;lt;/div&amp;gt;`;
    })

    // ui 이벤트 처리.
    E_Btn_Send.addEventListener('click',e=&amp;gt;{
        if(!E_Message.value) return alert(&quot;메세지를 입력하지 않았습니다.&quot;);
        E_Receive.innerHTML += `&amp;lt;div&amp;gt;발신 : ${E_Message.value}&amp;lt;/div&amp;gt;`;
        ws.send(E_Message.value);
        E_Message.value = &quot;&quot;;
    })

    E_Btn_Close.addEventListener('click',e=&amp;gt;{
        ws.close();
        E_Status.innerHTML = &quot;종료&quot;;
    });

&amp;lt;/script&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 즐거운 코딩 되시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬</category>
      <category>HTML</category>
      <category>javascript</category>
      <category>PYTHON</category>
      <category>websocket</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/270</guid>
      <comments>https://nicgoon.tistory.com/270#entry270comment</comments>
      <pubDate>Sun, 1 Jan 2023 17:49:51 +0900</pubDate>
    </item>
    <item>
      <title>카카오 개발자 REST API 포즈 php</title>
      <link>https://nicgoon.tistory.com/269</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포즈는 사진이나 영상에서 사람이 어떤 포즈를 취하고 있나를 확인해 주는 api 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;참고문서&lt;/b&gt;&lt;br /&gt;공식문서 : &lt;a href=&quot;https://developers.kakao.com/docs/latest/ko/pose/dev-guide&quot;&gt;https://developers.kakao.com/docs/latest/ko/pose/dev-guide&lt;/a&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발용으로 사용할 이미지 이므로, &lt;a href=&quot;https://www.pexels.com/ko-kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.pexels.com/ko-kr/&lt;/a&gt; 에서 무료 이미지를 하나 다운로드 받았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pexels-cottonbro-studio-10675908.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WWnrP/btrU1N6ooFo/8ZvbcX5mfRsXia5IplLNS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WWnrP/btrU1N6ooFo/8ZvbcX5mfRsXia5IplLNS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WWnrP/btrU1N6ooFo/8ZvbcX5mfRsXia5IplLNS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWWnrP%2FbtrU1N6ooFo%2F8ZvbcX5mfRsXia5IplLNS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;531&quot; data-filename=&quot;pexels-cottonbro-studio-10675908.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;531&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;size18&quot;&gt;&lt;b&gt;1. curl을 이용해 이미지 분석 요청.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지를 요청하는 curl은 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672513594658&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -v -X POST &quot;https://cv-api.kakaobrain.com/pose&quot; \
  -H &quot;Content-Type: multipart/form-data&quot; \
  -H &quot;Authorization: KakaoAK ${REST_API_KEY}&quot; \
  -F &quot;file=@example_pose.jpg&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 php로 고치면 아래와 같이 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672513645978&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function req_mutipart_post( $KakaoAK, $file_path ){

    $headers = array();
    $headers[] = &quot;Authorization: KakaoAK {$KakaoAK}&quot;;
    $headers[] = &quot;Content-Type: multipart/form-data&quot;;
    $url = &quot;https://cv-api.kakaobrain.com/pose&quot;;

    $file_path = new CURLFile($file_path,'image/jpeg');
    $postvars = array(&quot;file&quot;=&amp;gt;$file_path);

    $is_post = true;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, $is_post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    $response = curl_exec ($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    curl_close ($ch);

    return $response;

}&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;size18&quot;&gt;&lt;b&gt;2. 데이터 가공.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;php gd를 이용해 이미지를 가공해 봤습니다. 카카오 포즈 기능 생각보다 사용하기 편리한 것 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;result_1672513123.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnmrrs/btrU0usBHay/qA0yRseGnO4YLcp1pa1TaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnmrrs/btrU0usBHay/qA0yRseGnO4YLcp1pa1TaK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnmrrs/btrU0usBHay/qA0yRseGnO4YLcp1pa1TaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnmrrs%2FbtrU0usBHay%2FqA0yRseGnO4YLcp1pa1TaK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;531&quot; data-filename=&quot;result_1672513123.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;531&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;size18&quot;&gt;&lt;b&gt;3 전체 소스 입니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672513777969&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php

    // 업로드 모듈
    function req_mutipart_post( $KakaoAK, $file_path ){ // 이미지 업로드용 메소드.

        $headers = array();
        $headers[] = &quot;Authorization: KakaoAK {$KakaoAK}&quot;;
        $headers[] = &quot;Content-Type: multipart/form-data&quot;;
        $url = &quot;https://cv-api.kakaobrain.com/pose&quot;;

        $file_path = new CURLFile($file_path,'image/jpeg');
        $postvars = array(&quot;file&quot;=&amp;gt;$file_path);

        $is_post = true;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, $is_post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        $response = curl_exec ($ch);
        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close ($ch);

        return $response;

    }

    $source_image_file = &quot;pexels-cottonbro-studio-10675908.jpg&quot;;

    // 이미지에 대한 정보를 가지고 옵니다.
    $res = req_mutipart_post( '6907940c4e12eb2a6805a74f6bd95d83', $source_image_file );
    $resObj = json_decode($res,true);

    // 사진 속 사람 출력.
    $human = count($resObj);
    echo &quot;사진속 사람 {$human}명&quot; . PHP_EOL;

    // 사진속 모양에 따라 이미지를 가공해 줍니다.
    $gd = imagecreatefromjpeg($source_image_file);
    foreach($resObj as $d){

        // 라인 그리기.
        $im = @imagecreatetruecolor(4, 4);
        $line_color = imagecolorallocate($im, 255, 0, 0);

        imagerectangle(
            $gd,
            $d['bbox'][0], $d['bbox'][1], $d['bbox'][2] + $d['bbox'][0], $d['bbox'][3] + $d['bbox'][1],
            $line_color
        );

        // 점찍기
        $point_weight = @imagecreatetruecolor(8, 8);
        $point_color = imagecolorallocate($point_weight, 0, 255, 0);

        for( $i=0; $i &amp;lt; count($d['keypoints']) ;$i+=3 ){
            $idx_x = round($d['keypoints'][$i + 0]);
            $idx_y = round($d['keypoints'][$i + 1]);
            // print_r([$idx_x, $idx_y]);
            // imagesetpixel($gd, $idx_x, $idx_y, $point_color);
            imagefilledarc(
                $gd, $idx_x, $idx_y, 4,
                4, 0, 360, $point_color,
                IMG_ARC_PIE
            );
        }

    }

    // 가공된 이미지 출력하기.
    imagejpeg($gd, 'result_' . time() . &quot;.jpg&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 소스 파일 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/KsA6R/btrUYQbClFb/Iz13Yv2xd8Z9ncgSDw3hBk/php%20-%20upload.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;php - upload.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.91MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>카카오 개발자</category>
      <category>개발자</category>
      <category>카카오</category>
      <category>포즈</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/269</guid>
      <comments>https://nicgoon.tistory.com/269#entry269comment</comments>
      <pubDate>Sun, 1 Jan 2023 04:11:19 +0900</pubDate>
    </item>
    <item>
      <title>11번가 OPEN API 상품검색 node.js</title>
      <link>https://nicgoon.tistory.com/268</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;카테고리 조회를 실행하려면 먼저 11번가 판매자 가입 후 api 키 발급이 필요합니다. 선행하지 않았다면, 아래 링크를 참조해 먼저 완료해 주세요.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672499861738&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;11번가 OPEN API CENTER - 서비스등록&quot; data-og-description=&quot;참고 11번가 판매자 센터 참고 : https://happytownn.tistory.com/176 11번가 OPEN API CENTER : https://openapi.11st.co.kr/ 11번가 open api를 이용하려면, 먼저 판매자로 가입을 해야 합니다. 그리고, 서비스를 등록하고 o&quot; data-og-host=&quot;nicgoon.tistory.com&quot; data-og-source-url=&quot;https://nicgoon.tistory.com/266&quot; data-og-url=&quot;https://nicgoon.tistory.com/266&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FGFSo/hyQ6M9JCb2/jAwfJFDnc5ZptwKeL60hr1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/bQ4J8G/hyQ6M9JB7Z/A3n0I9S5hdxk2MFQeWXYik/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/1fTzf/hyQ6ZBf5AR/hcXPEG6nxxFz0DIFOhUYN1/img.png?width=1920&amp;amp;height=2120&amp;amp;face=0_0_1920_2120&quot;&gt;&lt;a href=&quot;https://nicgoon.tistory.com/266&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nicgoon.tistory.com/266&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FGFSo/hyQ6M9JCb2/jAwfJFDnc5ZptwKeL60hr1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/bQ4J8G/hyQ6M9JB7Z/A3n0I9S5hdxk2MFQeWXYik/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/1fTzf/hyQ6ZBf5AR/hcXPEG6nxxFz0DIFOhUYN1/img.png?width=1920&amp;amp;height=2120&amp;amp;face=0_0_1920_2120');&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;11번가 OPEN API CENTER - 서비스등록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;참고 11번가 판매자 센터 참고 : https://happytownn.tistory.com/176 11번가 OPEN API CENTER : https://openapi.11st.co.kr/ 11번가 open api를 이용하려면, 먼저 판매자로 가입을 해야 합니다. 그리고, 서비스를 등록하고 o&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nicgoon.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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;상품검색 조회 관련 문서는 아래 링크에서 확인이 가능합니다.&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://openapi.11st.co.kr/openapi/OpenApiServiceIntroduce.tmall#info1&quot;&gt;https://openapi.11st.co.kr/openapi/OpenApiServiceIntroduce.tmall#info1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m4EM3/btrU36RS0J8/qcOFPxe2Z1lFBlypjJ4vQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m4EM3/btrU36RS0J8/qcOFPxe2Z1lFBlypjJ4vQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m4EM3/btrU36RS0J8/qcOFPxe2Z1lFBlypjJ4vQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm4EM3%2FbtrU36RS0J8%2FqcOFPxe2Z1lFBlypjJ4vQK%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;1280&quot; height=&quot;706&quot; data-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품검색 &amp;gt; 상품검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11번가에서 상품을 조회 했을 때의 결과를 자신의 사이트에서 활용할 수 있는 API 입니다. 실제 사용성은 낮지만 테스트용으로 해보기 좋습니다. 간단히 url을 브라우저에 붙여넣어도 결과를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;a href=&quot;http://openapi.11st.co.kr/openapi/OpenApiService.tmall?key=[key]&amp;amp;apiCode=ProductSearch&amp;amp;keyword=[keyword]&quot;&gt;http://openapi.11st.co.kr/openapi/OpenApiService.tmall?key=[key]&amp;amp;apiCode=ProductSearch&amp;amp;keyword=[keyword]&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;br /&gt;GET PARAM에 넣어야할 값은 아래와 같습니다.&lt;br /&gt;key = 서비스가입 후 받은 OPEN API KEY를 넣어주세요.&lt;br /&gt;apiCode = api명령인데, 현재는 상품 검색을 할 것이므로, '&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;ProductSearch'를 그대로 두세요.&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;keyword = 검색할 명령어를 입력해 주세요.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;keyword&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;'양말'로 입력하고 브라우저 주소창에 넣으면 xml 응답값을 받을 수 있습니다. 11번가에 등록되는 상품들은 매일매일 다르므로 호출할때마다 다른 응답을 받이실거에요.&lt;/span&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-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYr0kf/btrU55ynZio/f7feRKKbcGwXlQRB0c9kj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYr0kf/btrU55ynZio/f7feRKKbcGwXlQRB0c9kj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYr0kf/btrU55ynZio/f7feRKKbcGwXlQRB0c9kj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYr0kf%2FbtrU55ynZio%2Ff7feRKKbcGwXlQRB0c9kj0%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;858&quot; height=&quot;726&quot; data-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;브라우저에서 사용하면 편하지만, 우리는 서버환경에서 받아 대체로 가공해서 사용해야하므로, 서버 언어로 실행이 필요합니다. node.js를 사용해 서버환경에서 구현해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672500784226&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var http = require('http');


function get_search(rest_api_key, keyword, callback){

    var options = {
        hostname: 'openapi.11st.co.kr',
        path: `/openapi/OpenApiService.tmall?apiCode=ProductSearch&amp;amp;key=${rest_api_key}&amp;amp;keyword=${encodeURI(keyword)}`
      };
     
    function handleResponse(response) {
      var serverData = '';
      response.on('data', function (chunk) {
        serverData += chunk;
      });
      response.on('end', function () {
        // console.log(&quot;received server data:&quot;);
        // console.log(serverData);
        callback(serverData);
      });
    }
     
    http.request(options, function(response){
      handleResponse(response);
    }).end();

}
get_search([rest api key 입력], &quot;양말&quot;, res=&amp;gt;{
    console.log(&quot;응답 =&amp;gt;&quot;, res);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>쇼핑몰연동/11번가</category>
      <category>11번가</category>
      <category>node.js</category>
      <category>open API</category>
      <category>상품검색</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/268</guid>
      <comments>https://nicgoon.tistory.com/268#entry268comment</comments>
      <pubDate>Sun, 1 Jan 2023 00:33:30 +0900</pubDate>
    </item>
    <item>
      <title>11번가 OPEN API 상품검색 php</title>
      <link>https://nicgoon.tistory.com/267</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;카테고리 조회를 실행하려면 먼저 11번가 판매자 가입 후 api 키 발급이 필요합니다. 선행하지 않았다면, 아래 링크를 참조해 먼저 완료해 주세요.&lt;/p&gt;
&lt;figure id=&quot;og_1672494973748&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;11번가 OPEN API CENTER - 서비스등록&quot; data-og-description=&quot;참고 11번가 판매자 센터 참고 : https://happytownn.tistory.com/176 11번가 OPEN API CENTER : https://openapi.11st.co.kr/ 11번가 open api를 이용하려면, 먼저 판매자로 가입을 해야 합니다. 그리고, 서비스를 등록하고 o&quot; data-og-host=&quot;nicgoon.tistory.com&quot; data-og-source-url=&quot;https://nicgoon.tistory.com/266&quot; data-og-url=&quot;https://nicgoon.tistory.com/266&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FGFSo/hyQ6M9JCb2/jAwfJFDnc5ZptwKeL60hr1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/bQ4J8G/hyQ6M9JB7Z/A3n0I9S5hdxk2MFQeWXYik/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/1fTzf/hyQ6ZBf5AR/hcXPEG6nxxFz0DIFOhUYN1/img.png?width=1920&amp;amp;height=2120&amp;amp;face=0_0_1920_2120&quot;&gt;&lt;a href=&quot;https://nicgoon.tistory.com/266&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nicgoon.tistory.com/266&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FGFSo/hyQ6M9JCb2/jAwfJFDnc5ZptwKeL60hr1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/bQ4J8G/hyQ6M9JB7Z/A3n0I9S5hdxk2MFQeWXYik/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/1fTzf/hyQ6ZBf5AR/hcXPEG6nxxFz0DIFOhUYN1/img.png?width=1920&amp;amp;height=2120&amp;amp;face=0_0_1920_2120');&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;11번가 OPEN API CENTER - 서비스등록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;참고 11번가 판매자 센터 참고 : https://happytownn.tistory.com/176 11번가 OPEN API CENTER : https://openapi.11st.co.kr/ 11번가 open api를 이용하려면, 먼저 판매자로 가입을 해야 합니다. 그리고, 서비스를 등록하고 o&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nicgoon.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;p data-ke-size=&quot;size16&quot;&gt;상품검색 조회 관련 문서는 아래 링크에서 확인이 가능합니다.&lt;br /&gt;&lt;a href=&quot;https://openapi.11st.co.kr/openapi/OpenApiServiceIntroduce.tmall#info1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://openapi.11st.co.kr/openapi/OpenApiServiceIntroduce.tmall#info1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11번가open_api 카테고리등록.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EwVDj/btrUXpd5rc5/zZdtqI4J6Flx4iPfSBwMn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EwVDj/btrUXpd5rc5/zZdtqI4J6Flx4iPfSBwMn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EwVDj/btrUXpd5rc5/zZdtqI4J6Flx4iPfSBwMn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEwVDj%2FbtrUXpd5rc5%2FzZdtqI4J6Flx4iPfSBwMn1%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;11번가open_api 카테고리등록.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품검색 &amp;gt; 상품검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11번가에서 상품을 조회 했을 때의 결과를 자신의 사이트에서 활용할 수 있는 API 입니다. 실제 사용성은 낮지만 테스트용으로 해보기 좋습니다. 간단히 url을 브라우저에 붙여넣어도 결과를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;http://openapi.11st.co.kr/openapi/OpenApiService.tmall?key=[key]&amp;amp;apiCode=ProductSearch&amp;amp;keyword=[keyword]&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;br /&gt;GET PARAM에 넣어야할 값은 아래와 같습니다.&lt;br /&gt;key = 서비스가입 후 받은 OPEN API KEY를 넣어주세요.&lt;br /&gt;apiCode = api명령인데, 현재는 상품 검색을 할 것이므로, '&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;ProductSearch'를 그대로 두세요.&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;keyword = 검색할 명령어를 입력해 주세요.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;keyword&lt;/span&gt; '양말'로 입력하고 브라우저 주소창에 넣으면 xml 응답값을 받을 수 있습니다. 11번가에 등록되는 상품들은 매일매일 다르므로 호출할때마다 다른 응답을 받이실거에요.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyAOnP/btrU1qi4gFH/fas2rP4CNtxBxXf4jMsLKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyAOnP/btrU1qi4gFH/fas2rP4CNtxBxXf4jMsLKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyAOnP/btrU1qi4gFH/fas2rP4CNtxBxXf4jMsLKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyAOnP%2FbtrU1qi4gFH%2Ffas2rP4CNtxBxXf4jMsLKk%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;858&quot; height=&quot;726&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에서 사용하면 편하지만, 우리는 서버환경에서 받아 대체로 가공해서 사용해야하므로, 서버 언어로 실행이 필요합니다. php curl을 사용해 서버환경에서 구현해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672497783807&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php

    function get_search($rest_api_key, $keyword){ // 상품검색명령

        $param = array(
            'apiCode'=&amp;gt;'ProductSearch',
            'key'=&amp;gt;$rest_api_key,
            'keyword'=&amp;gt;$keyword
        );

        $url = &quot;http://openapi.11st.co.kr/openapi/OpenApiService.tmall&quot; . &quot;?&quot; . http_build_query($param);

        $ch = curl_init();                                 //curl 초기화
        curl_setopt($ch, CURLOPT_URL, $url);               //URL 지정하기
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    //요청 결과를 문자열로 반환 
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);      //connection timeout 10초 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   //원격 서버의 인증서가 유효한지 검사 안함
        
        $response = curl_exec($ch);
        curl_close($ch);
        
        return $response;

    }

    echo get_search([rest api key 입력], &quot;양말&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별다른 어려움 없이 사용하시리라 믿습니다. 제가 한 번 해 보니 잘 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>쇼핑몰연동/11번가</category>
      <category>11번가</category>
      <category>open API</category>
      <category>php</category>
      <category>상품검색</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/267</guid>
      <comments>https://nicgoon.tistory.com/267#entry267comment</comments>
      <pubDate>Sat, 31 Dec 2022 23:47:58 +0900</pubDate>
    </item>
    <item>
      <title>11번가 OPEN API CENTER - 서비스등록</title>
      <link>https://nicgoon.tistory.com/266</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;br /&gt;11번가 판매자 센터 참고 : &lt;a href=&quot;https://happytownn.tistory.com/176&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://happytownn.tistory.com/176&lt;/a&gt;&lt;br /&gt;11번가 OPEN API CENTER : &lt;a href=&quot;https://openapi.11st.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://openapi.11st.co.kr/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11번가 open api를 이용하려면, 먼저 판매자로 가입을 해야 합니다. 그리고, 서비스를 등록하고 open api를 받아야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11번가open_api_center.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj7hQl/btrU7IizgRe/NKIdR9GdtNCtUAaLk7jyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj7hQl/btrU7IizgRe/NKIdR9GdtNCtUAaLk7jyk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj7hQl/btrU7IizgRe/NKIdR9GdtNCtUAaLk7jyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj7hQl%2FbtrU7IizgRe%2FNKIdR9GdtNCtUAaLk7jyk1%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;11번가open_api_center.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오픈 api 탭이 나오면, 모든 양식을 기입후 등록을 눌러주세요. 사용용도는 '상품등록 및 주문관리'정도가 적당할 것 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ip7Nd/btrU6YFNYMR/bvfnzzruqjMei2GvY23900/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ip7Nd/btrU6YFNYMR/bvfnzzruqjMei2GvY23900/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ip7Nd/btrU6YFNYMR/bvfnzzruqjMei2GvY23900/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIp7Nd%2FbtrU6YFNYMR%2FbvfnzzruqjMei2GvY23900%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;1920&quot; height=&quot;2120&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 등록이 완료되면 아래의 api key를 복사해 두세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11번가open_api_center2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byMj1q/btrUV4hbGzS/qFAKroB1VKGiKf5Q6sg6v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byMj1q/btrUV4hbGzS/qFAKroB1VKGiKf5Q6sg6v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byMj1q/btrUV4hbGzS/qFAKroB1VKGiKf5Q6sg6v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyMj1q%2FbtrUV4hbGzS%2FqFAKroB1VKGiKf5Q6sg6v1%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;1920&quot; height=&quot;1060&quot; data-filename=&quot;11번가open_api_center2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>쇼핑몰연동/11번가</category>
      <category>11번가</category>
      <category>open api center</category>
      <category>서비스등록</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/266</guid>
      <comments>https://nicgoon.tistory.com/266#entry266comment</comments>
      <pubDate>Sat, 31 Dec 2022 22:23:30 +0900</pubDate>
    </item>
    <item>
      <title>php 정규식 문제점</title>
      <link>https://nicgoon.tistory.com/265</link>
      <description>&lt;p&gt;다른 사이트 보면, &lt;span&gt;preg_match 메소드를 쓰면, 한글이 잘 검색되는 것 처럼 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;하지만 가끔 웹호스팅을 받다보면, 안되는 곳이 있습니다. (사실 &lt;/span&gt;&lt;span&gt;preg_match를 써서 한글 정규식 검사가 제대로 된 경우를 만난적이 없습니다. 저는.&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그래서, &lt;/span&gt;&lt;span&gt;mb_ereg_match를 쓰는데, 한글 검사가 잘됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;하지만, 처음 쓸때 오류를 마구 만났습니다. 이유는 &lt;/span&gt;&lt;span&gt;preg_match 슬래쉬 사이에 정규식패턴을 넣어줘야 하고, &lt;/span&gt;&lt;span&gt;mb_ereg_match는 입력하면 안되기 때문입니다. 각각 아래와 같이 입력해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;( !&lt;/span&gt;&lt;span&gt;mb_ereg_match&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;&quot;^[가-힣]{2,16}$&quot;&lt;/span&gt;&lt;span&gt;, $nickname&lt;/span&gt;&lt;span&gt;&amp;nbsp;) ) return &lt;/span&gt;&lt;span&gt;&quot;한글 2~16자로 입력해 주세요&quot;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;( !&lt;/span&gt;&lt;span&gt;preg_match&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;&quot;/&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;[a-zA-Z0-9]{2,8}&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;/&quot;&lt;/span&gt;&lt;span&gt;, $id&lt;/span&gt;&lt;span&gt; ) ) return &lt;/span&gt;&lt;span&gt;&quot;영어, 숫자 조합으로 2~8자로 입력해 주세요.&quot;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;사실, php 매뉴얼에 나와있지만 같겠지라고 생각하다 오류를 만날수 있습니다. (제가 그랬습니다. ㅠ,.ㅜ)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PHP</category>
      <category>mb_ereg_match</category>
      <category>php</category>
      <category>preg_match</category>
      <category>정규식</category>
      <category>한글</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/265</guid>
      <comments>https://nicgoon.tistory.com/265#entry265comment</comments>
      <pubDate>Fri, 21 Aug 2020 19:42:39 +0900</pubDate>
    </item>
    <item>
      <title>html css 7가지 단위</title>
      <link>https://nicgoon.tistory.com/264</link>
      <description>&lt;p&gt;css 7가지단위에 대해서 잘 설명 되어 있는 사이트가 있어서 링크를 걸어 둡니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webclub.tistory.com/356&quot;&gt;https://webclub.tistory.com/356&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1597961961519&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;CSS의 7가지 단위 - rem, vh, vw, vmin, vmax, ex, ch&quot; data-og-description=&quot;CSS Unit (CSS 7가지 단위) 우리가 잘 알고 있는 CSS기술을 사용하는 것은 쉽고 간단할 수 있지만 새로운 문제에 봉착하게 되면 해결하기 어려울 수 있습니다. 웹은 항상 성장,변화하고 있고 새로운 ��&quot; data-og-host=&quot;webclub.tistory.com&quot; data-og-source-url=&quot;https://webclub.tistory.com/356&quot; data-og-url=&quot;https://webclub.tistory.com/356&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GbQcT/hyHdDviomJ/EzC7HFdw5izd41euKfYd11/img.jpg?width=700&amp;amp;height=354&amp;amp;face=0_0_700_354,https://scrap.kakaocdn.net/dn/b9zazL/hyHdwbSOi9/kQjAWxAVe5K0TfhARBpm7K/img.jpg?width=700&amp;amp;height=354&amp;amp;face=0_0_700_354,https://scrap.kakaocdn.net/dn/UpYT6/hyHdt7jPyM/w9AkBMQ0vuKziTxVmjbGpk/img.png?width=600&amp;amp;height=629&amp;amp;face=0_0_600_629&quot;&gt;&lt;a href=&quot;https://webclub.tistory.com/356&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webclub.tistory.com/356&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GbQcT/hyHdDviomJ/EzC7HFdw5izd41euKfYd11/img.jpg?width=700&amp;amp;height=354&amp;amp;face=0_0_700_354,https://scrap.kakaocdn.net/dn/b9zazL/hyHdwbSOi9/kQjAWxAVe5K0TfhARBpm7K/img.jpg?width=700&amp;amp;height=354&amp;amp;face=0_0_700_354,https://scrap.kakaocdn.net/dn/UpYT6/hyHdt7jPyM/w9AkBMQ0vuKziTxVmjbGpk/img.png?width=600&amp;amp;height=629&amp;amp;face=0_0_600_629');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;CSS의 7가지 단위 - rem, vh, vw, vmin, vmax, ex, ch&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;CSS Unit (CSS 7가지 단위) 우리가 잘 알고 있는 CSS기술을 사용하는 것은 쉽고 간단할 수 있지만 새로운 문제에 봉착하게 되면 해결하기 어려울 수 있습니다. 웹은 항상 성장,변화하고 있고 새로운 ��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webclub.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/264</guid>
      <comments>https://nicgoon.tistory.com/264#entry264comment</comments>
      <pubDate>Fri, 21 Aug 2020 07:19:27 +0900</pubDate>
    </item>
    <item>
      <title>프로젝트 생성</title>
      <link>https://nicgoon.tistory.com/263</link>
      <description>&lt;p&gt;참고 사이트.&lt;/p&gt;
&lt;p&gt;expo site : &lt;a href=&quot;http://expo.io&quot;&gt;http://expo.io&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1594761850229&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Expo&quot; data-og-description=&quot;Expo is an open-source platform for making universal native apps for Android, iOS, and the web with JavaScript and React.&quot; data-og-host=&quot;expo.io&quot; data-og-source-url=&quot;http://expo.io&quot; data-og-url=&quot;https://expo.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzj5Qt/hyGMsUhiBp/LUZm6aTN4Jt8q5lYDN9OP0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/yXyUS/hyGMwI9FGa/EDoiOacdEL8MAboB9hKIeK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/v3HNH/hyGMn6veP9/yaCgZMdaFei9kdwTUdu4g1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/sve7L/hyGLb0WlB7/W7rMN8ussziKXLp0OUF1tK/img.png?width=228&amp;amp;height=228&amp;amp;face=0_0_228_228&quot;&gt;&lt;a href=&quot;http://expo.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://expo.io&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzj5Qt/hyGMsUhiBp/LUZm6aTN4Jt8q5lYDN9OP0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/yXyUS/hyGMwI9FGa/EDoiOacdEL8MAboB9hKIeK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/v3HNH/hyGMn6veP9/yaCgZMdaFei9kdwTUdu4g1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/sve7L/hyGLb0WlB7/W7rMN8ussziKXLp0OUF1tK/img.png?width=228&amp;amp;height=228&amp;amp;face=0_0_228_228');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Expo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Expo is an open-source platform for making universal native apps for Android, iOS, and the web with JavaScript and React.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;expo.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고 문서.&lt;/p&gt;
&lt;p&gt;설치 : &lt;a href=&quot;https://docs.expo.io/&quot;&gt;https://docs.expo.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594761909211&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Introduction to Expo - Expo Documentation&quot; data-og-description=&quot;Expo is a framework and a platform for universal React applications. It is a set of tools and services built around React Native and native platforms that help you develop, build, deploy, and quickly iterate on iOS, Android, and web apps from the same Java&quot; data-og-host=&quot;docs.expo.io&quot; data-og-source-url=&quot;https://docs.expo.io/&quot; data-og-url=&quot;https://docs.expo.io/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.expo.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.expo.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Introduction to Expo - Expo Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Expo is a framework and a platform for universal React applications. It is a set of tools and services built around React Native and native platforms that help you develop, build, deploy, and quickly iterate on iOS, Android, and web apps from the same Java&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.expo.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱 설치&lt;/p&gt;
&lt;p&gt;$ npm install --global expo-cli&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로젝트 실행.&lt;/p&gt;
&lt;p&gt;$ expo init {프로젝트 명}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 실행 (안드로이드, iOS, 웹 모두 실행)&lt;/p&gt;
&lt;p&gt;$ npm start&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 플랫폼별 실행.&lt;/p&gt;
&lt;p&gt;$ npm run android&lt;/p&gt;
&lt;p&gt;$ npm run ios&lt;/p&gt;
&lt;p&gt;$ npm run web&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;expo port 변경.&lt;/p&gt;
&lt;p&gt;프로젝트 루트 폴더에, .exprc 파일을 만든다. 그리고 아래와 같이 입력한다.&lt;/p&gt;
&lt;p&gt;{&lt;br /&gt;&amp;nbsp; &quot;manifestPort&quot;: 8080&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;로컬 ip 입력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>React Native Expo</category>
      <category>expo</category>
      <category>init</category>
      <category>install</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/263</guid>
      <comments>https://nicgoon.tistory.com/263#entry263comment</comments>
      <pubDate>Wed, 15 Jul 2020 06:54:17 +0900</pubDate>
    </item>
    <item>
      <title>MySql ER Diagram 기본 사용법</title>
      <link>https://nicgoon.tistory.com/262</link>
      <description>&lt;p&gt;참고 링크.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221407052438&amp;amp;categoryNo=48&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221407052438&amp;amp;categoryNo=48&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592965604790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MySQL] 워크벤치로 데이터베이스(스키마) 만들기&quot; data-og-description=&quot;목차 1. ER 다이어그램 만들기 2. forward engineeringMySQL 워크벤치 기본 사용법 숙지 및 잊어버리...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221407052438&amp;amp;categoryNo=48&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; data-og-url=&quot;https://blog.naver.com/pyj721aa/221407052438&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vekjI/hyGxdw7uQ0/WKzv3Qs2Akxyv9WPqYHdgK/img.png?width=537&amp;amp;height=351&amp;amp;face=0_0_537_351,https://scrap.kakaocdn.net/dn/75tlf/hyGwY7N0vD/KD6HZgLWVmQZBO1hudzZpk/img.png?width=80&amp;amp;height=43&amp;amp;face=0_0_80_43,https://scrap.kakaocdn.net/dn/B9sYz/hyGw3gYqcb/xXVkDEjbKyJtQ2r2hDUdF1/img.png?width=80&amp;amp;height=49&amp;amp;face=0_0_80_49&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221407052438&amp;amp;categoryNo=48&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221407052438&amp;amp;categoryNo=48&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vekjI/hyGxdw7uQ0/WKzv3Qs2Akxyv9WPqYHdgK/img.png?width=537&amp;amp;height=351&amp;amp;face=0_0_537_351,https://scrap.kakaocdn.net/dn/75tlf/hyGwY7N0vD/KD6HZgLWVmQZBO1hudzZpk/img.png?width=80&amp;amp;height=43&amp;amp;face=0_0_80_43,https://scrap.kakaocdn.net/dn/B9sYz/hyGw3gYqcb/xXVkDEjbKyJtQ2r2hDUdF1/img.png?width=80&amp;amp;height=49&amp;amp;face=0_0_80_49');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[MySQL] 워크벤치로 데이터베이스(스키마) 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;목차 1. ER 다이어그램 만들기 2. forward engineeringMySQL 워크벤치 기본 사용법 숙지 및 잊어버리...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/MySql</category>
      <category>ER Diagram</category>
      <category>mysql</category>
      <category>Workbench</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/262</guid>
      <comments>https://nicgoon.tistory.com/262#entry262comment</comments>
      <pubDate>Wed, 24 Jun 2020 12:58:22 +0900</pubDate>
    </item>
    <item>
      <title>EER Diagram 그리는 방법.</title>
      <link>https://nicgoon.tistory.com/261</link>
      <description>&lt;p&gt;제가 EER 그릴 일이 있어 사용하고, 링크 공유해 둡니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nemew.tistory.com/20&quot;&gt;https://nemew.tistory.com/20&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592963683140&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MySQL Workbench - 모델링 다이어그램(EER Diagram) 그리기&quot; data-og-description=&quot;0. 본 게시물은 MySQL, MySQL Workbench, DB Table이 추가 상태를 기준으로 작성 되었습니다. 관련 자세한 내용은 아래 게시물을 참고해 주세요. MySQL 및 MySQL Workbench 설치 ( http://nemew.tistory.com/14)..&quot; data-og-host=&quot;nemew.tistory.com&quot; data-og-source-url=&quot;https://nemew.tistory.com/20&quot; data-og-url=&quot;https://nemew.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c02qDh/hyGw9BqjZk/P6ALlUtIbynK6xSeQGvt60/img.png?width=600&amp;amp;height=310&amp;amp;face=0_0_600_310,https://scrap.kakaocdn.net/dn/chubLI/hyGw7KnQ3k/7gX7GXH1qsAsukS43PyjF0/img.png?width=600&amp;amp;height=310&amp;amp;face=0_0_600_310,https://scrap.kakaocdn.net/dn/dbcwx1/hyGw7cy5YI/mK8jTYsR3CmhCTCuRGPV0K/img.png?width=1000&amp;amp;height=673&amp;amp;face=0_0_1000_673&quot;&gt;&lt;a href=&quot;https://nemew.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nemew.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c02qDh/hyGw9BqjZk/P6ALlUtIbynK6xSeQGvt60/img.png?width=600&amp;amp;height=310&amp;amp;face=0_0_600_310,https://scrap.kakaocdn.net/dn/chubLI/hyGw7KnQ3k/7gX7GXH1qsAsukS43PyjF0/img.png?width=600&amp;amp;height=310&amp;amp;face=0_0_600_310,https://scrap.kakaocdn.net/dn/dbcwx1/hyGw7cy5YI/mK8jTYsR3CmhCTCuRGPV0K/img.png?width=1000&amp;amp;height=673&amp;amp;face=0_0_1000_673');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;MySQL Workbench - 모델링 다이어그램(EER Diagram) 그리기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;0. 본 게시물은 MySQL, MySQL Workbench, DB Table이 추가 상태를 기준으로 작성 되었습니다. 관련 자세한 내용은 아래 게시물을 참고해 주세요. MySQL 및 MySQL Workbench 설치 ( http://nemew.tistory.com/14)..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;nemew.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;작업 파일을 저장하는 방법은 해당 페이지를 열어 둔 상태에서, File &amp;gt; Save Model 을 선택하면됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-24 오전 10.59.03.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;676&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SPpS4/btqE5elqJQi/rATKeuaOCzsqjdZjTYJI20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SPpS4/btqE5elqJQi/rATKeuaOCzsqjdZjTYJI20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SPpS4/btqE5elqJQi/rATKeuaOCzsqjdZjTYJI20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSPpS4%2FbtqE5elqJQi%2FrATKeuaOCzsqjdZjTYJI20%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-24 오전 10.59.03.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;676&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/MySql</category>
      <category>EER Diagram</category>
      <category>mysql</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/261</guid>
      <comments>https://nicgoon.tistory.com/261#entry261comment</comments>
      <pubDate>Wed, 24 Jun 2020 11:00:10 +0900</pubDate>
    </item>
    <item>
      <title>Swoole 설치</title>
      <link>https://nicgoon.tistory.com/260</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행환경&lt;/h2&gt;
&lt;p&gt;ubuntu 18.0.4&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;공식 사이트들&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://php.net&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;php.net&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591920922500&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PHP: Hypertext Preprocessor&quot; data-og-description=&quot;The PHP development team announces the immediate availability of PHP 7.2.0 Release Candidate 1. This release is the first Release Candidate for 7.2.0. All users of PHP are encouraged to test this version carefully, and report any bugs and incompatibilities&quot; data-og-host=&quot;www.php.net&quot; data-og-source-url=&quot;http://php.net&quot; data-og-url=&quot;https://www.php.net/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://php.net&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://php.net&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;PHP: Hypertext Preprocessor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;The PHP development team announces the immediate availability of PHP 7.2.0 Release Candidate 1. This release is the first Release Candidate for 7.2.0. All users of PHP are encouraged to test this version carefully, and report any bugs and incompatibilities&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.php.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://www.swoole.co.uk/&quot;&gt;https://www.swoole.co.uk/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591920939456&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PHP Coroutine Async programming framework | Swoole PHP&quot; data-og-description=&quot;Compared with other async programming frameworks or softwares such as Nginx, Tornado, Node.js, Swoole has the built-in PHP coroutine and async support, multiple threads I/O modules. Developers can use sync or async, coroutine API to write the applications &quot; data-og-host=&quot;www.swoole.co.uk&quot; data-og-source-url=&quot;https://www.swoole.co.uk/&quot; data-og-url=&quot;https://www.swoole.co.uk/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XuQCZ/hyGnYUtGN7/Omf9clvRKxs9hLRwqbR8kk/img.png?width=1910&amp;amp;height=1000&amp;amp;face=0_0_1910_1000&quot;&gt;&lt;a href=&quot;https://www.swoole.co.uk/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.swoole.co.uk/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XuQCZ/hyGnYUtGN7/Omf9clvRKxs9hLRwqbR8kk/img.png?width=1910&amp;amp;height=1000&amp;amp;face=0_0_1910_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;PHP Coroutine Async programming framework | Swoole PHP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Compared with other async programming frameworks or softwares such as Nginx, Tornado, Node.js, Swoole has the built-in PHP coroutine and async support, multiple threads I/O modules. Developers can use sync or async, coroutine API to write the applications&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.swoole.co.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;선행작업&lt;/h2&gt;
&lt;p&gt;apache + php 설치 &lt;a href=&quot;https://nicgoon.tistory.com/258&quot;&gt;https://nicgoon.tistory.com/258&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591920982171&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;우분투( ubuntu ) apache + php 설치&quot; data-og-description=&quot;작업환경 제 작업환경은 mac의 parallels를 설치, ubuntu 가상 pc를 생성해 작업하였습니다. OS : ubuntu 18.04 참고문서 https://webnautes.tistory.com/1185 Ubuntu 18.04에 LAMP ( Apache2, MySQL , PHP 7) 설..&quot; data-og-host=&quot;nicgoon.tistory.com&quot; data-og-source-url=&quot;https://nicgoon.tistory.com/258&quot; data-og-url=&quot;https://nicgoon.tistory.com/258&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hHJnf/hyGnMGt6Fk/GcDISE9uOy4tKKGcfD8jHk/img.png?width=800&amp;amp;height=1090&amp;amp;face=0_0_800_1090,https://scrap.kakaocdn.net/dn/b2UW3r/hyGnRVmdz0/FkXnUaNPe2IfiZZF4z4tbK/img.png?width=800&amp;amp;height=1090&amp;amp;face=0_0_800_1090,https://scrap.kakaocdn.net/dn/zCj3N/hyGnJXjxk7/N0P4zDqzKnESqqHqQkAk0K/img.png?width=2292&amp;amp;height=2770&amp;amp;face=0_0_2292_2770&quot;&gt;&lt;a href=&quot;https://nicgoon.tistory.com/258&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nicgoon.tistory.com/258&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hHJnf/hyGnMGt6Fk/GcDISE9uOy4tKKGcfD8jHk/img.png?width=800&amp;amp;height=1090&amp;amp;face=0_0_800_1090,https://scrap.kakaocdn.net/dn/b2UW3r/hyGnRVmdz0/FkXnUaNPe2IfiZZF4z4tbK/img.png?width=800&amp;amp;height=1090&amp;amp;face=0_0_800_1090,https://scrap.kakaocdn.net/dn/zCj3N/hyGnJXjxk7/N0P4zDqzKnESqqHqQkAk0K/img.png?width=2292&amp;amp;height=2770&amp;amp;face=0_0_2292_2770');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;우분투( ubuntu ) apache + php 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;작업환경 제 작업환경은 mac의 parallels를 설치, ubuntu 가상 pc를 생성해 작업하였습니다. OS : ubuntu 18.04 참고문서 https://webnautes.tistory.com/1185 Ubuntu 18.04에 LAMP ( Apache2, MySQL , PHP 7) 설..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;nicgoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;설치 공식 문서 &lt;a href=&quot;https://www.swoole.co.uk/docs/get-started/installation&quot;&gt;https://www.swoole.co.uk/docs/get-started/installation&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591921030083&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Get started | Swoole PHP&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.swoole.co.uk&quot; data-og-source-url=&quot;https://www.swoole.co.uk/docs/get-started/installation&quot; data-og-url=&quot;https://www.swoole.co.uk/docs/get-started/installation&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buDsyi/hyGnYAaxEs/T8kxkAweF5KixuGHqXnAQ1/img.png?width=1910&amp;amp;height=1000&amp;amp;face=0_0_1910_1000&quot;&gt;&lt;a href=&quot;https://www.swoole.co.uk/docs/get-started/installation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.swoole.co.uk/docs/get-started/installation&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buDsyi/hyGnYAaxEs/T8kxkAweF5KixuGHqXnAQ1/img.png?width=1910&amp;amp;height=1000&amp;amp;face=0_0_1910_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Get started | Swoole PHP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.swoole.co.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;php-pear 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get update&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install php-pear&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;phpize 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ &lt;span&gt;sudo apt install php&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;swoole 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo pecl install swoole&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;php.ini 수정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;설치가 완료되면, php.ini 파일에 extension이 추가되었음을 설정하라는 메시지가 나옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 9.46.33.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1966&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckOKt9/btqEMwUjijE/BhV4cvRaI8V3foJCtO7wjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckOKt9/btqEMwUjijE/BhV4cvRaI8V3foJCtO7wjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckOKt9/btqEMwUjijE/BhV4cvRaI8V3foJCtO7wjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckOKt9%2FbtqEMwUjijE%2FBhV4cvRaI8V3foJCtO7wjK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 9.46.33.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1966&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;수정할 곳은 2군데 입니다. 일반 웹실행환경을 위한 apache2와 콘솔실행을 위한 cli입니다. swoole은 대체로 쉘 커맨드에서 실행하므로, cli도 반드시 수정해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹을 위한 php.ini 경로 : /etc/php/7.2/apache2/php.ini&lt;br /&gt;cli를 위한 php.ini 경로 : /etc/php/7.2/cli/php.ini&lt;/p&gt;
&lt;p&gt;저는 7.2를 설치해 7.2라는 서브 경로를 포함하지만, 버전에 따라 서브 경로가 틀릴 수 있습니다.&lt;br /&gt;각 파일들을 열어 가장 exptension들이 있는 가장 아랫줄에, extension=swoole.so를 포함시켜 줍니다.&lt;/p&gt;
&lt;p&gt;아파치를 재 실행해 적용해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo service apache2 restart&lt;/p&gt;</description>
      <category>PHP/swoole</category>
      <category>php</category>
      <category>swoole</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/260</guid>
      <comments>https://nicgoon.tistory.com/260#entry260comment</comments>
      <pubDate>Fri, 12 Jun 2020 10:00:50 +0900</pubDate>
    </item>
    <item>
      <title>ubuntu ftp 설치하기.</title>
      <link>https://nicgoon.tistory.com/259</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용유저 추가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;먼저 ftp를 사용할 유저를 생성합니다.&lt;br /&gt;기본적으로 리눅스 상의 모든 유저는 ftp를 사용할 수 있습니다. 일반유저 한명만 추가하면됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo adduser newuser&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저는 worker라는 유저를 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo adduser worker&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;설치하는 방법은 매우 간단합니다. 아래 한줄을 입력하면됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install vsftpd&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;접속을 위한 계정 IP 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;호스팅이나 클라우드 서버를 사용하는 경우, 서비스 신청과 동시에 ip를 확인할 수 있지만, 저처럼 가상 pc에 사용하시는 분들은 해당 서버에 접속을 위해 ip를 확인할 필요가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo ifconfig&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이렇게 입력하면 ip가 표시되지만, net-tools가 설치되어 있지 않은 경우, 해당 명령어를 사용할 수 없습니다. 그럴경우 net-tool을 아래와 같이 설치해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install net-tools&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제 아이피는 아래와 같이 확인이 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.34.20.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1690&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chxTUq/btqELREGfh9/tger0ObkycSuQHfa2eAWs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chxTUq/btqELREGfh9/tger0ObkycSuQHfa2eAWs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chxTUq/btqELREGfh9/tger0ObkycSuQHfa2eAWs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchxTUq%2FbtqELREGfh9%2Ftger0ObkycSuQHfa2eAWs0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.34.20.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1690&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ftp 접속해 보기&lt;/p&gt;
&lt;p&gt;이제 ftp 접속을 해 접속이 가능한지 확인을 해봅시다. 저는 파일질라를 이용해 접속을 했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.41.28.png&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;575&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mPXMu/btqENABzQQd/Uj3TZQg3mKib3VWvIilKKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mPXMu/btqENABzQQd/Uj3TZQg3mKib3VWvIilKKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mPXMu/btqENABzQQd/Uj3TZQg3mKib3VWvIilKKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmPXMu%2FbtqENABzQQd%2FUj3TZQg3mKib3VWvIilKKK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.41.28.png&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;575&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;연결을 해 보면 바로 접속이 됩니다. 아무런 설정을 하지 않았는데도요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.44.16.png&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;2100&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLtBCf/btqEL4X9XXG/vKpVZANwVtpaivb8kjESKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLtBCf/btqEL4X9XXG/vKpVZANwVtpaivb8kjESKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLtBCf/btqEL4X9XXG/vKpVZANwVtpaivb8kjESKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLtBCf%2FbtqEL4X9XXG%2FvKpVZANwVtpaivb8kjESKk%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.44.16.png&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;2100&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 파일을 업로드 하려면 파일이 업로드 되지 않을 것 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.46.08.png&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2FRx/btqEMykcn3V/z31nWyWMuUT3qn07GPMqf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2FRx/btqEMykcn3V/z31nWyWMuUT3qn07GPMqf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2FRx/btqEMykcn3V/z31nWyWMuUT3qn07GPMqf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2FRx%2FbtqEMykcn3V%2Fz31nWyWMuUT3qn07GPMqf0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 7.46.08.png&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;FTP 자체의 쓰기 권한을 주지 않아서 입니다. &lt;b&gt;/etc/vsftpd.conf&lt;/b&gt; 파일을 열어 쓰기 권한을 허용해 주면됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;먼저 콘피그 파일 복제.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;파일 열기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo vi /etc/vsftpd.conf&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;write_enable=YES 문자열을 찾아 앞의 #을 제거하고, :wq(저장후 종료)를 눌러 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ftp를 재 시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo service vsftpd restart&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저는 파일이 잘 올라 갑니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;업로드 파일 권한설정&lt;/p&gt;
&lt;p&gt;파일을 업로드 해보면, 권한이 rw------ 로 잡혀 있을 것 입니다. 이것은 파일 업로드/다운로드에서는 문제가 되지 않지만, 웹서버등을 운영하려고 하면, php 파일등이 실행되지 않거나 웹문서를 표시하지 못할 것 입니다. 콘피그 파일을 열어 local_umask=022 항목의 주석을 제거하면됩니다.&lt;/p&gt;
&lt;p&gt;참고로, 마스크 이므로, 파일 업로드시 777 - 022 = 755 로 파일 권한이 설정됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.13.42.png&quot; data-origin-width=&quot;2378&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cz8seY/btqEMwUeFrQ/kK5hNGOekJORPaX5MRuN1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cz8seY/btqEMwUeFrQ/kK5hNGOekJORPaX5MRuN1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cz8seY/btqEMwUeFrQ/kK5hNGOekJORPaX5MRuN1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcz8seY%2FbtqEMwUeFrQ%2FkK5hNGOekJORPaX5MRuN1k%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.13.42.png&quot; data-origin-width=&quot;2378&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo vi /etc/vsftpd.conf&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;local_umask=022&lt;/span&gt;&amp;nbsp;문자열을 찾아 앞의 #을 제거하고, :wq(저장후 종료)를 눌러 종료합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo service vsftpd restart&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <category>ftp</category>
      <category>ubuntu</category>
      <category>vsftpd</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/259</guid>
      <comments>https://nicgoon.tistory.com/259#entry259comment</comments>
      <pubDate>Fri, 12 Jun 2020 08:20:21 +0900</pubDate>
    </item>
    <item>
      <title>우분투( ubuntu ) apache + php 설치</title>
      <link>https://nicgoon.tistory.com/258</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;작업환경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 작업환경은 mac의 parallels를 설치, ubuntu 가상 pc를 생성해 작업하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;OS : ubuntu 18.04&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://webnautes.tistory.com/1185&quot;&gt;https://webnautes.tistory.com/1185&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591918389073&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Ubuntu 18.04에 LAMP ( Apache2, MySQL , PHP 7) 설치하는 방법&quot; data-og-description=&quot;Apache2 웹서버, MySQL 데이터베이스 서버, PHP를 Ubuntu에 설치하는 과정을 소개합니다. LAMP는 &amp;nbsp;운영 체제와 오픈 소스 소프트웨어 스택의 조합으로 Linux, Apache, MySQL, PHP의 첫글자만 가지고 만든 약어��&quot; data-og-host=&quot;webnautes.tistory.com&quot; data-og-source-url=&quot;https://webnautes.tistory.com/1185&quot; data-og-url=&quot;https://webnautes.tistory.com/1185&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1yCgF/hyGnQB4Ymv/kszUjEls3xZIwDiBA2hAK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dYg08K/hyGnIYlKAG/dP4iPZU6PQJ3ixR44fiAjk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/su4dn/hyGnWbe96X/laCUy6Urcxpw8n98DkGd91/img.png?width=962&amp;amp;height=745&amp;amp;face=0_0_962_745&quot;&gt;&lt;a href=&quot;https://webnautes.tistory.com/1185&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webnautes.tistory.com/1185&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1yCgF/hyGnQB4Ymv/kszUjEls3xZIwDiBA2hAK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dYg08K/hyGnIYlKAG/dP4iPZU6PQJ3ixR44fiAjk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/su4dn/hyGnWbe96X/laCUy6Urcxpw8n98DkGd91/img.png?width=962&amp;amp;height=745&amp;amp;face=0_0_962_745');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Ubuntu 18.04에 LAMP ( Apache2, MySQL , PHP 7) 설치하는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Apache2 웹서버, MySQL 데이터베이스 서버, PHP를 Ubuntu에 설치하는 과정을 소개합니다. LAMP는 &amp;nbsp;운영 체제와 오픈 소스 소프트웨어 스택의 조합으로 Linux, Apache, MySQL, PHP의 첫글자만 가지고 만든 약어��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;webnautes.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;h2 data-ke-size=&quot;size26&quot;&gt;apache 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;기본 설치.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get update&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install apache2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;설치 확인.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ apache2 -v&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;브라우저 접속확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.28.03.png&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;2742&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKCbqq/btqEMx6BY2W/oiaAklKFYvntUb7ZjJk860/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKCbqq/btqEMx6BY2W/oiaAklKFYvntUb7ZjJk860/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKCbqq/btqEMx6BY2W/oiaAklKFYvntUb7ZjJk860/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKCbqq%2FbtqEMx6BY2W%2FoiaAklKFYvntUb7ZjJk860%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.28.03.png&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;2742&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;홈디렉토리는 /var/www/html 입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mysql 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제 작업에는 mysql이 필요가 없었습니다. 하지만, 아파치 php를 설치하며, mysql을 설치하지 않으면 섭섭하므로, 설치만 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install mysql-server&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PHP 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo apt-get install php php-mysql&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;홈디렉터리에 phpinfo.php 파일을 만들고 php 정보를 볼수 있는 내용을 채워 넣습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo vi phpinfo.php&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;:wq&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고 아래와 같이 php 가 표시되면 성공입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.43.20.png&quot; data-origin-width=&quot;2292&quot; data-origin-height=&quot;2770&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1mEVJ/btqELQTmH6F/L1mHgo3OIfgoOkTPuVwydK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1mEVJ/btqELQTmH6F/L1mHgo3OIfgoOkTPuVwydK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1mEVJ/btqELQTmH6F/L1mHgo3OIfgoOkTPuVwydK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1mEVJ%2FbtqELQTmH6F%2FL1mHgo3OIfgoOkTPuVwydK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-06-12 오전 8.43.20.png&quot; data-origin-width=&quot;2292&quot; data-origin-height=&quot;2770&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;php.ini 수정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저처럼 서버 관리자가 아니라면, php.ini 설정을 한 군데만 고치면, 될것 같습니다. 오류시 오류 로그 표시.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;display_errors = Off 를 display_errors = On 으로 바꿔 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저장후 아파치 서버를 재시작해 주면 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$ sudo service apache2 restart&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ubuntu</category>
      <category>apache</category>
      <category>php</category>
      <category>ubuntu</category>
      <author>창업닉군</author>
      <guid isPermaLink="true">https://nicgoon.tistory.com/258</guid>
      <comments>https://nicgoon.tistory.com/258#entry258comment</comments>
      <pubDate>Fri, 12 Jun 2020 07:19:44 +0900</pubDate>
    </item>
  </channel>
</rss>