<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>glowing0512_.log</title>
        <link>https://velog.io/</link>
        <description>Coder가 아닌 Engineer를 향해서.</description>
        <lastBuildDate>Mon, 02 Aug 2021 02:50:20 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>glowing0512_.log</title>
            <url>https://images.velog.io/images/glowing0512_/profile/57de7841-e7aa-4065-9ce4-665c1becc8bb/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. glowing0512_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/glowing0512_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[예제 구동]]></title>
            <link>https://velog.io/@glowing0512_/%EC%98%88%EC%A0%9C-%EA%B5%AC%EB%8F%99</link>
            <guid>https://velog.io/@glowing0512_/%EC%98%88%EC%A0%9C-%EA%B5%AC%EB%8F%99</guid>
            <pubDate>Mon, 02 Aug 2021 02:50:20 GMT</pubDate>
            <description><![CDATA[<ul>
<li>전문가들이 구현해 놓은 코드를 사용하고,  자주 업데이트를 하자~!!</li>
<li>라이브러리- express  사용</li>
<li><a href="http://expressjs.com/en/resources/middleware/session.html">http://expressjs.com/en/resources/middleware/session.html</a></li>
<li><img src="https://images.velog.io/images/glowing0512_/post/a5a809be-2db8-47ef-80b1-21bcce92bebf/image.png" alt=""></li>
<li>위의 내용이 오래 될 수 있으니.. Googling : express-session </li>
<li></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Session & Auth]]></title>
            <link>https://velog.io/@glowing0512_/Session-Auth</link>
            <guid>https://velog.io/@glowing0512_/Session-Auth</guid>
            <pubDate>Sat, 31 Jul 2021 06:22:21 GMT</pubDate>
            <description><![CDATA[<ul>
<li>쿠키로써 인증과 개인화를 구현 할 수 있다.
그러나, 쿠키로 인해 정보가 유출/조작 될 수 있어 매우 위험하다.</li>
<li>Session : 각각의 사용자들을 식별하기위한 식별자로서만 기능. 실제 정보는 Session directory 에 담기라고 구현한다. 쿠키로 사용자를 식별하고, 실제 데이터는 서버에 저장한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인증 구현 - 접근 제어 ]]></title>
            <link>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D-%EA%B5%AC%ED%98%84-%EC%A0%91%EA%B7%BC-%EC%A0%9C%EC%96%B4</link>
            <guid>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D-%EA%B5%AC%ED%98%84-%EC%A0%91%EA%B7%BC-%EC%A0%9C%EC%96%B4</guid>
            <pubDate>Sat, 31 Jul 2021 06:17:21 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>인증하지 않은 사람이 create 하려고 하면 제어한다. 
<img src="https://images.velog.io/images/glowing0512_/post/f3be8ba5-a839-4335-85bb-e88201bf404d/image.png" alt=""></p>
</li>
<li><p>return false로 줌으로써, createServer 콜백 함수를 종료시킨다.
<img src="https://images.velog.io/images/glowing0512_/post/92431ddd-dd7b-4321-87bf-6f139fc86f5e/image.png" alt=""></p>
</li>
<li><p>위의 코드를 인증이 필요한 모든 곳에다 붙여넣어 준다!</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인증구현 - 로그인 상태 체크 ]]></title>
            <link>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%83%81%ED%83%9C-%EC%B2%B4%ED%81%AC</link>
            <guid>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%83%81%ED%83%9C-%EC%B2%B4%ED%81%AC</guid>
            <pubDate>Fri, 30 Jul 2021 16:41:34 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="preview-_">Preview _</h1>
</blockquote>
<p>1) 로그인이 된 상태를 사용자에게 알림
2) 로그아웃 기능 제공</p>
<p><img src="https://images.velog.io/images/glowing0512_/post/4a5bb0d5-b3bd-4abe-826e-576dfcfbe0c6/image.png" alt=""></p>
<h2 id="1-mainjs-코드">1. main.js 코드</h2>
<p>1) 로그인 상태 함수 코드 추가</p>
<pre><code>function authIsOwner(request, response) {
  var isOwner = false;
  var cookies = {};
  // 쿠키값이 있는 경우만 실행.
  if (request.headers.cookie) {
    //request.headers.cookie 를 접근 가능.
    //but, 이것은 그냥 text 상태이기에, 사용하기 위해서는 가공해야 한다!!
    // 가공을 위해, cookie 모듈을 사용한다.
    // cookie.parse로 parsing 한다!! (분석 &amp; 가공)
    cookies = cookie.parse(request.headers.cookie);
  }
  if (cookies.email === &quot;lydo7413&quot; &amp;&amp; cookies.password === &quot;111111&quot;) {
    isOwner = true;
  }
  // console.log(isOwner);
  return isOwner;
}</code></pre><p>2) 만든 함수 불러오기_ 위치 ; 메인 페이지 불러올 때 넣어줌.</p>
<pre><code>  var isOwner = authIsOwner(request, response);
  console.log(isOwner);</code></pre><h2 id="2-로그인-상태를-ui에-반영">2. 로그인 상태를 UI에 반영</h2>
