본문 바로가기

Programming

(477)
5. http 모듈로 서버 만들기 (1) - 요청과 응답 [1] 기본적인 클라이언트와 서버 개념을 설명함에 있어서, 서버는 req를 받아서 res해 클라이언트에 보내게 됩니다. 결국 서버는 '요청 받는' 부분과 '응답을 보내는' 부분이 존재해야 합니다.  이 구현은 우리가 살펴본 개념과 연결해 생각해 보면 간단합니다. 클라이언트로부터 요청 이벤트가 왔을 때, 서버에서 어떤 작업을 수행할 것인지 이벤트 리스너를 미리 등록해두는 것입니다. 이벤트 리스너를 등록해둔 예제를 만들어 보겠습니다.   // createServer.jsconst http = require('http');http.createServer( (req, res) => { // response를 어떻게 할지 작성} );  기본적으로 http 서버가 있어야 웹 브라우저의 req를 처리합니다. 그래서 h..
4. Node 기능 살펴보기 (11) - 예외 처리하기 [3] : 흔히 발생하는 에러 유형 Javascript 문법 에러를 제외한 오류의 종류를 살펴보도록 하겠습니다.  node: command not found- 노드를 설치했음에도 이 에러가 발생하는 경우는 환경 변수 설정의 오류가 발생하는 경우가 대부분입니다. 환경 변수에 노드가 설치된 경로가 포함되어야 합니다.ReferenceError: 모듈 is not defined- 모듈을 require했는지 확인이 필요합니다.Error: Connot find module 모듈이름- 모듈을 require했지만 설치는 안 한 상태입니다. npm i 명령어를 실행해야 합니다.Error [ERR_MODULE_NOT_FOUND] - 존재하지 않는 모듈을 불러올 때 발생합니다.Error: Can't set headers after they are sent- ..
4. Node 기능 살펴보기 (11) - 예외 처리하기 [2] 앞선 아티클에서 throw를 사용해 try / catch 문으로 에러를 잡는 연습을 해보았습니다. 반대로, 이번에는 노드에서 자체적으로 잡아주는 에러 예제를 살펴보도록 하겠습니다.   const fs = require('fs');setInterval( () => { fs.unlink('./abcdefg.js', (err) => { if (err) { console.error(err); } });}, 1000);/* 출력[Error: ENOENT: no such file or directory, unlink 'D:\Study\Javascript\abcdefg.js'] { errno: -4058, code: 'ENOENT', syscall: 'un..
4. Node 기능 살펴보기 (11) - 예외 처리하기 [1] 예외는 통상적으로 '처리하지 못한 에러'로 보면 됩니다. 특히, 싱글 스레드로 작동하는 노드에서 예외가 발생하게 되면 실행 중인 노드 프로세슥가 멈추게 되고, 사실상 서버가 멈춰버리기 때문에 서비스 중단에 가까운 재앙이 발생하게 됩니다. 그래서 에러가 발생할 경우를 항상 대비하여 예외 처리에 신경을 써야 합니다.  물론 이에 대해서 문법상에는 오류가 없다고 가정해야 합니다. 그리고 에러가 발생하더라도 에러 로그를 기록하되 작업 자체는 지속될 수 있도록 처리해야 합니다.  아래와 같이 '프로세스는 멈추지 않도록' 에러를 처리해 보겠습니다.   setInterval( () => { console.log('START'); try{ throw new Error("SERVER ERROR__..
4. Node 기능 살펴보기 (10) - 이벤트 이해하기 [2/2] 앞선 아티클에서 이벤트 관련 메서드 예제를 살펴보았습니다.    4. Node 기능 살펴보기 (10) - 이벤트 이해하기 [1]노드에서의 이벤트는, 제대로 배운 것은 아니지만 스트림 아티클에서 자연스럽게 사용했습니다.     4. Node 기능 살펴보기 (7) - 버퍼와 스트림 2앞선 아티클에서 Buffer 클래스를 사용한 예제를nozeroslope.tistory.com  const EventEmitter = require('events');const myEvent = new EventEmitter();myEvent.addListener('EVENT1', () => { console.log('이벤트 1번');});myEvent.on('EVENT2', () => { console.log('이벤트..
4. Node 기능 살펴보기 (10) - 이벤트 이해하기 [1/2] 노드에서의 이벤트는, 제대로 배운 것은 아니지만 스트림 아티클에서 자연스럽게 사용했습니다.     4. Node 기능 살펴보기 (7) - 버퍼와 스트림 2앞선 아티클에서 Buffer 클래스를 사용한 예제를 확인했습니다. 이제 Buffer 클래스의 사용법을 조금 더 자세히 살펴보도록 하겠습니다.  const buffer = Buffer.from('버퍼로 변환할 문자열입니다.');consolnozeroslope.tistory.com  이를테면 on('data', callback) 형태나 on('end', callback)과 같은 방식이었죠. 이는 곧 data / end라는 "이벤트"가 발생했을 때 콜백 함수를 실행하도록 이벤트를 등록한 리스너의 개념인 것입니다. createStreamd의 경우에는 data나..
4. Node 기능 살펴보기 (9) - 스레드 풀 앞선 아티클에서 살펴본 fs 모듈의 메서드들은 비동기 메서드였습니다. 정리하면, 비동기 메서드들은 백그라운드에서 실행되고 > 실행된 후 메인 스레드의 콜백 함수 or 프로미스의 then 부분이 실행됩니다. 이때 fs 메서드가 여러번 실행되어도, 스레드 풀의 존재로 인해 fs 메서드는 백그라운드에서 동시에 처리가 됩니다.  fs외에도 crypto, zlib, dns.lookup 등의 모듈은 스레드 풀을 내부적으로 사용합니다. 아래 예제에서 crypto.pbkdf2 메서드를 통해서 스레드 풀의 존재를 확인해 보겠습니다.  const crypto = require('crypto');const pass = 'pass';const salt = 'salt';const start = Date.now();crypto...
4. Node 기능 살펴보기 (8) - fs메서드 살펴보기 4 우리는 앞서 pipe 메서드를 살펴보면서, 노드 8.5 버전 이후에는 createReadStream과 createWriteStream을 굳이 pipe하지 않아도 파일 복사가 가능하다고 언급한 적이 있습니다.  좀 더 간단하게 파일을 복사하는 예제를 살펴보겠습니다.   const fs = require('fs').promises;fs.copyFile('readme4.txt', 'writeme4.txt') .then(() => { console.log('copy finished'); }) .catch((error) => { console.error(error); }); /* 출력 copy finished */  위 예제를 실행할 경우 writeme4.txt가 ..