전체 글 178

https, http2 와 cluster

https 웹 서버에 SSL 암호화를 추가하는 모듈 오고 가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없음 요즘에는 https 적용이 필수(개인 정보가 있는 곳은 특히) 정보들이 탈취되는 것을 막음 http 서버를 https 서버로 암호화를 위해 인증서가 필요한데 발급받아야 함 createServer가 인자를 두 개 받음 첫 번째 인자는 인증서와 관련된 옵션 객체 pem, crt, key 등 인증서를 구입할 때 얻을 수 있는 파일 넣기 두 번째 인자는 서버 로직 무료 SSL/TLS 인증서 : letsencrypt const https = require('https'); const fs = require('fs'); https.createServer({ cert: fs..

Node.js 2020.12.15

쿠키, 세션 이해하기

쿠키의 필요성 요청에는 한 가지 단점이 있음 누가 요청을 보냈는지 모름(IP 주소와 브라우저 정보 정도만 앎) 로그인을 구현하면 됨 쿠키와 세션이 필요 쿠키: 키=값의 쌍 name=kuwhawha 매 요청마다 서버에 동봉해서 보냄 서버는 쿠키를 읽어 누구인지 파악 매 요청마다 서버에 동봉해서 보냄 쿠키 넣는 것을 직접 구현 writeHead: 요청 헤더에 입력하는 메서드 Set-Cookie: 브라우저에게 쿠키를 설정하라고 명령 const http = require('http'); http.createServer((req, res) => { console.log(req.url, req.headers.cookie); res.writeHead(200, { 'Set-Cookie': 'mycookie=test' ..

Node.js 2020.12.14

REST API와 라우팅

REST API 서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현 /index.html이면 index.html을 보내달라는 뜻 항상 html을 요구할 필요는 없음 서버가 이해하기 쉬운 주소가 좋음 REST API(Representational State Transfer) 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법 /user이면 사용자 정보에 관한 정보를 요청하는 것 /post면 게시글에 관련된 자원을 요청하는 것 단, 너무 예측가능할 경우 보안에 취약해 질 수 있음 HTTP 요청 메서드 GET: 서버 자원을 가져오려고 할 때 사용 POST: 서버에 자원을 새로 등록하고자 할 때 사용(또는 뭘 써야할 지 애매할 때) PUT: 서버의 자원을 요청에 들어있는 자원으로 치환하고자할 때 사용..

Node.js 2020.12.14

서버와 클라이언트

서버와 클라이언트의 관계 클라이언트가 서버로 요청(request)을 보냄 서버는 요청을 처리 처리 후 클라이언트로 응답(response)을 보냄 노드로 http 서버 만들기 http 요청에 응답하는 노드 서버 createServer로 요청 이벤트에 대기 req 객체는 요청에 관한 정보가, res 객체는 응답에 관한 정보가 담겨 있음 -> res 메서드로 응답 보냄 write로 응답 내용을 적고 end로 응답 마무리(내용을 넣어도 됨) -> listen(포트) 메서드로 특정 포트에 연결 const http = require('http'); const server = http.createServer((req, res) => { // 여기에 어떻게 응답할 지 적어줍니다. res.write('Hello Node..

Node.js 2020.12.13

습관 기억 - 습관은 목표에 집착하지 않는다

자신이 곧 살아 있는 습관 덩어리가 되리라고 깨달을 수 있다면, 아직 덜 완성된 상태일 때 자신의 행동에 더 주의를 기울일 것이다. - 윌리엄 제임스 이 책에서는 여러가지 실험을 보여주는데 그 실험을 내가 다 적을 경우 내용이 너무 길어져서 핵심 내용만 쓸것이다. 갑자기 내용이 넘어가도 이해해주길 바란다. 인간 행동의 근원은 무엇인가 이번장에서는 행동주의 심리학과 인지주의 심리학, 그리고 그 둘이 극적으로 통합되기까지의 간략한 흐름만 살펴볼 것이다. 행동주의자: 행동은 반복된 보상과 처벌을 통해 형성된 습관에 따라 움직이고, 그렇게 한번 습관이 굳어지면 그 뒤에도 외부 자극에 고정된 반응을 일으킨다라는 논리. 인지주의 : 인간의 기억이 계속해서 재조직되고 동기화된다. 그 후 나온 것이 행동주의 + 인지주..

thread_pool, 이벤트, error 처리하기

thread_pool fs, crypto, zlib 모듈의 메서드를 실행할 때는 백그라운드에서 동시에 실행됨 ( Node는 4개까지 지원해줌 ) 스레드풀이 동시에 처리해줌 밑의 코드를 실행해보면 4개씩 실행이 되는 것을 볼 수 있다. 하지만 자기 컴퓨터 사이즈에 맞게 늘려줄 수 있다. -> UV_THREADPOOL_SIZE=8 window에서는 SET UV_THREADPOOL_SIZE=8 기억하자. const crypto = require('crypto'); const pass = 'pass'; const salt = 'salt'; const start = Date.now(); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('..

Node.js 2020.12.13

내성 착각 - 습관은 드러나지 않는다.

습관의 족쇄는 너무나 가벼워서 느껴지지 않을 정도다. 도저히 꺨 수 없을 정도로 강력해지기 전까진 -새뮤얼 존슨- 어디서부터 어디까지가 습관일까? 먼저 우리는 습관들이 우리 삶에서 어떻게 기능하지는 먼저 이해해야 한다. 이 책의 저자가 실행한 실험에 대해서는 기술하지 않겠다. 간단하게만 기술하면 임의의 시간에 벨이 울리고 자신의 하고 있던 행위와 생각을 기술하는 것이었다. 60퍼센트의 달하는 행동을 하는 동안 참가자들은 자신이 무엇을 하는지 의식하지 않았다. 몽상하거나 뭔가를 곰곰이 생각하거나 계획을 짜고 있었다. 이 말은 의식과 행위 사이에 연결고리가 없다는 것을 증명할 수 있다. 특정 행위들이 더 높은 퍼센트지로 의식적 자아의 개입 없이 반복이 이뤄졌고 상대적으로 낮은 퍼센트도 있었지만 사람의 삶에 ..

자동화된 무의식이 만드는 습관 설계의 법칙

1단계. 늘 동일하게 유지되는 안정적인 상황을 조성하라 2단계. 좋은 습관으로 향하고 마찰력은 줄이고 나쁜 습관으로 향하는 마찰력은 높여라 3단계. 행동(반응)을 자동으로 유발하는 자신만의 신호를 찾아라 4단계. 언제나 기대 이상으로 신속하고 불확실하게 보상하라 5단계. 마법이 시작될 때까지 이 모든 것을 반복하라. 1부 무엇이 우리를 지속하게 하는가? (습관은 영원한 지속이다.) 우리의 변화를 가로막고 있는 몇 가지 단서들 1. 인간 행동의 근원은 미스터리한 '불합리성'에 기초하며, 인간은 자신의행동을 이끄는 원인을 제대로 이해하지 못하고 있다. 2. 인간은 자신의 합리적 자아를 과대평가한다. 정말 의지력만으로 우리가 과거의 나쁜 습관과 작별을 고하고 좋은 습관을 들여 목표를 달성할 수 있을까? 우리는..

파일 폴더 읽기, 쓰기

const fs = require('fs').promises; const constants = require('fs').constants; // 폴더가 있는지 없는지 확인 해봄 fs.access('./folder', constants.F_OK | constants.W_OK | constants.R_OK) .then(() => { return Promise.reject('이미 폴더 있음'); }) .catch((err) => { if (err.code === 'ENOENT') { console.log('폴더 없음'); return fs.mkdir('./folder'); } return Promise.reject(err); }) .then(() => { console.log('폴더 만들기 성공'); retu..

Node.js 2020.12.12

버퍼와 스트림

버퍼: 일정한 크기로 모아두는 데이터 ( 한번에 보내는 것 ) 데이터를 모으다가 일정한 크기가 되면 한 번에 처리 버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업 스트림: 데이터의 흐름 ( 여러번에 나눠서 보내는 것 ) -> 보통 스트림이 더 좋음 일정한 크기로 나눠서 여러 번에 걸쳐서 처리 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달 스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업 const buffer = Buffer.from('저를 버퍼로 바꿔보세요'); console.log('from():', buffer); console.log('length:', buffer.length); console.log('toString():', buffer.toString()); co..

Node.js 2020.12.12