<h3 id="1-templatejs-코드-변경">1) template.js 코드 변경</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[인증구현_ 로그인 cookie 생성]]></title>
            <link>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-%EB%A1%9C%EA%B7%B8%EC%9D%B8-cookie-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-%EB%A1%9C%EA%B7%B8%EC%9D%B8-cookie-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Fri, 30 Jul 2021 15:03:36 GMT</pubDate>
            <description><![CDATA[<h2 id="1-로그인-쿠키-생성_-코드">1. 로그인 쿠키 생성_ 코드</h2>
<pre><code>else if (pathname === &quot;/login_process&quot;) {
    var body = &quot;&quot;;
    request.on(&quot;data&quot;, function (data) {
      body = body + data;
    });
    request.on(&quot;end&quot;, function () {
      var post = qs.parse(body); // post 안에 담긴 사용자의 email &amp; password
      if (post.email === &quot;lydo7413@naver.com&quot; &amp;&amp; post.password === &quot;111111&quot;) {
        // 쿠키생성
        response.writeHead(302, {
          &quot;Set-Cookie&quot;: [
            `email : ${post.email} `,
            `password = ${post.password} `,
            `nickname = YJ`,
          ],
          Location: `/`,
        });
        response.end();
      } else {
        response.end(&quot;WHO?&quot;);
      }
    });
  }
</code></pre><h2 id="2-결과">2. 결과</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/a9b50f82-e8b0-4db4-8990-dd08ab587586/image.png" alt=""></p>
<ul>
<li>쿠키에 password까지 보이므로, 쿠키로 인증 구현을 하면 안되는 이유다!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[인증구현 _ UI 만들기 ]]></title>
            <link>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-UI-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@glowing0512_/%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-UI-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Fri, 30 Jul 2021 14:15:50 GMT</pubDate>
            <description><![CDATA[<h2 id="1-login-ui-코드-추가">1. login UI 코드 추가.</h2>
<p>&lt; main.js &gt;</p>
<pre><code>else if (pathname === &quot;/login&quot;) {
    fs.readdir(&quot;./data&quot;, function (error, filelist) {
      var title = &quot;Login&quot;;
      var list = template.list(filelist);
      var html = template.HTML(
        title,
        list,
        `
        &lt;form action=&quot;login_process&quot; method=&quot;post&quot;&gt;
          &lt;p&gt;&lt;input type=&quot;text&quot; name=&quot;email&quot; placeholder=&quot;email&quot;&gt;&lt;/p&gt;
          &lt;p&gt;&lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;password&quot;&gt;&lt;/p&gt;
          &lt;p&gt;&lt;input type=&quot;submit&quot; &gt;&lt;/p&gt;
        &lt;/form&gt;  
        `,
        `&lt;a href=&quot;/create&quot;&gt;create&lt;/a&gt;`
      );
      response.writeHead(200);
      response.end(html);
    });
  } </code></pre><h2 id="2-결과">2. 결과</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/7282f5ec-a0d9-4b21-8f7a-176410ac33fe/image.png" alt=""></p>
<h2 id="3-앞으로">3. 앞으로...</h2>
<ul>
<li>login하면, login_process가 정보를 받음.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ cookie를 이용한 인증구현 _ (Preview)]]></title>
            <link>https://velog.io/@glowing0512_/cookie%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-Preview</link>
            <guid>https://velog.io/@glowing0512_/cookie%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D%EA%B5%AC%ED%98%84-Preview</guid>
            <pubDate>Fri, 30 Jul 2021 14:04:33 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>쿠키를 이용한 로그인을 구현할 것이다. 그러나, 심각한 보안 문제가 있으므로 현실로 쿠키로 구현하여 사용하면 안 된다!</p>
</blockquote>
<blockquote>
<h2 id="preview_-auth-by-cookie">Preview_ Auth by Cookie.</h2>
</blockquote>
<p><img src="https://images.velog.io/images/glowing0512_/post/827933fe-3142-447c-8658-a1415ced3c36/image.png" alt=""></p>
<ul>
<li>현재 화면은 로그인한 화면</li>
<li>쿠키에 password로 평문으로 되어있다. </li>
<li>그래서 매우 위험하다.</li>
<li>+) logout 상태에서는 creat 버튼을 눌러도 작동하지 않는다. 왜냐? 인증이 안 되어 있으니까. </li>
<li>인증이 된 상태에서 생성 화면으로 가는 Application을  만든다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[path & domain]]></title>
            <link>https://velog.io/@glowing0512_/path-domain</link>
            <guid>https://velog.io/@glowing0512_/path-domain</guid>
            <pubDate>Fri, 30 Jul 2021 12:15:09 GMT</pubDate>
            <description><![CDATA[<h1 id="path">Path</h1>
<p><a href="http://localhost:3030/cookie">http://localhost:3030/cookie</a> 처럼,
cookie directory 안의 page에 만들어 보겠다!
현재는..
<img src="https://images.velog.io/images/glowing0512_/post/a2b9a318-e580-4d78-b0b8-6a50cb494b2b/image.png" alt=""></p>
<ul>
<li>최상위 루트에 존재한다. </li>
</ul>
<h2 id="1-cookie-생성-코드를-비활성화-해보자">1. cookie 생성 코드를 비활성화 해보자.</h2>
<pre><code>    // response.writeHead(200, {
    //   &quot;Set-Cookie&quot;: [
    //     &quot;yummy_cookie=choco&quot;,
    //     &quot;tasty_cookie=strawberry&quot;,
    //     `Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}`,
    //     &quot;Secure=Secure; Secure&quot;, // 해설&gt;&gt; 일반적인) 쿠키의 이름=값; [진짜 중요한 부분!!]
    //     &quot;HttpOnly=HttpOnly; HttpOnly&quot;,
    //   ],
    // });</code></pre><h2 id="2-결과">2. 결과</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/4f2c45a3-91e3-4bf5-8d73-9e274f952544/image.png" alt=""></p>
<ul>
<li>그럼에도 쿠키는 아직 살아있다. </li>
</ul>
<h2 id="3-what-do-i-want">3. What do i want?</h2>
<h3 id="-특정-directory-에서만-쿠키가-활성화-되도록-하고-싶다">: 특정 directory 에서만 쿠키가 활성화 되도록 하고 싶다.</h3>
<h3 id="sol-path-기능">sol&gt; path 기능</h3>
<h2 id="4-코드-추가">4. 코드 추가.</h2>
<pre><code>        &quot;Path=Path; Path=/cookie&quot;,
</code></pre><h2 id="5-결과">5. 결과</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/b30210a3-cfe7-43b9-ba47-c3914224ae01/image.png" alt=""></p>
<h2 id="6-again_--cookie-생성-코드를-비활성화-해보자">6. Again_  cookie 생성 코드를 비활성화 해보자.</h2>
<h2 id="7-localhost3030에-재접속-한다">7. localhost:3030에 재접속 한다.</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/7e6f5106-dca8-4aae-805f-57c74712d695/image.png" alt=""></p>
<ul>
<li>최상위 루트에서는 path 쿠키가 없다. 
<img src="https://images.velog.io/images/glowing0512_/post/fbf757c5-8de8-4634-934f-d24aa363af8e/image.png" alt=""></li>
<li>/cookie의 하위로 접속해도 path 쿠키는 살아있고,
<img src="https://images.velog.io/images/glowing0512_/post/e7d4edda-bcc1-4f89-b4c6-9f71c3dc8027/image.png" alt=""></li>
<li>그냥 /cookie로 접속해도 path 쿠키가 살아있따. <h2 id="con_">Con_</h2>
&lt; 코드 &gt;<pre><code>var http = require(&quot;http&quot;);
var cookie = require(&quot;cookie&quot;);
http
.createServer(function (request, response) {
  console.log(request.headers.cookie);
  var cookies = {};
  if (request.headers.cookie !== undefined) {
    cookies = cookie.parse(request.headers.cookie);
  }
  console.log(cookies.yummy_cookie);
  response.writeHead(200, {
    &quot;Set-Cookie&quot;: [
      &quot;yummy_cookie=choco&quot;,
      &quot;tasty_cookie=strawberry&quot;,
      `Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}`,
      &quot;Secure=Secure; Secure&quot;, // 해설&gt;&gt; 일반적인) 쿠키의 이름=값; [진짜 중요한 부분!!]
      &quot;HttpOnly=HttpOnly; HttpOnly&quot;,
      &quot;Path=Path; Path=/cookie&quot;,
    ],
  });
  response.end(&quot;Cookie!!&quot;);
})
.listen(3030);
</code></pre></li>
</ul>
<pre><code>- path의 어떤 directory 를 지정하면, 원하는 path 경로와 그 경로 아래에서만 path가 활성화 되서, 웹 브라우저는 _거기에 해당되는 쿠키만_을 서버에게 전송한다!

# Domain
* cf_ 아래의 domian접속은 안 되서, 영상을 캡쳐하여 설명함. 

## 1. 코드 추가</code></pre><pre><code>    &quot;Domain=Domain; Domain=o2.org&quot;,</code></pre><pre><code>## 2. o2.org:3000에 접속.
![](https://images.velog.io/images/glowing0512_/post/85052f90-3f41-473a-bd57-73876fd3fccc/image.png)
- 이 전에 쿠키들을 모두 지운 후에, 도메인에 접속한다. 

## 3. cookie 생성 코드를 비활성화 해보자</code></pre><pre><code>// response.writeHead(200, {
//   &quot;Set-Cookie&quot;: [
//     &quot;yummy_cookie=choco&quot;,
//     &quot;tasty_cookie=strawberry&quot;,
//     `Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}`,
//     &quot;Secure=Secure; Secure&quot;, // 해설&gt;&gt; 일반적인) 쿠키의 이름=값; [진짜 중요한 부분!!]
//     &quot;HttpOnly=HttpOnly; HttpOnly&quot;,
//     &quot;Path=Path; Path=/cookie&quot;,
//     &quot;Domain=Domain; Domain=o2.org&quot;,
//   ],
// });</code></pre><pre><code>
## 4. test/o2.org 에 접속한다. 
- 앞의 test : 서브 도메인

## 5. 결과
![](https://images.velog.io/images/glowing0512_/post/d4a67147-3b9d-43b2-8599-0fe8175931c2/image.png)
- &quot;Domain=Domain; Domain=o2.org&quot;는...
이 앞의 어떤 서브 도메인에서도 살아남는다!
o2.org 에서만 살아남는다가 아니고!!


&gt; **Conclusion**
path: 어느 path에서 동작 할 것인가를 제한.
domain : 어떤 domain에서 동작 할 것인가를 제한. 
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Secure & HttpOnly]]></title>
            <link>https://velog.io/@glowing0512_/Secure-HttpOnly</link>
            <guid>https://velog.io/@glowing0512_/Secure-HttpOnly</guid>
            <pubDate>Fri, 30 Jul 2021 11:43:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="what-is-secure--httponly">WHAT IS... Secure &amp; HttpOnly</h2>
<p><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies">https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies</a>
<img src="https://images.velog.io/images/glowing0512_/post/42681dad-3aa1-4892-9f5e-186f26bd5ebc/image.png" alt=""></p>
</blockquote>
<h2 id="1---------securesecure-secure--해설-일반적인-쿠키의-이름값-진짜-중요한-부분">1.         &quot;Secure=Secure; Secure&quot;, // 해설&gt;&gt; 일반적인) 쿠키의 이름=값; [진짜 중요한 부분!!]</h2>
<ul>
<li>코드 추가<pre><code>      &quot;Secure=Secure; Secure&quot;,
</code></pre></li>
</ul>
<pre><code>
![](https://images.velog.io/images/glowing0512_/post/3a3c96c0-3f9c-4491-b4db-1cbaeb24120a/image.png)
- 현재 통신을 할 떄, http를 쓰기 때문
- MDN 사이트 로그인 되어 있는 상태일 때, ![](https://images.velog.io/images/glowing0512_/post/78c66d52-0622-4e23-8331-a67177a1e5a6/image.png)
session ID 값을 납치하면 해킹을 할 수 있다. 
그러므로, https가 아닌, http로 접근을 하면 sessionID를 쉽게 가져갈 수 있으므로, 보안 처리 한다. 



## 2.          &quot;HttpOnly=HttpOnly; HttpOnly&quot;,


- 코드 추가</code></pre><pre><code>    &quot;HttpOnly=HttpOnly; HttpOnly&quot;,</code></pre><pre><code>- 이렇게 추가하면, console창에 자바스크립트 언어로 웹브라우저를 제어한다. 쿠키가 화면처럼 생겼고, 콘솔에 cookie를 치면 화면처럼, HttpOnly를 보면,  flag값이 지정되어 있고, 이렇게 flag가 지정되어 있으면 자바스크립트 눈에는 보이지 않는다.
- 이 역시도 자바스크립트를 이용하여 쿠키를 훔쳐 session과 같이 중요한 data를 해킹 하는 것을 막는 것. 
![](https://images.velog.io/images/glowing0512_/post/b6cdc00a-03b1-4b89-b43f-85164b2ed5f7/image.png)


## 3.전체 코드</code></pre><p>var http = require(&quot;http&quot;);
var cookie = require(&quot;cookie&quot;);
http
  .createServer(function (request, response) {
    console.log(request.headers.cookie);
    var cookies = {};
    if (request.headers.cookie !== undefined) {
      cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
      &quot;Set-Cookie&quot;: [
        &quot;yummy_cookie=choco&quot;,
        &quot;tasty_cookie=strawberry&quot;,
        <code>Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}</code>,
        &quot;Secure=Secure; Secure&quot;, // 해설&gt;&gt; 일반적인) 쿠키의 이름=값; [진짜 중요한 부분!!]
        &quot;HttpOnly=HttpOnly; HttpOnly&quot;,
      ],
    });
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Session vs Permanent]]></title>
            <link>https://velog.io/@glowing0512_/Session-vs-Permanent</link>
            <guid>https://velog.io/@glowing0512_/Session-vs-Permanent</guid>
            <pubDate>Fri, 30 Jul 2021 11:25:11 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="쿠키가-언제까지-살아있게-할-것인가">쿠키가 언제까지 살아있게 할 것인가!?</h2>
<p><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies">https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies</a></p>
</blockquote>
<h2 id="1-session-쿠키-vs-permanent-쿠키">1. Session 쿠키 vs Permanent 쿠키</h2>
<ul>
<li>둘의 차이점은 permanent 쿠키는 는 웹 브라우저를 껐다 켜도 살아있다. (세션 쿠키는 반대로 죽어있따. ) 
<img src="https://images.velog.io/images/glowing0512_/post/0f5305ce-e0a7-4c42-8699-e0e301983fc0/image.png" alt=""></li>
<li>기존 set cookie(= Session cookie) 에 <em><strong>Expires</strong></em> or _<strong>Max-Age</strong>_를 추가하면 Permanent cookie가 된다. </li>
<li>Max-Age: 현재 시점으로 얼마동안 살아 있을 것인가. (상대적 시간)</li>
<li>Expires : 언제에 만료 될 것인가. ( 절대적 시간) </li>
</ul>
<h2 id="2-코드">2. 코드</h2>
<pre><code>var http = require(&quot;http&quot;);
var cookie = require(&quot;cookie&quot;);
http
  .createServer(function (request, response) {
    console.log(request.headers.cookie);
    var cookies = {};
    if (request.headers.cookie !== undefined) {
      cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
     response.writeHead(200, {
       &quot;Set-Cookie&quot;: [
         &quot;yummy_cookie=choco&quot;,
         &quot;tasty_cookie=strawberry&quot;,
         `Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}`,
    //   ],
    // });
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);
</code></pre><h2 id="3-결과">3. 결과</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/3084fccc-a830-44cf-9475-6fd52479ce26/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쿠키의 활용]]></title>
            <link>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Fri, 30 Jul 2021 11:06:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="create--read-한-cookie를-어디다-쓸-것인가">Create &amp; Read 한 Cookie를 어디다 쓸 것인가?</h2>
<p><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies">https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies</a></p>
</blockquote>
<h3 id="쿠키의-활용과-보안에-대한-자료">쿠키의 활용과 보안에 대한 자료.</h3>
<p><a href="https://www.youtube.com/watch?v=HHBOUG3cpQ4&amp;list=PLuHgQVnccGMDo8561VLWTZox8Zs3K7K_m&amp;index=5">https://www.youtube.com/watch?v=HHBOUG3cpQ4&amp;list=PLuHgQVnccGMDo8561VLWTZox8Zs3K7K_m&amp;index=5</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쿠키의 읽기]]></title>
            <link>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%9D%BD%EA%B8%B0</link>
            <guid>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%9D%BD%EA%B8%B0</guid>
            <pubDate>Fri, 30 Jul 2021 10:58:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="이번-시간은">이번 시간은..</h2>
<p>쿠키의 생성에 이어 생성한 쿠키를 다시 웹 브라우저가 서버쪽으로 전송 했을 때, 그 것을 WEB Application 안에서 어떻게 알아 낼 수 있는가. </p>
</blockquote>
<blockquote>
<h3 id="google--how-to-get-cookie-in-nodejs">Google : how to get cookie in nodejs</h3>
</blockquote>
<p><img src="https://images.velog.io/images/glowing0512_/post/4cf57a06-afe1-4730-83a2-127d4425e012/image.png" alt=""></p>
<ul>
<li>추론해보자. 
createServer 안에서 To read a cookie , request 요청 정보를 가진 객체를 parseCookie 함수로 보내고, 이 함수는 request의 헤더의 쿠키로 접근한다.!</li>
</ul>
<h2 id="1-쿠키를-재생산">1. 쿠키를 재생산.</h2>
<h2 id="2-npm-에서-cookie-핸들링을-찾아보자">2. npm 에서 cookie 핸들링을 찾아보자.</h2>
<blockquote>
<h3 id="google--npm-cookie">Google : npm cookie</h3>
<p><a href="https://www.npmjs.com/package/cookie">https://www.npmjs.com/package/cookie</a></p>
</blockquote>
<p><img src="https://images.velog.io/images/glowing0512_/post/5ba1fc8b-e897-452f-96b1-6e625ce1f8f4/image.png" alt=""></p>
<h2 id="3-코드-작성">3. 코드 작성</h2>
<pre><code>var http = require(&quot;http&quot;);
var cookie = require(&quot;cookie&quot;);

http
  .createServer(function (request, response) {
    console.log(request.headers.cookie);
    var cookies = {};
    if (request.headers.cookie !== undefined) {
      cookies = cookie.parse(&quot;request.headers.cookie&quot;);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
      &quot;Set-Cookie&quot;: [&quot;yummy_cookie = choco&quot;, &quot;tasty_cookie = strawberry&quot;],
    });
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[쿠키의 생성]]></title>
            <link>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@glowing0512_/%EC%BF%A0%ED%82%A4%EC%9D%98-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Fri, 30 Jul 2021 02:57:15 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="모든-정보-system의-핵심--crud">모든 정보 system의 핵심 : CRUD</h2>
<h3 id="이-중-create를-살펴본다">이 중, Create를 살펴본다.</h3>
</blockquote>
<p><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies">https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies</a></p>
<h2 id="1cookiejs">1.cookie.js</h2>
<pre><code>var http = require(&quot;http&quot;);
http
  .createServer(function (request, response) {
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);
</code></pre><ul>
<li><p>쿠키 값은 없다. 
<img src="https://images.velog.io/images/glowing0512_/post/3aba076a-d06e-407b-bbbe-08523a54c525/image.png" alt=""></p>
</li>
<li><p>응답하는 메시지를 조작하여, cookie를 보내본다. </p>
</li>
</ul>
<h2 id="2-쿠키-생성">2. 쿠키 생성</h2>
<pre><code>var http = require(&quot;http&quot;);
http
  .createServer(function (request, response) {
    // 2개의 쿠키값을 전송한다.
    response.writeHead(200, {
         // 응답하는 메시지를 전송.
         // 200;  성공했다.
         // 2번째 인자로는 객체가 들어오기로 약속됨. 이 안에 key value의 형식으로 넣어줌.
      &quot;Set-Cookie&quot;: [&quot;yummy_cookie = choco&quot;, &quot;tasty_cookie = strawberry&quot;],
    });
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);
</code></pre><h2 id="결과">결과.</h2>
<h3 id="1-response--쿠키가-존재-한다">1) Response : 쿠키가 존재 한다.</h3>
<p><img src="https://images.velog.io/images/glowing0512_/post/d8d93f1f-5889-4b10-beda-3382830c36b9/image.png" alt=""></p>
<h3 id="2-request--쿠키가-없다">2) Request : 쿠키가 없다.</h3>
<p><img src="https://images.velog.io/images/glowing0512_/post/3463fbc2-a17c-4daf-87f0-8811b8243ca3/image.png" alt=""></p>
<h2 id="reload">Reload</h2>
<h3 id="1-쿠키-생성-코드-주석처리함">1) 쿠키 생성 코드 주석처리함.</h3>
<pre><code>var http = require(&quot;http&quot;);
http
  .createServer(function (request, response) {
    // response.writeHead(200, {
    //   &quot;Set-Cookie&quot;: [&quot;yummy_cookie = choco&quot;, &quot;tasty_cookie = strawberry&quot;],
    // });
    response.end(&quot;Cookie!!&quot;);
  })
  .listen(3030);
</code></pre><ul>
<li>더 이상 서버가 웹 브라우저에게 &#39;Set Cookie&#39;를 보내지 않게 처리함!<h3 id="2-reload">2) Reload</h3>
<h2 id="결과_">결과_</h2>
<img src="https://images.velog.io/images/glowing0512_/post/c2b2ccd9-4f5b-42cd-a8fc-48a2c80a66e1/image.png" alt=""></li>
<li>웹 브라우저가 요청이 들어가는데, 이 안에 쿠키 값이 심어져 있다!!</li>
<li>Response에는 쿠키가 없다. : 주석처리를 했으므로..</li>
<li>이제부터는 웹 브라우저는 reload를 할 때 마다 Set Cookie로 인해서 저장된 쿠키 값을 쿠키라는 헤더값을 통해서 서버로 전송한다. </li>
<li>어떤 쿠키가 생성 된지는 쿠키 탭에서 확인 가능하다. 
<img src="https://images.velog.io/images/glowing0512_/post/e315a0e4-47c2-417f-89ac-fda4851da7ec/image.png" alt=""></li>
<li>Applicaion 탭의 Cookies를 가면, 어떤 ip 주소에 어떤 쿠키가 심어져 있는지 알 수 있다. 위의 금지 마크는 쿠키를 모두 지우는 것이다.
<img src="https://images.velog.io/images/glowing0512_/post/06bfbe00-2b8f-48b8-8424-b33114be7561/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Node.js_ Session & Cookie ]]></title>
            <link>https://velog.io/@glowing0512_/Node.js-Session-Cookie</link>
            <guid>https://velog.io/@glowing0512_/Node.js-Session-Cookie</guid>
            <pubDate>Thu, 29 Jul 2021 11:25:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/glowing0512_/post/d1d808a7-cc00-4928-8a4e-77f47d2d25ed/image.png" alt=""></p>
<blockquote>
<p>웹이 등장한 이후에 수 많은 불만족들이 생겨남.
그 불만족 중에 개인화가 존재.
개인화란 사람마다 그 사람의 선택과 취향에 따라 페이지를 보여주는 것.
ex_ 한 번 로그인을 하면, 그 다음에 인증이 필요 없이 자동으로 로그인이 되어 있는 것.
쿠키가 도입되면서 웹 브라우저는 웹 서버로 전송 할 수 있게 되었고, 웹 서버는 이 정보를 통해서 현재 접속한 사람을 알 수 있게 되었다.</p>
</blockquote>
<p>우리는.</p>
<blockquote>
<h3 id="쿠키란--쿠키를-통한-인증-구현">쿠키란? &amp; 쿠키를 통한 인증 구현.</h3>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[할 일 메모 API 구현_01]]></title>
            <link>https://velog.io/@glowing0512_/%ED%95%A0%EC%9D%BC%EB%A9%94%EB%AA%A8-API-%EA%B5%AC%ED%98%8401</link>
            <guid>https://velog.io/@glowing0512_/%ED%95%A0%EC%9D%BC%EB%A9%94%EB%AA%A8-API-%EA%B5%AC%ED%98%8401</guid>
            <pubDate>Thu, 29 Jul 2021 11:07:04 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="api를-작성-전에--db-설계부터-한다">API를 작성 전에  DB 설계부터 한다!</h3>
</blockquote>
<h2 id="01-할-일-메모-사이트---api-구현하기1">01. [할 일 메모 사이트] - API 구현하기(1)</h2>
<ul>
<li><p>15) mongoose - Todo 모델 작성하기</p>
<p>  MongoDB에 연결 할 준비가 됐으니 이제 <code>Todo</code> 모델을 작성하고 기능을 구현해봅니다.</p>
<ul>
<li><p>예시</p>
<pre><code class="language-jsx">  const mongoose = require(&quot;mongoose&quot;);

  const TodoSchema = new mongoose.Schema({
    value: String,
    doneAt: Date,
    order: Number
  });
  TodoSchema.virtual(&quot;todoId&quot;).get(function () {
    return this._id.toHexString();
  });
  TodoSchema.set(&quot;toJSON&quot;, {
    virtuals: true,
  });
  module.exports = mongoose.model(&quot;Todo&quot;, TodoSchema);</code></pre>
<p>  참고 - <a href="https://mongoosejs.com/docs/guide.html#virtuals">몽구스 &gt; 가이드 &gt; Virtual</a></p>
<p>mongoose에 대한 설명은 기초 수업에서 많이 다뤘으니 자세한 설명은 생략합니다!
기억이 잘 안나신다면 <a href="https://mongoosejs.com/docs/index.html">공식 가이드 문서</a>를 참고하시면 좋아요 😉</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>16) 할 일 추가 API 만들기</p>
<p>  모델을 작성했으니 이제 할 일 추가 API를 짜볼게요!
  간단히 입력받은 값을 저장하고 저장한 값을 응답값으로 주도록 하겠습니다 🙂</p>
<p>  단, order라는 숫자 값을 같이 저장할 건데요!
  이 값은 추가한 Todo 데이터들의 순서를 가지는 값이 될 예정입니다.
  order가 높을 수록 해당 Todo 데이터가 상단에 위치하도록 하는 것이죠!</p>
<p>  추가된 항목은 항상 맨 위에 추가될 수 있게 이미 저장된 order 값보다 1이 더해진 값으로 저장하도록 구현해보세요!</p>
<ul>
<li><p>할 일 추가 API</p>
<pre><code class="language-jsx">  const Todo = require(&quot;./models/todo&quot;);

  router.post(&quot;/todos&quot;, async (req, res) =&gt; {
    const { value } = req.body; // 1) 
    const maxOrderByUserId = await Todo.findOne().sort(&quot;-order&quot;).exec();

    const order = maxOrderByUserId ? maxOrderByUserId.order + 1 : 1;
    const todo = new Todo({ value, order });
    await todo.save();
    res.send({ todo });
  });</code></pre>
</li>
</ul>
<p>해설 ) </p>
<pre><code>router.post(&quot;/todos&quot;, async (req, res) =&gt; {})</code></pre></li>
</ul>
<p>안에. </p>
<pre><code>    const { value } = req.body;
</code></pre><p>는</p>
<p><img src="https://images.velog.io/images/glowing0512_/post/134dc9cb-6300-4946-b8aa-5f86b928c614/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/glowing0512_/post/7275ec74-4e79-4599-ba88-be6640cb4350/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/glowing0512_/post/46af9e8e-5bfe-4c98-89c9-592cb3d85112/image.png" alt=""></p>
<p>로,  { value } 값이 넘어온다. 
그래서, </p>
<pre><code>    const { value } = req.body;
</code></pre><p>라는 코드를 넣게 된다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[REST API & Validation]]></title>
            <link>https://velog.io/@glowing0512_/REST-API-Validation</link>
            <guid>https://velog.io/@glowing0512_/REST-API-Validation</guid>
            <pubDate>Thu, 29 Jul 2021 04:13:07 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>REST API란 무엇인가?</p>
