<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>유부중년 개발자의 우울</title>
    <link>https://iolothebard.tistory.com/</link>
    <description>제주살았던/마이너지향/입코딩전문 /유부중년/개발자</description>
    <language>ko</language>
    <pubDate>Tue, 9 Jun 2026 17:21:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>iolo</managingEditor>
    <image>
      <title>유부중년 개발자의 우울</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2323553958A7B70B11</url>
      <link>https://iolothebard.tistory.com</link>
    </image>
    <item>
      <title>이사갑니다</title>
      <link>https://iolothebard.tistory.com/519</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;find me at &lt;a href=&quot;https://iolo.github.io&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://iolo.github.io&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 450px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9987CF3B5AD045D330&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9987CF3B5AD045D330&quot; width=&quot;450&quot; height=&quot;450&quot; filename=&quot;301.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>misc</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/519</guid>
      <comments>https://iolothebard.tistory.com/519#entry519comment</comments>
      <pubDate>Fri, 13 Apr 2018 14:54:53 +0900</pubDate>
    </item>
    <item>
      <title>Hexo - 또 다른 정적 사이트 생성도구</title>
      <link>https://iolothebard.tistory.com/518</link>
      <description>&lt;p&gt;언제 어디서 시작됐는지, 또 얼마나 지속될지 모르겠지만 정적 사이트 생성 방식의 CMS(?)가 대유행이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;IFAIK, 이 방식의 원조는 21세기 초(!) 펄로 만들어진 &lt;a href=&quot;http://blosxom.sourceforge.net&quot;&gt;blosxom&lt;/a&gt;이었고,
널리 쓰이기 시작한 것은 파이썬으로 만든 클론 &lt;a href=&quot;http://pyblosxom.github.io&quot;&gt;pyblosxom&lt;/a&gt;이었다.
지금도 &lt;a href=&quot;http://en.wikipedia.org/wiki/Blosxom&quot;&gt;blosxom과 그 친구들&lt;/a&gt;은 여전히 명맥을 유지하고 있지만... &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그로부터 십수년이 지나고... 유행은 돌고 돌아...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;prologue&quot;&gt;prologue&lt;/h2&gt;
&lt;p&gt;이 포스트에서 소개할 것은 &lt;a href=&quot;&quot;&gt;Hexo&lt;/a&gt;라는 정적 사이트 생성도구다.
수많은 정적 사이트 생성도구들 중에서 굳이 Hexo를 선택한 이유는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&quot;&gt;nodejs&lt;/a&gt;로 만들어졌다. 내가 필요한게 있으면 뜯어고칠 수 있어야 하므로...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://help.github.com/articles/github-flavored-markdown/&quot;&gt;github flavoured markdown&lt;/a&gt;,
&lt;a href=&quot;http://jade-lang.com&quot;&gt;jade&lt;/a&gt;,
&lt;a href=&quot;http://lesscss.org&quot;&gt;less&lt;/a&gt; 를 지원한다.
기본 설정은 [ejs], [stylus]지만 설정이나 코딩없이 바꿀 수 있다.&lt;/li&gt;
&lt;li&gt;외부 의존성이 적다.
&lt;a href=&quot;http://pygments.org&quot;&gt;pygments&lt;/a&gt; 하나 때문에 파이썬 의존성을 갖는다거나...
&lt;a href=&quot;http://kramdown.gettalong.org&quot;&gt;kramdown&lt;/a&gt; 하나 때문에 루비 의존성을 갖는다거나...&lt;/li&gt;
&lt;li&gt;내 취향에 맞는... 단순한/이미지없는/반응형 테마가 있다.&lt;/li&gt;
&lt;li&gt;소스 코드 문법 강조!&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 728px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2339543D543167771A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2339543D543167771A&quot; width=&quot;728&quot; height=&quot;660&quot; alt=&quot;HEXO+: Your Autonomous Aerial Camera - Drone&quot; filename=&quot;home-hero-product-image.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;span class=&quot;cap1&quot; style=&quot;display: block; max-width:100%; &quot;&gt;HEXO+: Your Autonomous Aerial Camera - Drone&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://hexoplus.com&quot;&gt;출처: &lt;/a&gt;&lt;a href=&quot;http://hexoplus.com&quot;&gt;http://hexoplus.com&lt;/a&gt; 사진은 이 포스트와 아무~ 관계 없음.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;hexo-&quot;&gt;hexo 설치&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;npm&amp;nbsp;install&amp;nbsp;hexo&amp;nbsp;-g&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;사이트 초기화&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;hexo&amp;nbsp;init&amp;nbsp;mysite&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;cd&amp;nbsp;mysite&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;tree&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;├──&amp;nbsp;_config.yml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;├──&amp;nbsp;package.json&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;├──&amp;nbsp;scaffolds&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;├──&amp;nbsp;draft.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;├──&amp;nbsp;page.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;├──&amp;nbsp;photo.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;└──&amp;nbsp;post.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;├──&amp;nbsp;source&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;└──&amp;nbsp;_posts&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;│&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└──&amp;nbsp;hello-world.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;└──&amp;nbsp;themes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;└──&amp;nbsp;landscape&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;미리보기용 서버 실행&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;hexo&amp;nbsp;server&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;open&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;markup underline link http hyperlink&quot;&gt;&lt;span&gt;http://localhost:4000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;서버를 실행하는 동안 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;source&lt;/code&gt; 디렉토리에 파일을 변경/추가/삭제하면 알아서 처리된다. 말하자면 watch 하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;테마 변경&lt;/h2&gt;
&lt;p&gt;다른 정적사이트 생성기에서는 테마와 레이아웃의 개념이 오락가락하는 경우가 많은데...
Hexo에서는 레이아웃은 테마의 일부다. 장단점이 있겠지만, 내 경우엔 백만배 편하다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hexo.io/docs/themes.html&quot;&gt;문서&lt;/a&gt;를 보고 직접 만들어도 되지만... I don't care~&lt;/p&gt;
&lt;p&gt;기본 테마는 &lt;a href=&quot;https://github.com/hexojs/hexo-theme-landscape&quot;&gt;landscape&lt;/a&gt;인데,
&lt;a href=&quot;https://github.com/hexojs/hexo/wiki/Themes&quot;&gt;공식 테마 목록&lt;/a&gt;에서 맘에 드는 테마를 골라보자.&lt;/p&gt;
&lt;p&gt;내가 고른 테마는 &lt;a href=&quot;https://github.com/hexojs/hexo-theme-light&quot;&gt;light&lt;/a&gt;다.
(대부분의 테마들과 마찬가지로) 이 테마는 github 프로젝트이므로 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;git&lt;/code&gt;명령으로 쉽게 설치할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;git&amp;nbsp;clone&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;markup underline link https hyperlink&quot;&gt;&lt;span&gt;https://github.com/hexojs/hexo-theme-light.git&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;themes/light&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;설정 파일의 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;theme: landscape&lt;/code&gt; 를 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;theme: light&lt;/code&gt; 로 바꾸자:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;vi&amp;nbsp;_config.yml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;이제 안쓰는 landscape 테마는 지우자:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;rm&amp;nbsp;-rf&amp;nbsp;themes/landscape&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;설정 변경&lt;/h2&gt;
&lt;p&gt;앞에서 테마를 변경하면서 봤던 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;\_config.yml&lt;/code&gt; 이 &lt;strong&gt;유일한&lt;/strong&gt; 설정 파일이며,
익숙한(익숙하지 않다면 곤란하다!) &lt;a href=&quot;http://yaml.org&quot;&gt;yaml&lt;/a&gt; 형식이다.&lt;/p&gt;
&lt;p&gt;매우 훌륭한 &lt;a href=&quot;http://hexo.io/docs/configuration.html&quot;&gt;문서&lt;/a&gt;가 있으니 뻔한 설명은 생략.&lt;/p&gt;
&lt;p&gt;내가 변경한 건 이런 정도다:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-title:&amp;nbsp;독거노인&amp;nbsp;개발자의&amp;nbsp;우울&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-subtitle:&amp;nbsp;제주사는/마이너지향/입코딩전문/독거노인/개발자&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-description:&amp;nbsp;melancholy&amp;nbsp;of&amp;nbsp;old&amp;nbsp;and&amp;nbsp;sole&amp;nbsp;programmer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-author:&amp;nbsp;iolo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-email:&amp;nbsp;iolothebard&amp;nbsp;at&amp;nbsp;gmail&amp;nbsp;dot&amp;nbsp;com&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-language:&amp;nbsp;ko-KR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-url:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;markup underline link http hyperlink&quot;&gt;&lt;span&gt;http://berry.iolo.kr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-new_post_name:&amp;nbsp;:year-:month-:day-:title.md&amp;nbsp;#&amp;nbsp;파일이름앞에&amp;nbsp;`년-월-일-`을&amp;nbsp;붙이도록&amp;nbsp;했다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-filename_case:&amp;nbsp;1&amp;nbsp;#&amp;nbsp;파일이름은&amp;nbsp;소문자만&amp;nbsp;사용.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-date_format:&amp;nbsp;YYYY-MM-DD&amp;nbsp;#&amp;nbsp;난&amp;nbsp;한국사람.&amp;nbsp;내&amp;nbsp;사이트&amp;nbsp;볼&amp;nbsp;사람도&amp;nbsp;한국&amp;nbsp;사람~&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-time_format:&amp;nbsp;HH:mm:ss&amp;nbsp;#&amp;nbsp;난&amp;nbsp;공돌이~&amp;nbsp;24시간제가&amp;nbsp;좋아~&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-disqus_shortname:&amp;nbsp;melancholy-iolo&amp;nbsp;#&amp;nbsp;댓글은&amp;nbsp;디스쿠스~&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-theme:&amp;nbsp;light&amp;nbsp;#&amp;nbsp;테마는&amp;nbsp;light&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;새 포스트 만들기&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;hexo&amp;nbsp;new&amp;nbsp;'Hello&amp;nbsp;Hexo'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;[info]&amp;nbsp;File&amp;nbsp;created&amp;nbsp;at&amp;nbsp;/Users/iolo/Documents/www/xxx/source/_posts/2014-10-05-hello-hexo.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;tree&amp;nbsp;source&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;source/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;└──&amp;nbsp;_posts&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;├──&amp;nbsp;2014-10-05-hello-hexo.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└──&amp;nbsp;hello-world.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;cat&amp;nbsp;source/_posts/2014-10-05-hello-hexo.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;title:&amp;nbsp;Hello&amp;nbsp;Hexo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;date:&amp;nbsp;2014-10-05&amp;nbsp;23:17:30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;tags:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;주의: 제목에 한글을 써봐야 무시되므로 파일이름이 될 문자열을 입력하고, 뒤에 파일을 편집해서 제목을 입력하는게 속편하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;포스트 글쓰기&lt;/h2&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;vi&amp;nbsp;source/_posts/2014-10-05-hello-hexo.md&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;다른 정적 사이트 생성도구들과 마찬가지로 Hexo도 YAML Front-matter라는 걸 사용한다.
개인적으로는 맘에 안드는 부분이지만, 대세를 따르는 걸로...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;주의: Jekyll을 비롯한 대부분의 정적 사이트 생성도구들과 달리 파일 첫줄에는 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;---&lt;/code&gt;를 쓰지 않는 다는 것.
제사한 설명은 &lt;a href=&quot;http://hexo.io/docs/writing.html&quot;&gt;문서&lt;/a&gt;을 참조하시길...&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;title:&amp;nbsp;안녕&amp;nbsp;hexo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;date:&amp;nbsp;2014-10-05&amp;nbsp;23:17:30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;tags:&amp;nbsp;[test,hello,hexo]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;category:&amp;nbsp;test&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;#&amp;nbsp;안녕&amp;nbsp;hexo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;##&amp;nbsp;hexo&amp;nbsp;cool&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;###&amp;nbsp;really?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-&amp;nbsp;write&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-&amp;nbsp;content&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-&amp;nbsp;with&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;-&amp;nbsp;markdown&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;미리보기용 서버로 확인해보자:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;hexo&amp;nbsp;server&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;open&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;markup underline link http hyperlink&quot;&gt;&lt;span&gt;http://localhost:4000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;이미지 첨부&lt;/h3&gt;
&lt;p&gt;이미지를 첨부하는 방법은 좀 더 실험을 해봐야 할 듯...&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hexo.io/docs/writing.html&quot;&gt;문서&lt;/a&gt;의 맨뒤에 나오는 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;post\_asset\_folder&lt;/code&gt;를 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;true&lt;/code&gt;로 설정하고 상대경로를 사용하는 방식은 문제가 좀 있고...&lt;/p&gt;
&lt;p&gt;내가 사용한 쉬운 방법은:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;mkdir&amp;nbsp;source/uploads&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;cp&amp;nbsp;path/to/image/file.jpg&amp;nbsp;source/uploads/foo.jpg&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;본문에서는 이렇게 쓰면 된다:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;![이미지](/uploads/foo.jpg)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;글 지우기&lt;/h3&gt;
&lt;p&gt;자동으로 만들어준 hello-world.md 가 눈에 거슬린다 지워버리자!&lt;br /&gt;글을 지우는 명령 따위는 없다. 그냥:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;rm&amp;nbsp;source/_posts/hello&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;배포&lt;/h3&gt;
&lt;p&gt;앞에서 변경했던 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;\_config.yml&lt;/code&gt; 이 다시 등장한다.&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;vi&amp;nbsp;_config.yml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;hexo는 github, heroku 외에 다양한 배포 방식을 지원하는데, 자세한 내용은 &lt;a href=&quot;http://hexo.io/docs/deployment.html&quot;&gt;문서&lt;/a&gt;를 참조하시길...&lt;/p&gt;
&lt;p&gt;나는 github 으로 배포했다:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;deploy:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;type:&amp;nbsp;github&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;repo:&amp;nbsp;git@github.com:iolo/iolo.github.com.git&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;이제 배포하고, 결과를 확인해보자:&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;hexo&amp;nbsp;deploy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;$&amp;nbsp;open&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;markup underline link http hyperlink&quot;&gt;&lt;span&gt;http://iolo.github.io&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;eplilogue&quot;&gt;eplilogue&lt;/h2&gt;
&lt;p&gt;어차피, 정적 사이트 생성도구라는게... 거기서 거기~ 결국은 개인의 취향이 중요한 듯...&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://staticsitegenerators.net&quot;&gt;정적 사이트 생성도구 목록&lt;/a&gt;을 보고 입맞에 맞는 녀석을 찾아서 시험해 보시길...&lt;/p&gt;
&lt;p&gt;지금 당장은 hexo로 이것 저것 시험해보고 있지만... 결론은 안알랴줌.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color:#cc0000;weight:bold;font-size:24px;border:2px solid #cc0000;&quot;&gt;&lt;b&gt;이 포스트의 꼬라지를 &lt;a href=&quot;http://iolo.github.io&quot;&gt;iolo.github.io&lt;/a&gt;와 비교해보삼~ 내가 고민안하게 생겼나~ Orz&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;may the &lt;em&gt;CLI&lt;/em&gt; be with you...&lt;/p&gt;</description>
      <category>hacking</category>
      <category>hexo</category>
      <category>node-schedule</category>
      <category>nodejs</category>
      <category>static site generator</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/518</guid>
      <comments>https://iolothebard.tistory.com/518#entry518comment</comments>
      <pubDate>Mon, 6 Oct 2014 00:47:03 +0900</pubDate>
    </item>
    <item>
      <title>나의 Node.js 답사기 - date &amp;amp; time 편</title>
      <link>https://iolothebard.tistory.com/517</link>
      <description>&lt;p&gt;주의: 예제 코드 따위 없음!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;본의 아니게 시리즈가 되어버린 답사기... 기왕 시작한거 몇 개만 더 해보자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;자바스크립트 &lt;a href=&quot;http://docs.webplatform.org/wiki/javascript/Date&quot;&gt;Date&lt;/a&gt; 는...
