목록
'node js' 122건
-
요청과 응답 이해하기서버는 클라이언트가 있기에 동작합니다. 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답(response)을 보냅니다.따라서 서버에는 요청을 받는 부분돠 응답을 보내는 부분이 있어야 합니다. 요청과 응답은 이벤트 방식이라고 생각하면 됩니다. 클라이언트로부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록되어야 합니다.createServer.jsconst http = require("http");http.createServer((req, res) => { // 여기에 어떻게 응답할지 적습니다.}); http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으므로 http 모듈을 사용했습니다. http 모듈에는 createSer..
-
자주 발생하는 에러들node: command not found: 노드를 설치했지만 이 에러가 발생하는 경우는 환경 변수가 제대로 설정되지 않는 것입니다. 환경 변수에는 노드가 설치된 경로가 포함되어야 합니다. node 외의 다른 명령어도 마찬가지입니다. 그 명렁어를 수행할 수 있는 파일이 환경 변수에 들어 있어야 명령어를 콘솔에서 사용할 수 있습니다.ReferenceError: 모듈 is not defined: 모듈을 require했는지 확인합니다.Error: Cannot find module 모듈명: 해당 모듈을 require했지만 설치하지 않았습니다. npm i 명령어로 설치하세요.Error: Can't set headers after they are sent: 요청에 대한 응답을 보낼 때 응답을 두 번 이상 보냈습니다..
-
예외 처리하기노드에서는 예외 처리가 정말 중요합니다. 예외란 보통 처리하지 못한 에러를 가리킵니다. 이러한 예외들은 살행 중인 노드 프로세스를 멈추게 만듭니다.멀티 스레드 프로그램에서는 스레드 하나가 멈추면 그 일을 다른 스레드가 대신합니다. 하지만 노드의 메인 스레드는 하나뿐이므로 그 하나를 소중히 보호해야 합니다. 메인 스레드가 에러로 인해 멈춘다고 것은 스레드를 갖고 있는 프로세스가 멈춘다는 뜻이고, 전체 서버도 멈춘다는 뜻과 같습니다. 아무리 신중을 가해 만들었다고 해도 항상 예기치 못한 에러는 발생하는 법입니다.error.jssetInterval(() => { console.log("시작"); try { throw new Error("서버를 고장내주마!"); } catch (err) { co..
-
이벤트 이해하기스트림을 배울 때 on('data', 콜백) 또는 on('end', 콜백)을 사용했습니다. 바로 data라는 이벤트와 end 이벤트가 발생할 때 콜백 함수를 호출하도록 이벤트를 등록한 것입니다.createReadStream 같은 경우는 내부적으로 알아서 data와 end 이벤트를 호출하지만, 우리가 직접 이벤트를 만들 수도 있습니다.const EventEmitter = require("events");const myEvent = new EventEmitter();myEvent.addListener("event1", () => { console.log("이벤트 1");});myEvent.on("event2", () => { console.log("이벤트 2");});myEvent.on("event2",..
-
스레드 풀 알아보기비동기식 메서드들은 백그라운드에서 실행되고, 실행된 후에는 다시 메인 스레드의 콜백 함수나 프로미스의 then 부분이 실행됩니다. 이때 fs 메서드를 여러 번 실행해도 백그라운드에서 동시에 처리되는데, 바로 스레드풀이 있기 때문입니다.fs 외에도 내부적으로 스레드 풀을 사용하는 모듈로는 crypto, zlib, dns.lookup 등이 있습니다.threadpool.jsconst crypto = require("crypto");const pass = "pass";const salt = "salt";const start = Date.now();crypto.pbkdf2(pass, salt, 1000000, 128, "sha512", () => { console.log("1:", Date.now() - sta..
-
기타 fs 메서드 알아보기fsCreate.jsconst 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(..
-
버퍼와 스트림 이해하기노드는 파일을 읽을 때 메모리에 파일 크기만큼 공간을 마련해두며 파일 데이터를 메모리에 저장한 뒤 사용자가 조작항 수 있도록 합니다.이때 메모리에 저장된 데이터가 바로 버퍼입니다. buffer.jsconst buffer = Buffer.from("저를 버퍼로 바꿔보세요");console.log("from():", buffer);console.log("length:", buffer.length);console.log("toString():", buffer.toString());const array = [ Buffer.from("띄엄 "), Buffer.from("띄엄 "), Buffer.from("띄어쓰기"),];const buffer2 = Buffer.concat(array);console.log(..
-
동기 메서드와 비동기 메서드setTimeout 같은 타이머와 process.nextTrick 외에도, 노드는 대부분의 메서드를 비동기 방식으로 처리합니다. 하지만 몇몇 메서드는 동기 방식으로도 사용할 수 있습니다. 특히 fs 모듈이 그러한 메서드를 가지고 있습니다.readme2.txt저를 여러 번 읽어보세요.async.jsconst fs = require("fs");console.log("시작");fs.readFile("./readme2.txt", (err, data) => { if (err) { throw err; } console.log("1번", data.toString());});fs.readFile("./readme2.txt", (err, data) => { if (err) { throw err; } ..
-
파일 시스템 접근하기fs 모듈은 파일 시스템에 접근하는 모듈입니다. 즉, 파일을 생성하거나 삭제하고, 읽거나 쓸 수 있습니다. 폴더도 만들거나 지울 수 있습니다.readme.txt저를 읽어주세요.readFile.jsconst fs = require("fs");fs.readFile("./readme.txt", (err, data) => { if (err) { throw err; } console.log(data); console.log(data.toString());}); fs 모듈을 불러온 뒤 읽을 파일을의 경로를 지정합니다. 여기서는 파일의 경로가 현재 파일 기준이 아니라 node 명령어를 실행하는 콘솔 기준이러는 점에 유의해야 합니다.파일을 읽은 후에 실행될 콜백 함수도 readFile 메소드의 인수로 같이..
-
기타 모듈들assert: 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는 데 사용합니다.dns: 도메인 이름에 대한 IP 주소를 얻어내는 데 사용합니다.net: HTTP보다 로우 레벨인 TCP나 IPC 통신을 할 때 사용합니다.string_decoder: 버퍼 데이터를 문자열로 바꾸는 데 사용합니다.tls: TLS와 SSL에 관련된 작업을 할 때 사용합니다.tty: 터미널과 관련된 작업을 할 때 사용합니다.dgram: UDP와 관련된 작업을 할 때 사용합니다.v8: V8 엔진에 직접 접근할 때 사용합니다.vm: 가상 머신에 직접 접근할 때 사용합니다.
-
child_process노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈입니다. 이 모듈을 통해 다른 언어의 코드를 실행하고 결괏값을 받을 수 있습니다. 이름이 child_process(자식 프로세스)인 이유는 현재 노드 프로세스 외에 새로운 프로세스를 띄워서 명령을 수행하고, 노드 프로세스에 결과를 알려주기 때문입니다.exec.jsconst exec = require("child_process").exec;const process = exec("dic");process.stdout.on("data", function (data) { console.log(data.toString());}); // 실행 결과process.stderr.on("data", function (data) { cons..
-
worker_threadsworker_threads.jsconst { Worker, isMainThread, parentPort } = require("worker_threads");if (isMainThread) { // 부모일 때 const worker = new Worker(__filename); worker.on("message", (message) => console.log("from worker", message)); worker.on("exit", () => console.log("worker exit")); worker.postMessage("ping");} else { // 워커일 때 parentPort.on("message", (value) => { console.log("from parent..