Basics/Node.js에 해당하는 글 23

  1. 클러스터(cluster) 2021.10.19

    기본적으로 노드는 싱글 스레드. CPU 코어를 모두 사용할 수 있게 해 주는 모듈이다. → 코어를 하나밖에 사용하지 못하고 나머지 7개는 놀고 있음. → 서버를 코어 개수만큼 실행시키면 놀고 있는 코어도 모두 활용할 수 있다. → 이 때, cluster로 코어 하나당 노드 프로세스 하나를 배정할 수 있다. 코어 개수와 성능이 비례하는 것은 아니지만, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되어 더 효율적이다. 단, 서버를 여러 개 띄운다고 해도 메모리나 세션과 같은 컴퓨터 자원을 공유할 수는 없다. 로그인같은 경우는 Redis 등 별도 서버로 해결이 가능함(나중에) http2를 적용하면서 같이 적용하는 게 좋다. const cluster = require("cluster"); ..


  2. 노드로 http 서버 만들기 2021.10.12

    노드에서는 http 모듈을 제공하며 간단하게 서버를 만들 수 있도록 한다. const http = require("http"); http .createServer((req, res) => { //↓html인지 문자열인지 알려줘야 할 때는 아래처럼 추가한다. //한글이 들어있으면 charset=utf-8 까지 같이 res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }); res.write("Hello, Node."); res.write("Hello server"); res.end("Hello doodoo"); //write로 응답 내용을 적어 주고, end로 응답을 마무리한다. }) .listen(8080, () => { //특정 포트에 연결..


  3. 예외 처리하기 2021.09.22

    예외(Exception) : 처리하지 못한 에러. 처리하지 못한 에러가 발생하면 노드 스레드가 멈춘다. → 노드는 기본적으로 싱글 스레드이기 때문에, 스레드가 멈춘다 = 프로세스가 멈춘다. ∴ 에러 처리는 필수! 어떻게 할 수 있을까? 1. 에러가 발생할 만한 부분을 try-catch문으로 예외 처리 setInterval(() => { console.log("시작"); try { throw new Error("서버고장났습니다"); //throw한 것을 아래 catch에서 받아준다. } catch (err) { console.log(err); //err를 처리해 준다. } }, 1000); //% node error.js //시작 //Error: 서버고장났습니다 모든 코드를 try-catch로 감싸는 것은..


  4. File System 2021.09.22

    fs(file system) : 파일 시스템에 접근하는 모듈. 파일 및 폴더의 존재여부 확인부터 생성/삭제/읽기/쓰기가 가능하다. 브라우저에서는 파일 시스템에 접근할 수 없지만 노드에서는 접근 가능하다. → 그렇기 때문에 보안상의 이슈를 주의해야 함. readFile //fs.js const fs = require("fs"); fs.readFile("./readme.txt", (err, data) => { if (err) { throw err; } console.log(data); console.log(data.toString()); }); 위 코드를 작성하고 실행하면 같은 폴더(./)에 있는 readme.txt를 읽어온다. % node fs.js //console.log(data)의 결과 //conso..


  5. crypto, util 2021.09.21

    crypto(단방향 암호화) 암호화(평문→암호)는 가능하지만 복호화(암호→평문)는 불가능하다. 단방향 암호화는 대표적으로 해시 기법으로 진행된다. = 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식. ex. 비밀번호가 kimdoodoo라고 했을 때, kimdoodoo를 해시화하면 언제나 rouie로 변경된다. 그리고 이 rouie라는 값만 서버가 기억하고, 사용자가 kimdoodoo를 입력했을 때 rouie로 변경된 값을 읽는 것. → 서버의 데이터가 털려도 복호화를 못하기 때문에 실제 데이터는 안전하다. 양방향 암호화 =대칭형 암호화, 암호문을 복호화할 수 있다. key가 사용되며, 암호화할 때와 복호화할 때 같은 key를 사용해야 한다. 따라서.. key 관리가 매우 중요함. util : 각종 편의..


  6. os와 path 2021.09.21

    os(operation system) 운영 체제에 대한 정보를 os.어쩌구로 가져올 수 있다.process와 비슷함. 참고 링크 const os = require("os"); os.arch(); //process.arch와 동일함 os.platform(); //process.platform과 동일함 os.type(); //운영체제의 종류를 보여줌 os.uptime(); //운영체제 부팅 이후 흐른 시간(초)을 보여줌 os.hostname(); //컴퓨터의 이름을 보여줌 os.release(); //운영체제의 버전을 보여줌 os.homedir(); //홈 디렉토리 경로를 보여줌 os.tmpdir(); //임시 파일 저장 경로를 보여줌 os.cpus(); //컴퓨터의 코어 정보를 보여줌 os.freemem(..


  7. process 2021.09.13

    노드는 파일 시스템에 접근할 수 있는 것처럼 운영 체제 정보에도 접근할 수 있다. 콘솔창에서 node를 켜고 명령창에 process 를 입력하면 프로세스에 대한 각종 정보를 불러올 수 있다. __ : double under = dunderscore $ node > process.version v14.0.0 //설치된 노드의 버전 > process.arch x64 //processor architecture 정보. arm, ia32등일 수도 있음 > process.platform win32 //운영체제 플랫폼의 정보. linux, darwin(맥), freebsd 등일 수도 있음 > process.pid 14736 //현재 프로세스의 아이디. 프로세스를 여러 개 가질 때 구분할 수 있음(프로세스 강제종료시..


  8. Node 내장 객체 (2) - filename, exports, this 2021.09.12

    1. __filename, __dirname (각각 언더바 두번) __filename : 실행한 파일의 주소(경로)를 알려 준다. __dirname : 현재 폴더(디렉토리)의 경로를 알려 준다. 2. module.exports module.exports는 보통 한 가지만 내보낼 때 쓴다. module.exports === exports === {} (빈 객체) 위처럼 module.exports와 exports는 서로 참조 관계이다. 그렇기 때문에, exports에 객체의 속성이 아닌 다른 값(함수 등)을 대입하면 참조 관계가 깨지게 된다. module.exports === exports === {} //여기에 module.exports = { a, b } 해주면 module.exports === expo..


  9. Node 내장 객체 (1) - global, console, timer 2021.09.12

    1. globalThis 노드의 전역 객체로 모든 파일에서 접근 가능하며 생략도 가능하다. console.log, require, setTimeout, module.exports등... 얘네들도 원래 다 global 객체 내에 들어 있는 속성들이다. 2. console 객체 console.log('') : 어퍼스트로피 안의 값을 콘솔에 찍어 준다. console.dir : 객체를 로깅한다 console.time('a') / console.timeEnd('a') : 시간을 로깅한다. → 실행할 코드 위 아래에 적어 주면 해당 코드가 실행이 완료될 때까지의 시간을 알려 준다. 3. 타이머 메서드 setTimeout(콜백 함수, 밀리초) : 주어진 밀리초 이후에 콜백 함수를 실행한다. setInterval(콜..


  10. 노드의 정의, 특성 2021.08.31

    Node의 정의 Node.js는 크롬의 V8(자바스크립트 엔진)로 빌드된 자바스크립트 런타임. 런타임? → 특정 언어로 만든 프로그램들을 실행할 수 있게 해 주는 가상 머신의 상태 = 실행기라고 생각하면 됨 노드는 서버가 아니다. 다만, 노드는 서버의 역할을 수행할 수는 있음. 자바스크립트로 서버의 기능을 수행하는 코드를 짜고 노드로 실행시켜 주면 그 역할을 할 수 있다. 자바스크립트는 브라우저에서 html 에서 스크립트 태크 안에 넣어 주면 브라우저가 html을 읽으면서 스크립트를 함께 읽어주는 방식으로 실행할 수 있었음. → html이 없으면 스크립트를 읽을 수 없었다. 종속되어 있는 느낌. node로 인해 브라우저와 html에 종속되어 사용되어야 할 필요성을 탈출할 수 있게 되었음. Node의 특성..