20세기에 만들어져서 그런가? 구리다. 너무 구리다. 정말 구리다. 그런 의미에서(어떤 의미?)...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/275E2A33542EB94832&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F275E2A33542EB94832&quot; width=&quot;400&quot; height=&quot;564&quot; filename=&quot;datetime.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;http://izismile.com/2012/09/01/tasty_chefsdoeuvre_20_pics.html&quot;&gt;출처: Tasty Chefs-d'oeuvre&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;자바에선 &lt;a href=&quot;http://www.joda.org/joda-time/&quot;&gt;jodatime&lt;/a&gt;을 기본 라이브러리 처럼 썼는데...
Node.js에선 뭘 쓰죠? 라고 물으신다면...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;일단, &lt;a href=&quot;http://google.com/search?q=javascript+date+library&quot;&gt;구글에서 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;javascript date library&lt;/code&gt;를 검색&lt;/a&gt;하면
꽤 앞 쪽에(내 경우엔 두번째) 등장하는 &lt;a href=&quot;http://datejs.com&quot;&gt;date.js&lt;/a&gt;는 2008년에 개발이 중단된 녀석이므로 일단 무시!!!&lt;/p&gt;
&lt;p&gt;가끔씩 구글신도 실수를 하신다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;메이저한 녀석들을 살펴보면...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://momentjs.com&quot;&gt;moment.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;2.8.3, active, &lt;a href=&quot;http://isaaccambron.com&quot;&gt;Isaac Cambron&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;구글신의 리스트의 맨 앞에 등장하는 것으로 짐작할 수 있느... de facto... 갑이다.&lt;/li&gt;
&lt;li&gt;말하자면... &lt;em&gt;jodatime is to java what momentjs is to javascript&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;다시 말하자면... 잘 모르겠으면 이 녀석을 쓰면 됨.&lt;/li&gt;
&lt;li&gt;자바 개발자들에겐 낯선/스타일리시한(?) api.&lt;/li&gt;
&lt;li&gt;문서 매우 좋음.&lt;/li&gt;
&lt;li&gt;parse/format/diff/manipulation/duration/utc 지원 등.&lt;/li&gt;
&lt;li&gt;L10N 수준의 다국어 지원.&lt;/li&gt;
&lt;li&gt;다양한 &lt;a href=&quot;https://www.npmjs.org/browse/keyword/moment&quot;&gt;plugin/contrib 모듈&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/abritinthebay/datejs&quot;&gt;datejs&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;1.0.0-rc1, re-active, Gregory Wild-Smith.&lt;/li&gt;
&lt;li&gt;앞에서 &lt;strong&gt;ignore&lt;/strong&gt;했던 date.js를 포크해서 node/browser 겸용으로 부활.&lt;/li&gt;
&lt;li&gt;역사와 전통을 자랑하는 라이브러리... 안정감있는/고풍스러운 api.&lt;/li&gt;
&lt;li&gt;자바스크립트의 내장 &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;Date&lt;/code&gt; 객체를 확장(mixin).&lt;/li&gt;
&lt;li&gt;L10N 수준의 다국어 지원.&lt;/li&gt;
&lt;li&gt;문서 없음. 그럭저럭 볼만한 &lt;a href=&quot;https://code.google.com/p/datejs/wiki/APIDocumentation&quot;&gt;오리지날의 문서&lt;/a&gt;가 아직 남아 있음.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arshaw.com/xdate/&quot;&gt;xdate&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.8.1, inactive(bugfix only), &lt;a href=&quot;http://arshaw.com&quot;&gt;Adam Shaw&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;역사와 전통을 자랑하는 라이브러리... 안정감있는/고풍스러운 api.&lt;/li&gt;
&lt;li&gt;문서 좋음.&lt;/li&gt;
&lt;li&gt;parse/format/diff/utc 지원 등.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arshaw/fullcalendar&quot;&gt;fullcalendar&lt;/a&gt;를 만들기 위해 만든 라이브러리.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이 외에도 &lt;a href=&quot;https://www.npmjs.org/browse/keyword/date&quot;&gt;npmjs.org&lt;/a&gt;나
&lt;a href=&quot;https://nodejsmodules.org/tags/date&quot;&gt;nodejsmodules.org&lt;/a&gt;를 검색해보면 끝도 없이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;대부분 누구나 한 번 만들어 봤음직한 &lt;a href=&quot;https://jerrysievert.github.io/date-utils/&quot;&gt;date-utils&lt;/a&gt;류 인데...
거들떠 볼만한 몇 가지만 살펴보면:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://bunkat.github.io/later/&quot;&gt;later.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;상대적인/주기적인 날짜/시각 전문 라이브러리 - &lt;a href=&quot;http://en.wikipedia.org/wiki/Cron&quot;&gt;cron&lt;/a&gt; syntax 지원.&lt;/li&gt;
&lt;li&gt;간단한 &lt;a href=&quot;http://blog.iolo.kr/516&quot;&gt;job scheduler&lt;/a&gt; 포함.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://countdownjs.org&quot;&gt;countdown.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;날짜/시간 간격(timespan) 전문 라이브러리.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://countdownjs.org&quot;&gt;countdown.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;날짜/시간 간격(timespan) 전문 라이브러리.&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/guille/ms.js&quot;&gt;ms&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;다른 시간 단위를 millisecond로 변환.&lt;/li&gt;
&lt;li&gt;말하자면... 24*60*60*1000 같은 짓을 쉽고 뽀대나게 해주는 라이브러리.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@ibare&quot;&gt;@ibare&lt;/a&gt;님이 친히 페북을 통해 추천해주심~&lt;/li&gt;
&lt;li&gt;nodejs/browser 겸용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이번엔... 결론이 있음: &lt;a href=&quot;http://momentjs.com&quot;&gt;moment.js&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;only time will tell...&lt;/p&gt;</description>
      <category>hacking/nodejs</category>
      <category>date</category>
      <category>date.js</category>
      <category>Moment</category>
      <category>moment.js</category>
      <category>nodejs</category>
      <category>TIME</category>
      <category>xdate</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/517</guid>
      <comments>https://iolothebard.tistory.com/517#entry517comment</comments>
      <pubDate>Sat, 4 Oct 2014 00:00:24 +0900</pubDate>
    </item>
    <item>
      <title>나의 Node.js 답사기 - job scheduler 편</title>
      <link>https://iolothebard.tistory.com/516</link>
      <description>&lt;p&gt;주의: 예제 코드 따위 없음!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.asovision.com/tuttuki/&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2708514F542E926E19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2708514F542E926E19&quot; width=&quot;640&quot; height=&quot;481&quot; filename=&quot;tuttuki_bako.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;http://www.asovision.com/tuttuki/&quot;&gt;출처: 반다이의 야심작(?) Tuttuki Bako&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;job scheduler는 뭐에 쓰는 물건인고?&lt;/p&gt;