<ul>
<li><a href="https://ko.wikipedia.org/wiki/REST">REST 아키텍쳐</a>를 따라 구현된 API를 REST API라고 부릅니다.</li>
<li>간단히 말하면 원래 있던 방법보다 더 쉽고 사람이 읽기 편한 방식으로 원칙을 세워놨고, 개발자들의 생산성과 상호작용을 증진시키는것에 목적이 있습니다.
(다른 방식에 비해 조금 더 아름답다고 이해해도 됩니다 😋)</li>
<li>참고할 글<ul>
<li><a href="https://greatkim91.tistory.com/13">https://greatkim91.tistory.com/13</a></li>
<li><a href="http://haah.kr/2017/06/28/rest-the-coclusion/">http://haah.kr/2017/06/28/rest-the-coclusion/</a></li>
</ul>
</li>
</ul>
</li>
<li><p>Validation이란 무엇인가?</p>
<ul>
<li><p>특별한게 아니지만 개발을 하면서 가장 중요한것중 하나입니다.
Validation은 말 그대로 어떤것을 검증한다고 보면 됩니다.</p>
</li>
<li><p>코드로 보는게 가장 쉽겠죠?</p>
<pre><code class="language-jsx">  function is1(value) {
      return value === 1;
  }</code></pre>
</li>
<li><p>위 코드는 단순히 값이 1인지 아닌지 판단해서 Boolean 타입의 값을 반환하는 함수입니다.
이렇게 단순한 함수조차 Validation. 즉, 검증을 위한 코드가 됩니다.</p>
</li>
<li><p>여러분은 날이 갈수록 당연히 더 복잡하고 어려운 검증 로직을 짜게 될텐데요, 우리는 심화 과정에서 이런 로직을 더 쉽고 간결하게 작성하도록 도와주는 라이브러리를 사용해볼 예정입니다 😎</p>
</li>
<li><p>cf_  joi 라이브러리 : <a href="https://joi.dev/api/?v=17.4.1">https://joi.dev/api/?v=17.4.1</a></p>
</li>
<li><p>validation을 잘 만들면, 견고한 api를 개발 할 수 있다. </p>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git 을 잘 사용해보자!!]]></title>
            <link>https://velog.io/@glowing0512_/Git-%EC%9D%84-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@glowing0512_/Git-%EC%9D%84-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Tue, 27 Jul 2021 12:39:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="pull-request">Pull Request</h2>
