본문 바로가기

Programming

(465)
5. http 모듈로 서버 만들기 (4) - https와 http2 [1/2] 웹 사이트를 이용하다보면, https에 대해서 흔히 접하게 됩니다. 대충 '무언가 보안이 강화된' 장치인 것은 알겠는데, 정확히 무엇인지는 알 수 없었습니다. 이번 아티클에서 https에 대해서도 간단히 알아보겠습니다.  일단 https 모듈을 사용하게 되면, 웹 서버에 SSL 암호화를 추가하게 됩니다. 우리가 앞서 배운 GET이나 POST 메서드를 사용하면 클라이언트와 서버 간에 데이터가 오고가게 됩니다. 그런데 이 과정에서 누군가 요청을 가로채 정보를 탈취할 수도 있죠. SSL은 이 오고가는 데이터를 암호화 하게 됩니다. 그래서 중간에 유실되더라도 쉽게 내용을 확인할 수 없게 만드는 역할을 합니다. https를 사용하는 사이트에 접속하게 되면, 주소창 왼쪽에 주로 자물쇠 표시 등이 출력되는 것을 확인..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [7] 앞서 작성했던 코드로 서버를 실행하고, 사용자 이름을 넣어 쿠키를 동작해 보도록 하겠습니다. cookie2.js를 실행하고, URL 입력창에 http://localhost:8084를 입력해 봅시다. 그러면 아래와 같은 화면을 만날 수 있습니다.    이제 여기에 적당한 값을 넣고 [LOGIN] 버튼을 클릭하면, 로그인 처리를 하고 화면에 환영 인사를 출력합니다. 그런데 개발자 도구의 Application 탭에서 쿠키를 확인해 보겠습니다. 사실상 쿠키가 그대로 노출되고 있는 상태입니다. 보안상, 민감한 정보는 쿠키에 넣지 않는 것이 원칙이고 보관하는 방법도 달라야 합니다.    그럼 다음 예제에서 우리가 작성했던 코드를 수정해서 서버가 사용자의 정보를 관리하도록 만들어보겠습니다. 여기서 사용하는 방식이 바..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [6] 앞선 아티클에서는 최초로 로그인을 한 다음, res를 보내면서 Set-Cookie로 쿠키 정보를 보낸다고 했습니다. 여기서는 만료 시간(Expire)이나 HttpOnly등과 같은 옵션이 부여되었습니다. 쿠키를 설정할 때는 이러한 다양한 종류의 옵션을 부여해 설정이 가능합니다. 복수의 옵션을 부여할 때는 세미콜론으로 구분하게 됩니다.  여기에 제한 사항은, 한글과 줄바꿈은 입력할 수 없다는 점 입니다. 앞서 설명했듯이, 한글의 경우 encodeURIComponent로 감싸서 넣게 됩니다.   [cookie2.js]//생략http.createServer(async (req, res) => { const cookies = parseCookies(req.headers.cookie); // 주소가 /l..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [5] 앞선 아티클에서 계속 이어서 코드를 살펴보겠습니다. [cookie2.html] LOGIN    [cookie2.js]const http = require('http');const fs = require('fs').promises;const path = require('path');// *1번 시작const parseCookies = (cookie = '') => cookie .split(';') .map(v => v.split('=')) .reduce((acc, [k, v]) => { acc[k.trim()] = decodeURIComponent(v); return acc; ..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [4] 앞선 아티클에서 쿠키를 통한 유저 식별 사례 예제 코드를 작성했습니다. 이어서 계속 설명해 보겠습니다.  [cookie2.html] LOGIN    [cookie2.js]const http = require('http');const fs = require('fs').promises;const path = require('path');// *1번 시작const parseCookies = (cookie = '') => cookie .split(';') .map(v => v.split('=')) .reduce((acc, [k, v]) => { acc[k.trim()] = decodeURIComponent(v..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [3] 앞선 아티클을 통해서 우리는 쿠키의 기본적인 원리를 확인했습니다. 이번 아티클에서는 아주 간단한 예제를 통해서, "쿠키를 통해 사용자를 식별하는" 예제를 살펴보겠습니다. 실제 과정은 아니지만, 아주 간단한 로그인 기능을 구현해 보고 사용자를 식별하는 과정을 살펴보겠습니다.  아래와 같이 두 개의 파일을 생성해 보겠습니다.  [cookie2.html] LOGIN    [cookie2.js]const http = require('http');const fs = require('fs').promises;const path = require('path');// *1번 시작const parseCookies = (cookie = '') => cookie ...
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [2] 앞선 아티클에서 쿠키가 오고가는 과정을 간략하게 설명했습니다. 서버가 브라우저에게 전달하는 쿠키는 res의 헤더(Set-Cookie)에 담겨 브라우저에 전달되고, 브라우저가 저장하게 됩니다. 그리고 브라우저가 서버에게 req를 보낼 때 req의 헤더(Cookie)에 담겨 전달하게 됩니다.   5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [1]너무나도 당연한 이야기이지만, 다소 어려울 수 있는 이야기를 해보겠습니다. 우리가 어떤 사이트에 '로그인'을 했다고 가정해 보겠습니다. 그런데 그 사이트에서 새로고침을 실행합니다. 자,nozeroslope.tistory.com  이제 아래 예제에서, 직접 쿠키를 생성해 요청한 대상의 브라우저에 해당 정보를 보내보겠습니다. 다시 한번 설명하지만, 쿠..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [1] 너무나도 당연한 이야기이지만, 다소 어려울 수 있는 이야기를 해보겠습니다. 우리가 어떤 사이트에 '로그인'을 했다고 가정해 보겠습니다. 그런데 그 사이트에서 새로고침을 실행합니다. 자, 그럼 여기서 로그인은 어떻게 될까요? 당연히 로그인이 되어있는 상태로 유지가 되어 있습니다. 이는 너무나도 당연한 이야기라고 생각하실 것입니다.  하지만, 이 상황은 전혀 '당연한' 것이 아니라고 보셔야 합니다. 새로고침을 했다는 것은 곧 '새로운 req'를 보냈다는 의미가 되는 것이기 때문이죠. 새로운 req가 갔다는 것은, 서버에서 res가 갔다는 것을 의미합니다. 하지만 사용자가 로그인 된 상태를 유지하고 있다는 의미가 되는 것이죠. 이는 곧 클라이언트가 서버에 '사용자가 누구인지를 계속 알려주고 있기 때문에' 가능..