&lt;p&gt;라고 물으신다면...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://docs.webplatform.org/wiki/dom/Window/setTimeout&quot;&gt;setTimeout&lt;/a&gt;이나
&lt;a href=&quot;http://docs.webplatform.org/wiki/dom/Window/setInterval&quot;&gt;setInterval&lt;/a&gt;을 먼저 살펴보시고,&lt;/p&gt;
&lt;p&gt;여기서 &quot;몇 밀리초 후에/마다&quot; 대신 좀 더 복잡한 규칙(예: 매주 월요일 새벽 3시)을 사용할 수 있게 해주는 라이브러리죠. 그 이상도 그 이하입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;자바 쪽에서는 &lt;a href=&quot;http://quartz-scheduler.org&quot;&gt;Quartz&lt;/a&gt;,
&lt;a href=&quot;http://projects.spring.io/spring-batch/&quot;&gt;Spring Batch&lt;/a&gt; 같을 걸 썼는데...
Node.js에는 어떻게 하죠?&lt;/p&gt;
&lt;p&gt;라고 물으신다면.. 이 정도 링크만 드리면 되겠죠?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Node.js를 위한 job schduler는 몇가지 없는데, 그나마 거들떠 볼만한 녀석으로는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LearnBoost/kue&quot;&gt;kue&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.8.9, active, &lt;a href=&quot;https://github.com/behrad&quot;&gt;Behrad&lt;/a&gt;, 원제작자는 배신자(?)로 유명한 &lt;a href=&quot;https://medium.com/@tjholowaychuk&quot;&gt;TJ&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redis.io&quot;&gt;redis&lt;/a&gt;를 퍼시스턴스(작업의 진행 상황 저장/복구)로 사용 --&amp;gt; 멀티 프로세스 지원.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cron&quot;&gt;cron&lt;/a&gt; syntax 지원 &lt;strong&gt;안함&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;다양한 &lt;a href=&quot;https://www.npmjs.org/browse/keyword/kue&quot;&gt;contrib 모듈&lt;/a&gt;이 있음.&lt;/li&gt;
&lt;li&gt;문서는 부실.&lt;/li&gt;
&lt;li&gt;express 기반의 ui / api 내장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rschmukler/agenda&quot;&gt;agenda&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.6.19, active, &lt;a href=&quot;http://slingingcode.com&quot;&gt;Ryan Schmukler&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mongodb.org&quot;&gt;mongodb&lt;/a&gt;를 퍼시스턴스로 사용 --&amp;gt; 멀티 프로세스 지원.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cron&quot;&gt;cron&lt;/a&gt; syntax 지원.&lt;/li&gt;
&lt;li&gt;문서는 그럭저럭.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/moudy/agenda-ui&quot;&gt;agenda-ui&lt;/a&gt;: out of box express 기반의 ui 모듈.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mattpat/node-schedule&quot;&gt;node-schedule&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.1.13, 11M+, &lt;a href=&quot;http://mattpatenaude.com&quot;&gt;Matt Patenaude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;퍼시스턴스 지원 &lt;strong&gt;안함&lt;/strong&gt; --&amp;gt; 멀티 프로세스 지원 &lt;strong&gt;안함&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cron&quot;&gt;cron&lt;/a&gt; syntax 지원.&lt;/li&gt;
&lt;li&gt;문서는 그럭저럭.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;멀티 프로세스를 지원하는 퍼시스턴스가 필요없다면 node-schedule 정도면 충분.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;kue는 cron syntax를 지원하지 않아서, &lt;a href=&quot;https://github.com/LearnBoost/kue/blob/master/lib/queue/job.js#L145&quot;&gt;rangeByType&lt;/a&gt;으로 수작업(?)해야 하는게 번거롭고,&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;agenda는 퍼시스턴스도 되고 cron syntax도 지원하지만, 이거 하자고 mongodb를 띄우는게 좀 부담스럽고...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;결론은 안알랴줌.&lt;/p&gt;
&lt;p&gt;may the &lt;em&gt;cron&lt;/em&gt; be with you...&lt;/p&gt;</description>
      <category>hacking/nodejs</category>
      <category>Agenda</category>
      <category>cron</category>
      <category>job scheduler</category>
      <category>kue</category>
      <category>node-schedule</category>
      <category>nodejs</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/516</guid>
      <comments>https://iolothebard.tistory.com/516#entry516comment</comments>
      <pubDate>Fri, 3 Oct 2014 21:14:25 +0900</pubDate>
    </item>
    <item>
      <title>Jang Phil Soon's TV, Pig, Bug - lyrics and translation</title>
      <link>https://iolothebard.tistory.com/515</link>
      <description>&lt;h3&gt;TV, Pig, Bug&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Crazy cars on the road even today.&lt;br /&gt;
