본문 바로가기

Node.js

(25)
Node.js - 클러스터 (Cluster) cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈이다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있으므로 요청이 많이 들어올 시 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다. 즉 서버에 무리가 덜 가게 된다. 예를 들어 코어가 8개인 서버가 있을 경우 노드는 기본적으로 코어를 하나만 활용한다. 그러나 cluster 모듈을 설정하여 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있다. 성능이 꼭 8배가 되진 않으나 하나만 사용할 때에 비해선 당연히 성능이 개선된다. 그러나 메모리를 공유하지 못한다는 단점이 있다. 이 경우 레디스 등의 서버를 도입하여 해결할 수 있다. 아래와 같은 server1.js 파일을 만들어 클러스..
Node.js - 쿠키와 세션 (Cookie and Session) 쿠키에 관한 내용은 아래 글을 참고한다. https://lgphone.tistory.com/65 쿠키와 세션 클라이언트에서 보내는 요청에는 큰 단점이 존재한다. 바로 누가 요청을 보내는지 모른다는 것이다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있다. 그러나 여러 컴퓨터가 � lgphone.tistory.com 아래와 같은 코드를 작성하여 노드로 실행해 준다. const http = require('http'); http.createServer((req, res) => { console.log(req.url, req.headers.cookie); res.writeHead(200, { 'Set-Cookie': 'mycookie=test' }); res.end('Hello Cookie..
Node.js - REPL, 모듈, 내장 객체 (REPL, Module, Implicit Object) 앞으로의 노드 관련 포스트들은 Node.js 교과서 - 길벗, 조현영 책을 보고 배운 점들을 정리해 놓는 포스트들입니다. REPL 브라우저 콘솔 탭에서 자바스크립트 코드를 입력하는 것처럼, 노드 또한 비슷한 기능을 제공한다. 입력한 코드를 읽고 (Read), 해석하고 (Evaluate), 결과물을 반환하고 (Print), 종료할 때까지 반복한다 (Loop) 고 해서 REPL이라고 부른다. 파이썬의 IDLE 같은 기능이라고 생각하면 된다. 커맨드에 node라고 쳐서 실행한다. C:\Users\bumsu>node Welcome to Node.js v14.7.0. Type ".help" for more information. > const str = 'hello' undefined > console.log(s..
Node.js 기초 6 - 모듈 프로그램 당 사용하는 함수, 변수, 객체 등이 많아질 수록 프로그램은 점점 복잡해지고 난해해진다. 만약 우리가 원하는 프로그램이 굉장히 복잡하고 코드가 길다면, 추후에 우리는 그 프로그램을 다시 이해하고 유지보수 또는 변경하고 싶을 때 굉장히 오래 걸릴 것이다. 따라서 우리는 원하는 코드를 객체의 형태로 밖으로 내보낼 수 있다. 이 경우 내보내는 것을 모듈 (객체의 모음) 이라고 하며, 내보내는 것을 export 라고 한다. 새 디렉터리에 mpart.js라는 파일에 아래와 같은 코드를 작성해 모듈을 만들자. const M = { v: 'v', f: function() { console.log(this.v); } } module.exports = M; 이후, muse.js라는 파일에 이를 가져와 실행시켜 ..
Node.js 기초 5 - 파일 목록 읽기 노드js에서 특정 디렉터리 하위에 있는 파일과 디렉터리의 목록을 알아내 보자. 먼저 새로 디렉터리를 만들어 read_dir.js라는 파일을 만들자. 그 후, 그 디렉터리 하위에 새로운 폴더, data 라는 폴더를 만들어 안에 sample1.txt, sample2.txt, sample3.txt라는 파일을 만들어 주자. 이제 read_dir.js에 다음과 같은 코드를 작성해 준다. const testFolderDir = './data'; const fs = require('fs'); fs.readdir(testFolderDir, (err, filelist) => { console.log(filelist); }); 실행시키면 다음과 같은 결과가 나온다. PS C:\Users\bumsu\nodejs-projec..
Node.js 기초 4 - 콘솔에서의 입력값 노드js에서 콘솔에서의 입력값에 대해서 알아보자. 먼저, 새 디렉터리에 console.js라는 파일을 만들고 아래와 같은 코드를 입력한다. const args = process.argv; console.log(args); 이제 cmd를 켜 콘솔에서 노드js를 실행시키며 뒤에 값들을 띄어쓰기 구분으로 다음과 같이 입력해 보자. PS C:\Users\bumsu\nodejs-projects\console_log> node console.js hello beomseok [ 'C:\\Program Files\\nodejs\\node.exe', 'C:\\Users\\bumsu\\nodejs-projects\\console_log\\console.js', 'hello', 'beomseok' ] 이와 같이 출력된다. ..
Node.js 기초 3 - 파일 읽기 노드js에서 파일을 다루는 방법을 알아보자. 정보 시스템의 핵심적 메커니즘은 CRUD이다. C는 Create, R은 Read, U는 Update, D는 Delete를 뜻하며, 이 4가지가 정보를 다루는 핵심적 기능들이다. 가장 중요한 것은 C이다. C가 없으면 RUD도 없다. 그 다음으로 중요한건 R이다. R이 없으면 데이터를 작성하는 이유가 없기 때문이다. 노드js에서 파일을 다루려면 fs 모듈을 보통 사용한다. fs란, file system의 약자이다. 파일을 읽기 위해선 readFile 메서드를 사용하면 된다. 먼저 새로운 파일, readfile.js 라는 파일에 다음과 같은 코드를 작성해 주자. const fs = require('fs'); fs.readFile('sample.txt', (err,..
Node.js 기초 2 - URL의 이해 위는 URL이 어떻게 이루어져 있는지에 대한 그림이다. 이제 쿼리 스트링 (query string) 이 어떻게 노드js에서 사용될 수 있는지 보자. 먼저 main.js를 다시 켜보자. var http = require('http'); var fs = require('fs'); var app = http.createServer(function(request,response){ var url = request.url; console.log(url); if(url == '/'){ url = '/index.html'; } if(url == '/favicon.ico'){ response.writeHead(404); response.end(); return; } response.writeHead(200); resp..