</blockquote>
<ul>
<li>언제 이를 수행하는지, 그 흐름을 아직도 모르겠다....</li>
<li>깃!!! 잘 사용하고 싶다!!</li>
</ul>
<p><img src="https://images.velog.io/images/glowing0512_/post/b9e0791c-58a6-4af9-b6bf-0b4a21ebf08d/image.png" alt=""></p>
<ul>
<li>이후에는 Reviewers 의 등록된 팀원들이 코드를 보고, Feedback을 주거나 approve를 진행 한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Nodemon 설치]]></title>
            <link>https://velog.io/@glowing0512_/Nodemon-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@glowing0512_/Nodemon-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Sun, 25 Jul 2021 14:44:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/glowing0512_/post/ea4cb1e8-0f86-459f-a436-4737468b5eee/image.png" alt=""></p>
<h2 id="nodemon-설치">NodeMon 설치</h2>
<pre><code>$ npm i nodemon --save-dev</code></pre><p>: -dev; 개발환경에서만 가능하도록 설치함 (이 것이 정확하게 설치는 하는 것이다)
<img src="https://images.velog.io/images/glowing0512_/post/a595a7ee-9d22-4a5a-b0eb-f5a85cf3f672/image.png" alt=""></p>
<h2 id="script에--nodemon-실행-추가">Script에  nodemon 실행 추가.</h2>
<h3 id="backend-카로-명령어-추가함">&quot;backend&quot; 카로 명령어 추가함</h3>
<p><img src="https://images.velog.io/images/glowing0512_/post/2601c797-d601-4bb9-992a-bd309f8c6786/image.png" alt=""></p>
<h3 id="nodemon-실행">nodemon 실행</h3>
<p><img src="https://images.velog.io/images/glowing0512_/post/d42226ed-77d2-4ff9-88f7-fe0830f7eb1f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git & SSH 를 이용한 GitHub]]></title>
            <link>https://velog.io/@glowing0512_/Git-SSH-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-GitHub</link>
            <guid>https://velog.io/@glowing0512_/Git-SSH-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-GitHub</guid>
            <pubDate>Sun, 25 Jul 2021 14:09:07 GMT</pubDate>
            <description><![CDATA[<h2 id="1-git-설치">1. Git 설치</h2>
<p><a href="https://www.youtube.com/watch?v=wMJ7hQ2FKfQ">https://www.youtube.com/watch?v=wMJ7hQ2FKfQ</a></p>
<p><img src="https://images.velog.io/images/glowing0512_/post/7cfb5b6c-e2d6-4ae0-8e79-ba3c6f1ec3ac/image.png" alt=""></p>
<h3 id="1-git이란">1) Git이란</h3>
<ul>
<li>분산 관리 시스템 : 여러 개발자의 협업 가능.</li>
</ul>
<h2 id="2-ssh-를-이용한-github">2. SSH 를 이용한 GitHub</h2>
<p><a href="https://www.youtube.com/watch?v=0yVqbHuZ3FA">https://www.youtube.com/watch?v=0yVqbHuZ3FA</a></p>
<p><img src="https://images.velog.io/images/glowing0512_/post/8f82cd57-1b24-4abe-996c-39df5c15bec2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MongoDB Model & Schema]]></title>
            <link>https://velog.io/@glowing0512_/MongoDB-Model-Schema</link>
            <guid>https://velog.io/@glowing0512_/MongoDB-Model-Schema</guid>
            <pubDate>Sun, 25 Jul 2021 12:50:41 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/glowing0512_/post/988a7255-5a20-444a-a1c2-c66d2caf19d1/image.png" alt="">
<img src="https://images.velog.io/images/glowing0512_/post/654dea74-9919-49bd-b042-0d951c29a649/image.png" alt=""></p>
<h2 id="1-db-directory--file-생성">1. DB directory &amp; file 생성</h2>
<p><img src="https://images.velog.io/images/glowing0512_/post/3f7324f4-6c89-42f2-b815-12268110ee28/image.png" alt=""></p>
<h2 id="2-usersjs-파일-코드">2. Users.js 파일 코드</h2>
<pre><code>const mongoose = require(&#39;mongoose&#39;)

const userSchema = mongoose.Schema({
  name: {
    type: String,
    maxlength: 50
  },
  email: {
    type: String,
    trim: true, // 스페이스를 없애주는 역할
    unique: 1
  },
  password: {
    type: String,
    maxlength: 50
  },
  role: {
    type: Number, // number : 1 ; 관리자 /0 ; 일반 유저 같이..
    default: 0
  },
  image: String,
  token: { // 유효성 관리
    type: String
  },
  tokenExp: { // 토큰의 유효기간
    type: Number
  }
})

const User = mongoose.model(&#39;User&#39;, userSchema)

module.exports = User // 다른 곳에서도 쓸 수 있도록 이 모듈을 export


</code></pre>]]></description>
        </item>
    </channel>
</rss>