Where the children are? Empty playground.&lt;br /&gt;
I spent all day long, in front of TV.&lt;br /&gt;
&lt;br /&gt;
Fill up and up but still poor world,&lt;br /&gt;
our greed shoot up to the sky.&lt;br /&gt;
I ate and ate again all day long, like a pig.&lt;br /&gt;
&lt;br /&gt;
Face up but don't be afraid.&lt;br /&gt;
The pipe dream world.&lt;br /&gt;
How soon will the sorrow of river&lt;br /&gt;
meet the blue sea.&lt;br /&gt;
&lt;br /&gt;
Don't be angry, you'll be tired.&lt;br /&gt;
Don't argue against, there is no much difference.&lt;br /&gt;
It's better to sleep all day long, like a bug.&lt;br /&gt;
&lt;br /&gt;
Face up but don't be afraid.&lt;br /&gt;
The pipe dream world.&lt;br /&gt;
How soon will the sorrow of river&lt;br /&gt;
meet the blue sea.&lt;br /&gt;
&lt;br /&gt;
The time like a bleeding blade,&lt;br /&gt;
You and I walking on it.&lt;br /&gt;
These days without any impression.&lt;br /&gt;
&lt;br /&gt;
ra-ra-lala... ra-ra-lala...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;TV, 돼지, 벌레&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;도로 위엔 오늘도 미친 자동차.&lt;br /&gt;
아이들은 어디에 텅빈 놀이터.&lt;br /&gt;
나는 TV 앞에서 하루를 보냈죠.&lt;br /&gt;
&lt;br /&gt;
채우고 채워도 부족한 세상.&lt;br /&gt;
우리의 욕심은 하늘을 찌르네.&lt;br /&gt;
나는 하루 종일 먹고 또 먹었죠, 돼지처럼.&lt;br /&gt;
&lt;br /&gt;
들여다 봐요, 두려워 말고.&lt;br /&gt;
헛된 꿈으로 가득 채워진 세상.&lt;br /&gt;
이 슬픔의 강은 언제 쯤,&lt;br /&gt;
그 푸른 바다를 만날 수 있을까.&lt;br /&gt;
&lt;br /&gt;
화내지 말아요 피곤해져요.&lt;br /&gt;
따지지 마세요. 거기서 거기.&lt;br /&gt;
그럴 땐 하루 종일 잠을 자봐요, 벌레처럼.&lt;br /&gt;
&lt;br /&gt;
들여다 봐요, 두려워 말고.&lt;br /&gt;
헛된 꿈으로 가득 채워진 세상.&lt;br /&gt;
이 슬픔의 강은 언제 쯤,&lt;br /&gt;
그 푸른 바다를 만날 수 있을까.&lt;br /&gt;
&lt;br /&gt;
날카로운 칼날같은 이시간 위를,&lt;br /&gt;
그대와 나도 걷고 있네요.&lt;br /&gt;
아무런 느낌 조차없는 날들을.&lt;br /&gt;
&lt;br /&gt;
라라랄라... 라라랄라...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ol00RqQa9ac&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;허무한 하루를 보내고 나면 늘 생각나는... 필순언니의 노래...&lt;br /&gt;
유툽에 외국인으로 보이는 누군가가 댓글을 달았다.&lt;br /&gt;
가사는 모르겠지만..., 이 노래를 사랑한다&quot;고...&lt;br /&gt;
그래서... 그에게 노랫말을 알려주고 싶었다. 얼마나 슬픈 노래인지...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아... 시를 번역한다는 건...&lt;br /&gt;
시인이 아니면 할 수 없는 일이다.&lt;br /&gt;
그것도 두개의 언어가 모두 모국어인...&lt;br /&gt;
시인이 아니면...&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: arial, sans-serif; font-size: 13px; line-height: 17px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>life/music</category>
      <category>Jang Phil Soon</category>
      <category>TV_Pig_Bug</category>
      <category>TV돼지벌레</category>
      <category>번역</category>
      <category>장필순</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/515</guid>
      <comments>https://iolothebard.tistory.com/515#entry515comment</comments>
      <pubDate>Sat, 27 Sep 2014 22:21:38 +0900</pubDate>
    </item>
    <item>
      <title>가내수공업 hyperlapse: ffmpeg으로 동영상 재생 속도 바꿔서 인코딩하기</title>
      <link>https://iolothebard.tistory.com/512</link>
      <description>&lt;p&gt;뜬금없이...는 아니고 예전에 쓰다 말고 비공개로 방치해둔 걸... 오늘 발견 -_-;;;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;휴가 마지막날 한라산 올라갔다가... 대략 1분에 걸쳐서 천천히 구름이 백록담을 넘어가는 동영상을 찍었는데... 인스타그램은 15초만 재생할 뿐이고~ 구간을 이리저리 바꿔봐도 15초만 놓고 보면 움직이는지 마는지 느낌도 없고...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그래서! 뒤져보았습니다. 결론은 &lt;a href=&quot;https://www.ffmpeg.org&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;ffmpeg&lt;/a&gt;!!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ffmpeg -i ~baekrokdam.mov -vf &quot;setpts=(1/4)*PTS&quot; -an baekrokdam4x.mov&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;여기서 &lt;code&gt;&quot;setpts=(1/4)*PTS&quot;&lt;/code&gt;의 &lt;code&gt;1/4&lt;/code&gt;를 원하는 배속으로 바꿔주면 됨.&lt;/p&gt;
&lt;p&gt;오디오는 재생 속도가 변경되지 않으므로 &lt;code&gt;-an&lt;/code&gt; 옵션으로 오디오 제거.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;//instagram.com/p/rUfiOUmJjk/embed/&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;요걸 응용하면, 최근 &lt;a href=&quot;http://blog.instagram.com/post/95829278497/hyperlapse-from-instagram&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;인스타그램에서 나온 hyperlapse&lt;/a&gt; 같은 타임랩스 스타일의 동영상을 쉽게 만들 수 있다. 물론... 손 떨림 보정 같은 걸 안해주니... 품질은... -_-;;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;끝.&lt;/p&gt;</description>
      <category>hacking</category>
      <category>ffmpeg</category>
      <category>timelapse</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/512</guid>
      <comments>https://iolothebard.tistory.com/512#entry512comment</comments>
      <pubDate>Sat, 27 Sep 2014 20:30:21 +0900</pubDate>
    </item>
    <item>
      <title>나의 Node.js 답사기 - ORM 편</title>
      <link>https://iolothebard.tistory.com/514</link>
      <description>&lt;p&gt;주의: 예제 코드 따위(!) 없음.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;최근 회사 일로 nodejs에서 mysql을 쓰고 있는데,
