{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"29626add-7b98-5b04-9aa3-53aa8ec9fab6","excerpt":"checkpoint 12 1~5 공식 모듈의 작동방식 ()  https://nodejs.org/dist/latest-v8.x/docs/api/modules.html  꼭 한번 읽어봐야 함. 두 번 불리면 한 번 불리고, 상호 참조에 대해서도 찾아볼 칠요가 있다. http://nodejs.sideeffect.kr/docs/v0.8.20/api/modules.html  읽기!! promise는 코딩 기법 async await은 promise를 기반으로 만들어짐 이미지 파일은 고려하지 않고 html…","html":"<h2 id=\"checkpoint-12\"><a href=\"#checkpoint-12\" aria-label=\"checkpoint 12 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>checkpoint 12</h2>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">module.exports === exports 가 가리키는 건 같음.\n하나의 object가 묶여져있음.\n\n1.\nvar x = 10\nvar mod = require(&#39;./lib/my-module.js&#39;) // {X :30}이 담겨있음\nvar result = mod.x\n\n3. 동일한 모듈을 두 번 부르는 경우,\n\n같은 모듈은 한번만 불러옴.\nmod1과 mod2는 같은 메모리를 참조한다\n3번과 4번은 같은 맥락이다.\n\n5번도 같은 맥락으로 1번만 불러온다.\nrequire만 해도 글로벌 scope에 있는 애들은 전부\n실행이 된다!(exports하지 않아도)\nnode에서도 experimenatal 주면 import export 실행해볼 수 있음\n\n8. 스택이 다 비워지고 나서야 비동기로 가기 때문에\nACB\nconsole.log(&quot;A&quot;);\nsetTimeout(function() {\n  console.log(&quot;B&quot;);\n}, 1000);\n\nsuperLongComputation();\n\nconsole.log(&quot;C&quot;);\n\n9</code></pre></div>\n<p>1~5 공식 모듈의 작동방식 () <a href=\"https://nodejs.org/dist/latest-v8.x/docs/api/modules.html\">https://nodejs.org/dist/latest-v8.x/docs/api/modules.html</a> 꼭 한번 읽어봐야 함. 두 번 불리면 한 번 불리고, 상호 참조에 대해서도 찾아볼 칠요가 있다.</p>\n<p><a href=\"http://nodejs.sideeffect.kr/docs/v0.8.20/api/modules.html\">http://nodejs.sideeffect.kr/docs/v0.8.20/api/modules.html</a> 읽기!!</p>\n<p>promise는 코딩 기법</p>\n<p>async await은 promise를 기반으로 만들어짐</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">var</span> existingUser <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">finduserInDataBase</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">var</span> securedUser <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">hashPassword</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>이미지 파일은 고려하지 않고 html만 저장하기</p>\n<p>날 것을 받아오는 것</p>\n<p>리다이렉트 되는 사이트들은 제대로 작동하지 않음</p>\n<p>html만 저장하면 됨, 리소스는 저장하지 않아도 됨</p>\n<p>https도 고려해야 함</p>\n<p>한 파일에 다 넣지 말고, 분리해서 구현할 것</p>\n<p>worker가 있으면 각각의 역할을 분리해서</p>\n<p>하나는 html만 분리하는 식으로</p>\n<p>cron은 다 하고 해도 됨</p>\n<p>풀어보다가 test가 무의미하다가 작동되게만 해도 상관없음</p>\n<p>서버를 껐다 켜도 데이터를 보존하기 위해서 파일을 씀</p>\n<p>routing 주소를 분기시켜주는 개념</p>\n<p>request.handler에서는 분기시키는 내용을 넣으면 됨</p>\n<p>(지난 레퍼런스 코드 참조하면 될듯)</p>\n<h2 id=\"nodejs-콜백의-기본패턴\"><a href=\"#nodejs-%EC%BD%9C%EB%B0%B1%EC%9D%98-%EA%B8%B0%EB%B3%B8%ED%8C%A8%ED%84%B4\" aria-label=\"nodejs 콜백의 기본패턴 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>NODE.js 콜백의 기본패턴</h2>\n<p>콜백의 개념을 이해하기가 말처럼 쉽지 않았다. 아래 링크들이 콜백을 이해하는데 큰 도움을 주었다.</p>\n<p><a href=\"http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/\">에러 우선 콜백을 이해하기</a></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">fs<span class=\"token punctuation\">.</span><span class=\"token function\">readFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/foo.txt'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// If an error occurred, handle it (throw, propagate, etc)</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Unknown Error'</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token comment\">// Otherwise, log the file contents</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<table>\n<thead>\n<tr>\n<th>unction strictAddition(x, y, callback) {</th>\n<th></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td></td>\n<td>if(typeof x !== ‘number’) {</td>\n</tr>\n<tr>\n<td></td>\n<td>callback( new Error(‘First argument is not a number’) );</td>\n</tr>\n<tr>\n<td></td>\n<td>return;</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td>if(typeof y !== ‘number’) {</td>\n</tr>\n<tr>\n<td></td>\n<td>callback( new Error(‘Second argument is not a number’) );</td>\n</tr>\n<tr>\n<td></td>\n<td>return;</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td>var result = x + y;</td>\n</tr>\n<tr>\n<td></td>\n<td>setTimeout(function() {</td>\n</tr>\n<tr>\n<td></td>\n<td>callback(null, result);</td>\n</tr>\n<tr>\n<td></td>\n<td>}, 500);</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td>// The Callback</td>\n</tr>\n<tr>\n<td></td>\n<td>function callback(err, data) {</td>\n</tr>\n<tr>\n<td></td>\n<td>if(err) {</td>\n</tr>\n<tr>\n<td></td>\n<td>console.log(err);</td>\n</tr>\n<tr>\n<td></td>\n<td>return;</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td>console.log(data);</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td>// Examples</td>\n</tr>\n<tr>\n<td></td>\n<td>strictAddition(2, 10, callback); // 12</td>\n</tr>\n<tr>\n<td></td>\n<td>strictAddition(-2, 10, callback); // 8</td>\n</tr>\n<tr>\n<td></td>\n<td>strictAddition(‘uh oh’, 10, callback); // Error = “First argument is not a number”</td>\n</tr>\n<tr>\n<td></td>\n<td>strictAddition(2, ‘10’, callback); // // Error = “Second argument is not a number”</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td>// Async Example - all calls made in parallel</td>\n</tr>\n<tr>\n<td></td>\n<td>async.parallel({</td>\n</tr>\n<tr>\n<td></td>\n<td>twelve: function(callback){ strictAddition(2, 10, callback); },</td>\n</tr>\n<tr>\n<td></td>\n<td>fiftythree: function(callback){ strictAddition(42, 11, callback); },</td>\n</tr>\n<tr>\n<td></td>\n<td>six: function(callback){ strictAddition(23, -17, callback); },</td>\n</tr>\n<tr>\n<td></td>\n<td>},</td>\n</tr>\n<tr>\n<td></td>\n<td>function(err, results) {</td>\n</tr>\n<tr>\n<td></td>\n<td>if(err) {</td>\n</tr>\n<tr>\n<td></td>\n<td>console.log(err);</td>\n</tr>\n<tr>\n<td></td>\n<td>return;</td>\n</tr>\n<tr>\n<td></td>\n<td>}</td>\n</tr>\n<tr>\n<td></td>\n<td>console.log(results); // {twelve: 12, fiftythree: 53, six: 6}</td>\n</tr>\n<tr>\n<td></td>\n<td>});</td>\n</tr>\n</tbody>\n</table>\n<p>콜백과 프로미스보다 훨씬 쉬워보이는 async지만 웹 히스토리안에선 아직 다루지 않는다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token operator\">/</span> Example taken <span class=\"token keyword\">from</span> caolan<span class=\"token operator\">/</span><span class=\"token keyword\">async</span> <span class=\"token constant\">README</span>\n<span class=\"token keyword\">async</span><span class=\"token punctuation\">.</span><span class=\"token function\">parallel</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    one<span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token function\">callback</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    two<span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token function\">callback</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">,</span> results<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// results is equal to: {one: 1, two: 2}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>","frontmatter":{"title":"Immersive Sprint - web historian","date":"October 13, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20181012-20181013 IM08D19-20 web historian/","previous":{"fields":{"slug":"/til/20181010-20181011 IM08D17-18 NODE JS/"},"frontmatter":{"title":"Immersive Sprint - NODE.js","category":"TIL"}},"next":{"fields":{"slug":"/til/20181015 IM08D21 database/"},"frontmatter":{"title":"Immersive Sprint - database","category":"TIL"}}}}