Node.js 38

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

파일 폴더 읽기, 쓰기

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

파일 시스템 접근하기, 동기와 비동기 메서드

1. fs 파일 시스템에 접근하는 모듈 파일/폴더 생성, 삭제, 읽기, 쓰기 가능 웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있음 파일 읽기 예제(결과의 버퍼는 뒤에서 설명함) 2. fs 프로미스 콜백 방식 대신 프로미스 방식으로 사용 가능 require(‘fs’).promises 사용하기 훨씬 더 편해서 프로미스 방식을 추천함 3. fs로 파일 만들기 4. 동기와 비동기 메서드 노드는 대부분의 내장 모듈 메서드를 비동기 방식으로 처리 비동기는 코드의 순서와 실행 순서가 일치하지 않는 것을 의미 일부는 동기 방식으로 사용 가능 동기와 비동기: 백그라운드 작업 완료 확인 여부 블로킹과 논 블로킹: 함수가 바로 return 되는지 여부 노드에서는 대부분 동기-블로킹 방식과 비동기-논 블로킹 방식임..

Node.js 2020.12.11

child_process, 기타 모듈

다른언어를 사용하거나 다른 프로그램을 실행하고 싶을 때 현재 노드 프로세스 외에 새로운 프로세스를 띄워서 명령을 수행함. 명령 프롬프트의 명령어인 dir을 노드를 통해 실행 (리눅스라면 ls를 대신 적을 것) python 3 실행하기 기타 모듈들 assert 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는 데 사용합니다. dns 도메인 이름에 대한 IP 주소를 얻어내는 데 사용합니다. net HTTP보다 로우 레벨인 TCP나 IPC 통신을 할 때 사용합니다. string_decoder 버퍼 데이터를 문자열로 바꾸는 데 사용합니다. tls TLS와 SSL에 관련된 작업을 할 때 사용합니다. tty 터미널과 관련된 작업을 할 때 사용합니다. dgram UDP와 관련된 작업을 할 때 사용합니다. v8 V..

Node.js 2020.12.11

Worker_threads (멀티 스레드)

노드에서 멀티 스레드 방식으로 작업할 수 있음. isMainThread: 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분 메인 스레드에서는 new Worker를 통해 현재 파일(__filename)을 워커 스레드에서 실행시킴 worker.postMessage로 부모에서 워커로 데이터를 보냄 parentPort.on(‘message’)로 부모로부터 데이터를 받고, postMessage로 데이터를 보냄 const { Worker, isMainThread, parentPort, workerData } = require('worker_threads') if(isMainThread){//메인스레드 const threads = new Set(); // 중복되지 않는 배열 threads.ad..

Node.js 2020.12.10