&lt;a href=&quot;https://github.com/felixge/node-mysql/&quot;&gt;node-mysql&lt;/a&gt;로
날코딩 - 특히 connection pooling, validation, pyramid-of-doom - 하는 게 맘에 걸려서
ORM 비슷한 걸 써볼까 궁리질 중...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;구글링을 해보니 역시나 비슷한 고민들이 스택에 넘치네...:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/21309311/nodejs-orm-which-one-is-best-formysql&quot;&gt;http://stackoverflow.com/questions/21309311/nodejs-orm-which-one-is-best-formysql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/6007353/which-orm-should-i-use-for-node-js-and-mysql&quot;&gt;http://stackoverflow.com/questions/6007353/which-orm-should-i-use-for-node-js-and-mysql&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;메이저한 것들로는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://sequelizejs.com/&quot;&gt;sequelize.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;2.0.0-rc1, active, mysql/maria/postgresql/sqlite&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mongoosejs.com&quot;&gt;mongoose&lt;/a&gt; 스타일.&lt;/li&gt;
&lt;li&gt;특징: read/write 분리된 커넥션풀. promise 지원. 문서 좋음. CLI 쓸만해보임.&lt;/li&gt;
&lt;li&gt;단점: 타이핑이 어려움.. sequelize라니... sequelize라니... sequelize라니... Orz&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/1602/jugglingdb&quot;&gt;jugglingdb&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.3.0, active, mysql/postgresql/sqlite3/couchdb/mongodb/redis/neo4j+&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/rockdoli/nodejs-productioninwanderworldforgdgupload&quot;&gt;@outsideris 님의 선택&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;특징: man page 스타일의 문서&lt;/li&gt;
&lt;li&gt;단점: man page 스타일의 문서?!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bookshelfjs.org/&quot;&gt;bookshelf.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.7.7, active, mysql/maria/postgresql/sqlite+&lt;/li&gt;
&lt;li&gt;특징: &lt;a href=&quot;http://backbonejs.org&quot;&gt;backbone&lt;/a&gt; 스타일 모델, promise 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dresende/node-orm2/&quot;&gt;node-orm2&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;2.1.19, active, mysql/maria/postgresql/sqlite/mongdb/redshift+&lt;/li&gt;
&lt;li&gt;장점: 이름이 먹어 줌. 모듈 이름이 orm!!! &lt;code style=&quot;font-family: 'Source Code Pro';&quot;&gt;require('orm')&lt;/code&gt; orm이라니 orm이라니 orm...&lt;/li&gt;
&lt;li&gt;단점: 이름이 평범함. 구글링하기가 너무 힘들어 ㅠ..ㅠ&lt;/li&gt;
&lt;li&gt;주의: 구글 검색하면 앞쪽에 나오는 &lt;a href=&quot;https://node-orm.readthedocs.org/en/latest/&quot;&gt;node-orm.readthedocs.org&lt;/a&gt;은 무시할 것. 포크하고 2년 묵힌 쓰레기임.&lt;/li&gt;
&lt;li&gt;참고: &lt;a href=&quot;https://github.com/rafaelkaufmann/q-orm&quot;&gt;out-of-box promise 지원&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zefhemel/persistencejs/&quot;&gt;persistence.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.3.0, +6M, mysql/sqlite/websqlstorage(browser)/localstorage(browser)+&lt;/li&gt;
&lt;li&gt;특징: 브라우저 지원...ㄷㄷㄷ&lt;/li&gt;
&lt;li&gt;예전에 좋은 문서가 있었던거 같은데... 도메인 연장 안했나 봄.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그 외에도 &lt;a href=&quot;https://www.npmjs.org/browse/keyword/orm&quot;&gt;npmjs&lt;/a&gt;나
&lt;a href=&quot;https://nodejsmodules.org/tags/orm&quot;&gt;nodejsmodules&lt;/a&gt;를 뒤져보면:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/balderdashy/waterline&quot;&gt;waterline&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.10.9, active, mysql/postgresql/mongodb/redis+&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://knexjs.org/&quot;&gt;knex.js&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.6.22, active, mysql/maria/postgresql/sqlite+&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vidigami/backbone-sql&quot;&gt;backbone-sql&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.6.4, active, mysql/postgresql/sqlite&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/knyga/light-orm&quot;&gt;lightorm&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.1.3, +8M, mysql+, typescript&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/battlesnake/node-mysql-orm&quot;&gt;mysql-orm&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.0.8, +2M, mysql&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iolo/node-nobatis&quot;&gt;nobatis&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;0.0.7, +2Y, maria, 내가 2년전에 만들다 버린 프로젝트... 그냥 끼워넣어 봄ㅋ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;끝도 없이 나옴...&lt;/p&gt;
&lt;p&gt;선택지가 많다는 것은... 뭔가 마땅한 것이 없다는 얘기...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;본격적인(?) ORM 중에서는 sequelize.js, bookshelf.js, jugglingdb 그리고 waterline 정도가 가장 활발하게 개발이 이루어지고 있는 듯.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;정리해보면:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;오랜만에 nodejs로 mysql을 사용하는데...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/rockdoli/nodejs-productioninwanderworldforgdgupload&quot;&gt;@outsideris님의 슬라이드&lt;/a&gt;를 보고&lt;/li&gt;
&lt;li&gt;jugglingdb를 쳐다보다가...&lt;/li&gt;
&lt;li&gt;promise 지원이 없어서...&lt;/li&gt;
&lt;li&gt;sequelize.js로 마음이 살짝 기울었다가...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sequelize/sequelize-performance&quot;&gt;sequelize.js 팀의 셀프 디스 벤치마크&lt;/a&gt;를 보고&lt;/li&gt;
&lt;li&gt;마음이 흔들려서...&lt;/li&gt;
&lt;li&gt;node-orm2를 다시 거들떠 보다가...&lt;/li&gt;
&lt;li&gt;내가 만들다만 nobatis가 생각나서...&lt;/li&gt;
&lt;li&gt;오랜만에 clone 해서 뜯어고치다가...&lt;/li&gt;
&lt;li&gt;이게 뭐하는 짓인가 싶어서...&lt;/li&gt;
&lt;li&gt;블로그를 글을 쓰고 있음...(이걸 왜 정리하는 거냣?)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 493px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214C9F43542671EA31&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214C9F43542671EA31&quot; width=&quot;493&quot; height=&quot;311&quot; filename=&quot;wal.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;(출처:&amp;nbsp;&lt;a href=&quot;http://blog.daum.net/minyounghung/80&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://blog.daum.net/minyounghung/80&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;결론은... 기승전&lt;strong&gt;블로그&lt;/strong&gt; Orz&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;may the SQL be with you...&lt;/p&gt;</description>
      <category>hacking/nodejs</category>
      <category>bookshelfjs</category>
      <category>jugglingdb</category>
      <category>MySQL</category>
      <category>node-orm2</category>
      <category>nodejs</category>
      <category>ORM</category>
      <category>sequelize</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/514</guid>
      <comments>https://iolothebard.tistory.com/514#entry514comment</comments>
      <pubDate>Sat, 27 Sep 2014 17:03:20 +0900</pubDate>
    </item>
    <item>
      <title>mysql에서 create_at/updated_at 컬럼 사용하기</title>
      <link>https://iolothebard.tistory.com/513</link>
      <description>&lt;p&gt;오랜만에 mysql 닭질...&lt;/p&gt;
&lt;p&gt;별 생각없이 허접한 테이블을 만들어서 brew로 설치한 mariadb로 잘 쓰고 있었는데...&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-sql&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span class=&quot;meta create sql&quot;&gt;&lt;span class=&quot;keyword other create sql&quot;&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword other sql&quot;&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;entity name function sql&quot;&gt;&lt;span&gt;foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;created_at&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type sql&quot;&gt;&lt;span&gt;TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword other DDL create II sql&quot;&gt;&lt;span&gt;NOT&amp;nbsp;NULL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support function scalar sql&quot;&gt;&lt;span&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updated_at&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;storage type sql&quot;&gt;&lt;span&gt;TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword other DDL create II sql&quot;&gt;&lt;span&gt;NOT&amp;nbsp;NULL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support function scalar sql&quot;&gt;&lt;span&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword other DDL create II sql&quot;&gt;&lt;span&gt;ON&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword other DML sql&quot;&gt;&lt;span&gt;UPDATE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;support function scalar sql&quot;&gt;&lt;span&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;source sql&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;진짜 mysql이 깔린 리눅스 서버에 배포하다가... 밑도 끝도 없는 에러~(두둥!)&lt;/p&gt;
&lt;pre class=&quot;editor-colors lang-text&quot;&gt;&lt;div class=&quot;line&quot;&gt;&lt;span class=&quot;text plain&quot;&gt;&lt;span class=&quot;meta paragraph text&quot;&gt;&lt;span&gt;ERROR&amp;nbsp;1294&amp;nbsp;(HY000)&amp;nbsp;at&amp;nbsp;line&amp;nbsp;2:&amp;nbsp;Invalid&amp;nbsp;ON&amp;nbsp;UPDATE&amp;nbsp;clause&amp;nbsp;for&amp;nbsp;'created_at'&amp;nbsp;column&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;구글링을 좀 해보니...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jasonbos.co/two-timestamp-columns-in-mysql/&quot;&gt;http://jasonbos.co/two-timestamp-columns-in-mysql/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아 맞다. 너무 오래 떠나있었더니... mysql 이 얼마나 구린지 망각하고 있었어 ㅠㅠ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;좋은 소식은... 2012년에 릴리즈된 5.6.5 에선 수정되었다는 것:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html&quot;&gt;http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html&quot;&gt;http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나쁜 소식은... 우리들의 서버에는 더 오래된 버전이 설치되어 있다는 현실...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;현실 세계의 IDC에서 흔히 볼 수 있는 CentOS 6에는 5.1.71&lt;/li&gt;
&lt;li&gt;현실 세계의 IDC에선 좀처럼 보기 힘든 우분투 14.04에는 5.5.38&lt;/li&gt;
&lt;li&gt;현실 세계의 IDC에선 구경해 본 적도 없는 CentOS 7에는 아예 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;결론은... mysql 없는 세상에서 코딩하고 싶다.&lt;/p&gt;</description>
      <category>hacking</category>
      <category>MySQL</category>
      <category>timestamp</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/513</guid>
      <comments>https://iolothebard.tistory.com/513#entry513comment</comments>
      <pubDate>Fri, 26 Sep 2014 11:55:31 +0900</pubDate>
    </item>
    <item>
      <title>맥에서 터미널만으로 docker 사용하기: macox + vmware/vmrun + docker</title>
      <link>https://iolothebard.tistory.com/511</link>
      <description>&lt;h2 id=&quot;-&quot;&gt;맥/윈도에서도 도커를 쓰고 싶어요!!&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;겉으로 보이는 증상은 그렇지만, 기술적으로는 &lt;strong&gt;도커 호스트와 도커 클라이언트가 다른 머신&lt;/strong&gt;인 상황이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 377px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2236A14C53D7B8530A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2236A14C53D7B8530A&quot; width=&quot;377&quot; height=&quot;347&quot; filename=&quot;20140729-docker-vmware-treeswing.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;이 유명한(?) 그림의 출처는 1989에 출간된 &lt;a href=&quot;http://books.google.co.kr/books?id=eo2y8mgEFHAC&amp;amp;pg=PA9&quot;&gt;Total Quality Management&lt;/a&gt;인데,
지금도 &lt;a href=&quot;http://www.oaklandconsulting.com/total-quality-management-operational-excellence-fourth-edition-available-now/&quot;&gt;개정판&lt;/a&gt;이 나온다능~ ㄷㄷㄷ&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;도커 호스트는 반드시 리눅스 머신이어야 하기 때문에, 맥/윈도에서는 별도의 진짜 리눅스 머신을 준비하던가,
&lt;a href=&quot;http://virtualbox.org&quot;&gt;virtualbox&lt;/a&gt;나 &lt;a href=&quot;http://vmware.com&quot;&gt;vmware&lt;/a&gt; 등을 이용해서 가상의 리눅스 머신을 준비한다.
&lt;a href=&quot;http://boot2docker.io&quot;&gt;boot2docker&lt;/a&gt;를 사용하면 간단하게 윈도/맥에서 virutalbox로 &lt;a href=&quot;http://tinycorelinux.net&quot;&gt;Tiny Core Linux&lt;/a&gt; 배포판을 사용하는 도커 호스트를 만들 수 있다.&lt;/li&gt;
&lt;li&gt;도커 호스트에서는 도커 데몬이 tcp 소켓으로도 요청을 받도록(기본은 unix 도메인 소켓으로만 요청을 받음) 설정하고,&lt;/li&gt;
&lt;li&gt;도커 클라이언트에서는 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-H&lt;/code&gt; 옵션이나 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;DOCKER_HOST&lt;/code&gt; 환경 변수를 사용해서 tcp 소켓을 통해 도커 데몬에 요청을 보내도록 설정한다.&lt;/li&gt;
&lt;li&gt;포트 매핑(&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-p&lt;/code&gt;), 볼륨 매핑(&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-v&lt;/code&gt; 옵션)을 사용할 때 주의하자.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;boot2docker로 충분하다면... 이 글은 엄한 삽질일 뿐~ 안녕히 가세요~~ m(_ _)m&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내 경우엔, 작고 가볍고 docker와 궁합이 잘맞는 &lt;a href=&quot;http://coreos.com&quot;&gt;CoreOS&lt;/a&gt;를 거금(!)을 주고 구입한 VMware Fusion에 올려서 도커 호스트로 쓰고 있어서 약간(?)의 삽질이 필요하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CoreOS를 한 문장으로 요약하면 &lt;strong&gt;LXC/docker/fleetd/etcd등을 활용하여 OS 수준에서 개별 서비스의 HA/LB를 지원하는 리눅스 배포판&lt;/strong&gt;이다.
CoreOS에 대해서는 다음에 따로 얘기할 기회가 있을랑가 없을랑가... 일단 넘어가자~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-by-step-in-docker-in-coreos-in-vmware-in-macosx&quot;&gt;Step by Step: in Docker in CoreOS in VMware in MacOSX&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;이 부분은 &lt;a href=&quot;http://blog.iolo.kr/508&quot;&gt;처음 올렸던 삽질기&lt;/a&gt;를 좀 더 자세히 풀 어 쓴 것이니, 이미 봤고 이해했다면 스킵하시길~&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 글에서는 맥 osx(도커 클라이언트)와 CoreOS(도커 호스트)를 구분하기 위해 shell prompt를 각각 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX&lt;/code&gt;과 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;COREOS&lt;/code&gt;로 해두었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CoreOS가 제공하는 VMware용 이미지 다운로드 &amp;amp; 설치 &amp;amp; 실행하고:&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ curl -LO http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip
MACOSX$ unzip coreos_production_vmware_insecure.zip
MACOSX$ open coreos_production_vmware_insecure.vmx
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;참고: 2014.07.29 현재 CoreOS alpha는 docker 1.1.x, CoreOS beta는 docker 1.0.x 이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;CoreOS 콘솔(VMware의 vm 창)에 가서 (엔터 땅땅치면) 화면에 나오는 IP를 &lt;strong&gt;눈&lt;/strong&gt;으로 확인하고:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ ssh -i insecure_ssh_key core@192.168.xxx.xxx
COREOS$
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;매번 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-i insecure_ssh_key&lt;/code&gt; 하기 귀찮으면, 진짜 ssh key로 변경하고:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ scp -i insecure_ssh_key ~/.ssh/id_rsa.pub core@192.168.xxx.xxx:/home/core/.ssh/authorized_keys
MACOSX$ ssh core@192.168.xxx.xxx
COREOS$
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;매번 IP로 접속하기 귀찮으면, &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;/etc/hosts&lt;/code&gt;에 추가하고(이 글에서는 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;donald&lt;/code&gt;라는 이름을 붙였다):&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ cat &amp;gt;&amp;gt; /private/etc/hosts
192.168.xxx.xxx donald
^D
MACOSX$ dscacheutil -flushcache
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ssh로 접속해서, 남들 다하는 &lt;strong&gt;hello world&lt;/strong&gt; 한 번 해보고:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ ssh core@192.168.xxx.xxx
COREOS$ docker run /bin/echo hello world
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
ba5877dc9bec: Download complete
511136ea3c5a: Download complete
...
2318d26665ef: Download complete
hello world
COREOS$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;처음에는 우분투 이미지 다운받느라 오래 걸림.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;맥 터미널에서, 남들 다하는 &lt;strong&gt;hello world&lt;/strong&gt; 한 번 해봤더니:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ docker -H tcp://192.168.xxx.xxx:2375 run ubuntu /bin/echo hello world
2014/07/24 14:04:07 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
MACOSX$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;당근 안되겠지~ 나도 그 정도는 알아~~&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CoreOS의 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;docker&lt;/code&gt; 데몬이 tcp 요청을 받도록 설정하고:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;COREOS$ sudo sh -c &quot;cat &amp;gt; /etc/systemd/system/docker-tcp.socket&quot;
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=2375
BindIPv6Only=both
Service=docker.service
[Install]
WantedBy=sockets.target
^D
COREOS$ sudo systemctl enable docker-tcp.socket
COREOS$ sudo systemctl stop docker
COREOS$ sudo systemctl start docker-tcp.socket
COREOS$ sudo systemctl start docker
COREOS$ docker -H tcp://localhost:2375 run ubuntu /bin/echo hello world
hello world
COREOS$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;앞에서 우분투 이미지 다운받았다면 이번엔 금방 끝남.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;다시 도전! 맥 터미널에서, 남들 다하는 &lt;strong&gt;hello world&lt;/strong&gt; 한 번 해보면:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ docker -H tcp://192.168.xxx.xxx:2375 run ubuntu /bin/echo hello world
hello world
MACOSX$
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;매번 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-H tcp://192.168.xxx.xxx&lt;/code&gt; 하기 귀찮으면, &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;DOCKER_HOST&lt;/code&gt; 환경변수 설정하고:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;MACOSX$ export DOCKER_HOST=&quot;tcp://192.168.xxx.xxx:2375&quot;
MACOSX$ docker run ubuntu /bin/echo hello world
hello world
MACOSX$
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 정도로 만족하고 그냥 쓰면 좋았을 것을...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;VMware 창이 눈에 밟히네... Orz&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;-cli-vmware-&quot;&gt;터미널(CLI)에서 VMware 제어하기&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서~~ 삽질을 조금 더 해 보았습니다~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/212D3B4C53D7B8531D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F212D3B4C53D7B8531D&quot; width=&quot;570&quot; height=&quot;469&quot; filename=&quot;20140729-docker-vmware-termcat.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참고: VMware가 제공하는 공식 문서 &lt;a href=&quot;https://www.vmware.com/support/developer/vix-api/vix111_vmrun_command.pdf&quot;&gt;Using vmrun to Control Virtual Machines&lt;/a&gt;을 참조하시길...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;먼저, &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;vmrun&lt;/code&gt; 명령 사용하기 편하게 링크&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ ln -s /Applications/VMware Fusion.app/Contents/Library/vmrun /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;옵션없이 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;vmrun&lt;/code&gt; 명령을 실행하면 뻔한~ 도움말이 나온다:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vmrun
vmrun version 1.13.2 build-1887983
Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS]
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;vm-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;vm-&quot;&gt;vm 시작하고 종료하기&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;vm 시작&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vmrun start &amp;lt;path-to-vmx-file&amp;gt; [nogui|gui]
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;vm 종료|리셋|정지&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vmrun stop|rest|suspend &amp;lt;path-to-vmx-file&amp;gt; [soft|hard]
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;vmware-guest-ip-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;vmware-guest-ip-&quot;&gt;VMware의 guest IP 얻기&lt;/h4&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;VMware Fusion 6 이상&lt;/li&gt;&lt;/ul&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vmrun getGuestIPAddress &amp;lt;path-to-vmx-file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그러나...&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;--&amp;gt; VMware guest(여기서는 CoreOS)에 VMware Tools를 설치해야하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 커널 모듈을 컴파일해야 하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 그럴려면 gcc를 깔아야 하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 나는야 CoreOS?!&lt;/li&gt;
&lt;li&gt;--&amp;gt; 흠... 역시 CoreOS 커스텀 이미지를 만들어야 하는건가...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 그건 리눅스에서만 할 수 있고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 리눅스를 설치해야...?!!&lt;/li&gt;
&lt;li&gt;--&amp;gt; 리눅스가 있으면 내가 이 삽질을 왜 하는겨?? -_-;;;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;--&amp;gt; 난 누구? 여긴 어디?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;VMware Fusion 5 이하&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ grep ethernet0 &amp;lt;path-to-vmx-file&amp;gt;
...
ethernet0.connectionType = &quot;hosted&quot;
ethernet0.addressType = &quot;generated&quot;
ethernet0.address = &quot;00:11:22:33:44:55&quot;
ethernet0.generatedAddress = &quot;00:11:22:33:44:55&quot;
...
$ cat /var/db/vmware/vmnet-dhcpd-vmnet8.leases
...
lease 192.168.xxx.xxx {
...
  hardware ethernet 00:11:22:33:44:55;
...
}
...
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;눈을 크게 뜨고 찾아봅시다~&lt;/li&gt;
&lt;li&gt;--&amp;gt; 벌써 노안인가... 잘 안보여 ㅠㅠ&lt;/li&gt;
&lt;li&gt;--&amp;gt; 스크립트 짤까?&lt;/li&gt;
&lt;li&gt;--&amp;gt; 귀찮... -_-;;;&lt;/li&gt;
&lt;li&gt;--&amp;gt; 그냥 IP를 고정하자!&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;vmware-guest-mac-ip-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;vmware-guest-mac-ip-&quot;&gt;VMware의 guest MAC/IP 고정&lt;/h4&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;guest가 NAT/DHCP 네트웍 어댑터 사용해야 함.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(가상 랜카드의) MAC 고정&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vi &amp;lt;path-to-vmx-file&amp;gt;
ethernet0.connectionType = &quot;nat&quot;
ethernet0.addressType = &quot;static&quot;
ethernet0.address = &quot;00:11:22:33:44:55&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(특정 MAC에 할당할) IP 고정&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
host dock {
  hardware ethernet 00:11:22:33:44:55;
  fixed-address 192.168.xxx.xxx;
}
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;vmware-nat-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;vmware-nat-&quot;&gt;VMware의 NAT 설정&lt;/h4&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예: VMware host(mac osx)으로 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;8080&lt;/code&gt;을 VMware guest(coreos) &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;80&lt;/code&gt;으로 전달:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ vi /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf
[incomingtcp]
8080 = 192.168.xxx.xxx:80
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-vmware-etc-hosts-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-vmware-etc-hosts-&quot;&gt;(VMware와는 무관하지만) &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;/etc/hosts&lt;/code&gt; 파일 설정&lt;/h4&gt;
&lt;p&gt;예: &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;192.168.xxx.xxx&lt;/code&gt;의 호스트 이름을 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;donald&lt;/code&gt;로 설정:&lt;/p&gt;
&lt;pre class=&quot;editor-colors&quot;&gt;&lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;$ cat &amp;gt;&amp;gt; /private/etc/hosts
192.168.xxx.xxx donald
^D
$ dscacheutil -flushcache
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이제라도 만족하고 그냥 쓰면 좋았을 것을...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;개발 하는 동안 만이라도... 작업 파일들 한 군데 몰아놓으면 안되겠니??&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;-mac-osx-coreos-on-vmware-maybe-ubuntu-&quot;&gt;도커 클라이언트(mac osx) + 도커 호스트(coreos on vmware) + 도커 컨테이너(maybe ubuntu?) 파일 공유하기&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;경고: 이제부턴 결론 없는 삽질이므로 심신이 약하거나 삽질알러지가 있는 분들은... 안녕히 가세요 m(_ _)m &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고... 삽질은 계속된다...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 id=&quot;-&quot;&gt;도커 호스트 &amp;lt;---&amp;gt; 도커 컨테이너&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;데이터 볼륨(이라고 쓰고 디스크라고 읽는다)을 사용하거나 볼륨 매핑 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;-v&lt;/code&gt; 옵션으로 해결.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이건 나중에 따로 설명할 기회가 있을라나 없을라나... 아무튼 굉장히 중요한 부분인데...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;궁금하면 Docker 프로젝트가 제공하는 공식 문서 &lt;a href=&quot;https://docs.docker.com/userguide/dockervolumes/&quot;&gt;Managing Data in Containers&lt;/a&gt;를 참조하시길...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 id=&quot;-&quot;&gt;도커 호스트 &amp;lt;---&amp;gt; 도커 클라이언트&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;리눅스에서 도커를 사용하는 경우라면 도커 호스트와 클라이언트가 같은 머신이라... 공유하고 나발이고 없음.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;내 경우에는 도커 호스트는 VMware 가상 머신에서 굴러가는 CoreOS(즉, VMware guest),
도커 클라이언트는 맥 OSX(즉 VMware host)라서 VMware가 제공하는 공유 폴더로 해결...하고 싶었지만...&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;VMware의 공유 폴더는 리눅스 guest에서 보면 &lt;code style=&quot;font-family: 'Anonymous Pro';&quot;&gt;vmhgfs&lt;/code&gt;고, 이걸 쓰려면...&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;--&amp;gt; VMware guest에 VMware Tools를 설치해야하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 커널 모듈을 컴파일해야 하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 그럴려면 gcc를 깔아야 하고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 나는야 CoreOS?!&lt;/li&gt;
&lt;li&gt;--&amp;gt; 흠... 역시 CoreOS 커스텀 이미지를 만들어야 하는건가...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 그건 리눅스에서만 할 수 있고...&lt;/li&gt;
&lt;li&gt;--&amp;gt; 리눅스를 설치해야...?!&lt;/li&gt;
&lt;li&gt;--&amp;gt; 리눅스가 있으면 내가 이 삽질을 왜 하는겨?? -_-;;;&lt;/li&gt;
&lt;li&gt;--&amp;gt; 이건 어디선가 본 것만 같은... Orz&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일단, nfs나 sshfs 같은 네트웍 파일 시스템을 쓰면 되겠지만...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;에... 속도도 안나오고...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;에... 결정적으로 뽀대가...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2321E74C53D7B85235&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2321E74C53D7B85235&quot; width=&quot;320&quot; height=&quot;240&quot; filename=&quot;20140729-docker-vmware-chacha.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(아... 이 움짤 꼭 한번 써먹고 싶었는데... 이런 허접한 데 쓰게 될 줄이야ㅠㅠ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;that's not all folks yet&lt;/em&gt;&lt;/p&gt;</description>
      <category>hacking</category>
      <category>coreos</category>
      <category>docker</category>
      <category>vmrun</category>
      <category>VMware</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/511</guid>
      <comments>https://iolothebard.tistory.com/511#entry511comment</comments>
      <pubDate>Wed, 30 Jul 2014 00:17:37 +0900</pubDate>
    </item>
    <item>
      <title>docker getting started: 왕초보를 위한 docker 입문</title>
      <link>https://iolothebard.tistory.com/510</link>
      <description>&lt;p&gt;이 글은 쉽게 이해하고 설명하기 위해 의도적으로 왜곡한… 혹은 몰라서 왜곡된… 내용을 포함하고 있다.&lt;/p&gt;
&lt;p&gt;잘못된 부분에 대한 지적질이나 더 쉽게 이해하고 설명할 수 있는 제안은 언제든지 환영이지만, 진실을 향한 열정(?)은 참아주시길…&lt;/p&gt;
&lt;p&gt;진실을 알고 싶은 분들을 위해서 곳곳에 진실로 가는 링크를 걸어두었지만…
때론… 저 너머에 있는 진실을 모르는 편이 나을 수도…(먼산)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;(나름대로) 용어 정리&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://docker.io&quot;&gt;도커(docker)&lt;/a&gt;는 &lt;a href=&quot;https://linuxcontainers.org&quot;&gt;리눅스 컨테이너(linux container; LXC)&lt;/a&gt;를 관리하는 도구(tool)다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도커 컨테이너(docker container)&lt;/strong&gt;는 도커가 관리하는 리눅스 컨테이너 프로세스다.
기술적으로는 가상머신(virtual machine; vm)이 &lt;strong&gt;아니다&lt;/strong&gt;. 그렇지만 초(!)경량 가상머신이라고 생각하면 이해하기 쉽다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도커 호스트&lt;/strong&gt;는 하나 이상의 도커 컨테이너를 실행하는 &lt;strong&gt;리눅스&lt;/strong&gt; 머신이다. 쉽게 말해 도커 서버다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도커 데몬&lt;/strong&gt;은 도커 호스트에서 실행하면서 도커 클라이언트의 요청을 받아 도커 컨테이너를 실행/종료/관리한다. 쉽게 말해 도커 서버 프로세스다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도커 클라이언트&lt;/strong&gt;는 &lt;code&gt;docker&lt;/code&gt; 명령을 실행하는 머신이다. 쉽게 말해 바로 앞에 있는 머신/프로그램이다.
도커 클라이언트는 도커 호스트와 다른 머신일 수 도 있고, 리눅스가 아니어도 된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도커 이미지&lt;/strong&gt;는 도커 컨테이너의 초기 상태를 기록한 파일이다. 말하자면 파일시스템을 효율적으로 압축한 파일이다(iso 파일처럼).
도커 이미지는 버저닝되며(git commit처럼), 상속되며(git branch처럼), 원격에 보관할수도 있고(git push처럼), 원격에서 내려받을 수도 있다(git pull처럼).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://hub.docker.com&quot;&gt;도커 허브&lt;/a&gt;&lt;/strong&gt;는 수많은 개발자들이 다양한 도커 이미지를 올리고/받고/검색할 수 있는 공식 도커 이미지 저장소(repository)다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;백문이 불여일견! 내가 좋아하는 화이트페이퍼 스타일(?)로 그려보면:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 570px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2113444A53D27A1928&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2113444A53D27A1928&quot; width=&quot;570&quot; height=&quot;397&quot; filename=&quot;docker_getting_started.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 id=&quot;-docker-&quot;&gt;&lt;a name=&quot;-docker-&quot; href=&quot;#-docker-&quot;&gt;&lt;/a&gt;&lt;code&gt;docker&lt;/code&gt; 명령 요약&lt;/h2&gt;
&lt;p&gt;옵션없이 &lt;code&gt;docker&lt;/code&gt;를 실행해보면 사용할 수 있는 커맨드 목록을 포함한 뻔한~ 도움말이 나온다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker
Usage: docker [OPTIONS] COMMAND [arg...]
 -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use
A self-sufficient runtime for linux containers.
Commands:
    attach    Attach to a running container
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;옵션없이 커맨드만 지정해서 &lt;code&gt;docker&lt;/code&gt;를 실행해보면 해당 커맨드의 뻔한~ 도움말이 나온다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run
 Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
  -a, --attach=[]            Attach to stdin, stdout or stderr.
...
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;도커 데몬 실행(도커 호스트에서만)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;$ docker -d ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;대부분 도커 호스트가 부팅될 때 자동으로 도커 데몬이 실행되므로 추가 설정은 필요없다.&lt;/p&gt;
&lt;p&gt;도커 호스트와 도커 클라이언트가 다른 머신(진짜든 가짜든)이라면 tcp 소켓으로 요청을 받을 수 있도록 추가 설정이 필요한데,
이건 호스트의 리눅스 배포판에 따라 다르니까… 생략.&lt;/p&gt;
&lt;h3 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;도커 호스트 지정(도커 호스트의 별도의 머신(진짜든 가짜든)일 경우에만)&lt;/h3&gt;
&lt;p&gt;매번 &lt;code&gt;-H&lt;/code&gt; 옵션을 사용하거나:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker -H tcp://192.168.xxx.xxx:2375 ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;한 번만 &lt;code&gt;DOCKER_HOST&lt;/code&gt; 환경 변수를 잡아줘야 한다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ export DOCKER_HOST=&quot;tcp://192.168.xxx.xxx:2375&quot;
$ docker ...
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너 관리&lt;/h3&gt;
&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너 목록 보기&lt;/h4&gt;
&lt;p&gt;실행 중인 컨테이너만 보려면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker ps
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;중지된(그러나 아직 삭제되지 않아서 다시 시작할 수 있는) 컨테이너도 보려면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker ps -a
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;새 컨테이너 실행&lt;/h4&gt;
&lt;p&gt;새 장비를 구매해서, 미리 만들어둔 이미지를 설치하고, 전원을 켜는 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run [options] &amp;lt;image&amp;gt; [command] [args...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;예: 도커 이미지 저장소가 제공하는 &lt;a href=&quot;https://registry.hub.docker.com/search?q=nginx&quot;&gt;공식 nginx 이미지&lt;/a&gt;를 탑재한 컨테이너를 실행.
도커 호스트(192.168.xxx.xxx)의 &lt;code&gt;8080&lt;/code&gt; 포트를 nginx 컨테이너의 &lt;code&gt;80&lt;/code&gt; 포트로, &lt;code&gt;/www&lt;/code&gt; 디렉토리를 &lt;code&gt;/usr/local/nginx/html&lt;/code&gt; 디렉토리로 매핑.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mkdir -p /www ; echo 'hello' &amp;gt; /www/index.html
$ docker run -d -p 8080:80 -v /www:/usr/local/nginx/html:ro nginx
29940322a6c69aafe14dc58d608b3e43ff6043b698e3a4e334f9b067289d00db
$ docker ps
CONTAINER ID  IMAGE         COMMAND  CREATED        STATUS        PORTS                 NAMES
29940322a6c6  nginx:latest  nginx    5 seconds ago  Up 8 seconds  0.0.0.0:8080-&amp;gt;80/tcp  loving_hypatia
$ curl http://192.168.xxx.xxx:8080
hello
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;컨테이너를 만드는 과정은 매우 중요하다. 조만간 별도로 다룰 기회에 있을지 어떨지…&lt;/p&gt;
&lt;p&gt;자세한 내용은 &lt;a href=&quot;http://docs.docker.com/reference/run/&quot;&gt;Docker Run Reference&lt;/a&gt;를 참조하시길…&lt;/p&gt;
&lt;p&gt;IMHO, 컨테이너를 만드는 명령과, 시작하는 명령이 분리되지 않고 &lt;code&gt;run&lt;/code&gt;으로 합쳐놓은 건… 좋은 선택이 아닌 듯…&lt;/p&gt;
&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;(중지된) 컨테이너 시작&lt;/h4&gt;
&lt;p&gt;전원을 켜는(부팅하는) 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker start [options] &amp;lt;container...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;(실행 중인) 컨테이너 재시작&lt;/h4&gt;
&lt;p&gt;콘솔에서 &lt;code&gt;Ctrl+Alt+Del&lt;/code&gt; 혹은 &lt;code&gt;reboot&lt;/code&gt;하는 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker restart [options] &amp;lt;container...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-sigterm-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-sigterm-&quot;&gt;&lt;a name=&quot;-sigterm-&quot; href=&quot;#-sigterm-&quot;&gt;&lt;/a&gt;(실행 중인) 컨테이너 중지(&lt;code&gt;SIGTERM&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;shutdown&lt;/code&gt;하고 전원을 끄는 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker stop [options] &amp;lt;container...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-sigkill-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-sigkill-&quot;&gt;&lt;a name=&quot;-sigkill-&quot; href=&quot;#-sigkill-&quot;&gt;&lt;/a&gt;(실행 중인) 컨테이너를 강제 중지(&lt;code&gt;SIGKILL&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;강제로 전원을 끄는(플러그를 뽑아버리는) 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker kill [options] &amp;lt;container...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;(중지된) 컨테이너 삭제&lt;/h4&gt;
&lt;p&gt;서버 장비를 &lt;strong&gt;폐기&lt;/strong&gt;하는 거다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker rm [options] &amp;lt;container...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;뻔한 듯 뻔하지 않은 얘기를 하면…
컨테이너를 삭제(rm; 장비 폐기)하기 전에 이미지를 만들어(commit; 백업) 두지 않으면 실행(run; 장비 구입) 이후에 생긴 변경은 복구할 방법은 없다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너/이미지의 상세 정보 조회&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker inspect [options] &amp;lt;container|image...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;예: 지정한 컨테이너의 IP 주소를 얻으려면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker inspect docker inspect --format='{{.NetworkSettings.IPAddress}}' 29940322a6c6
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너의 로그 보기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker logs [options] &amp;lt;container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;예: 지정한 컨테이너의 로그(stdout/err)를 계속 보려면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker logs -t 29940322a6c6
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너의 프로세스 보기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker top [options] &amp;lt;container&amp;gt; [ps option]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;컨테이너의 파일시스템 변경사항 보기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker diff [options] &amp;lt;container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;이미지 관리&lt;/h3&gt;
&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;(실행 가능한) 이미지 목록 보기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker images [options]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;도커 허브에서 이미지 검색&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker search [options] &amp;lt;term&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;도커 허브에서 이미지 내려받기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker pull [options] &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;예: 도커 허브에서 nginx가 기본으로 설치되어 있는 이미지를 내려 받으려면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker pull nginx
$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED      VIRTUAL SIZE
nginx       latest  61e8f94e1d65  39 hours ago 492.7 MB
...
$ docker run -d -p 80:80 nginx
...
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;도커 허브에 이미지 올리기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker push [options] &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;이미지를 올리려면 &lt;a href=&quot;http://hub.docker.com&quot;&gt;도커 허브&lt;/a&gt;에 가입해야 한다. 공개된 이미지는 무료지만, 비공개 이미지는 유료! (맛뵈기로 비공개 이미지 한 개는 공짜)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;-dockerfile-&quot;&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/h4&gt;&lt;h4 id=&quot;-dockerfile-&quot;&gt;&lt;a name=&quot;-dockerfile-&quot; href=&quot;#-dockerfile-&quot;&gt;&lt;/a&gt;&lt;code&gt;Dockerfile&lt;/code&gt;로 부터 이미지 만들기&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ docker build [options] &amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이미지를 만드는 과정은 매우 중요하다. 조만간 별도로 다룰 기회에 있을지 어떨지…&lt;/p&gt;
&lt;p&gt;자세한 내용은 &lt;a href=&quot;http://docs.docker.com/reference/builder/&quot;&gt;Dockefile Reference&lt;/a&gt;를 참조하시길…&lt;/p&gt;
&lt;h4 id=&quot;-snapshot-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-snapshot-&quot;&gt;&lt;a name=&quot;-snapshot-&quot; href=&quot;#-snapshot-&quot;&gt;&lt;/a&gt;컨테이너로 부터 이미지 만들기(snapshot)&lt;/h4&gt;
&lt;p&gt;백업!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker commit [options] &amp;lt;container&amp;gt; &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;뻔한 듯 뻔하지 않은 얘기를 재방송하면:
컨테이너를 삭제(rm; 장비 폐기)하기 전에 이미지를 만들어(commit; 백업) 두지 않으면 실행(run; 장비 구입) 이후에 생긴 변경은 복구할 방법은 없다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;-&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4 id=&quot;-&quot;&gt;&lt;a name=&quot;-&quot; href=&quot;#-&quot;&gt;&lt;/a&gt;이미지 삭제&lt;/h4&gt;
&lt;p&gt;백업 디스크를 &lt;strong&gt;폐기&lt;/strong&gt;한다&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker rmi [options] &amp;lt;image...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;예: 종료된 컨테이너가 사용헀던 이미지 모두 삭제&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker rmi $(docker ps -aq)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;that’s all folks&lt;/em&gt;&lt;/p&gt;</description>
      <category>hacking</category>
      <category>docker</category>
      <author>iolo</author>
      <guid isPermaLink="true">https://iolothebard.tistory.com/510</guid>
      <comments>https://iolothebard.tistory.com/510#entry510comment</comments>
      <pubDate>Sat, 26 Jul 2014 00:40:48 +0900</pubDate>
    </item>
  </channel>
</rss>