전체 글
-
노드 REST API 서버 만들기노드 2023. 4. 13. 12:10
REST API 서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현하는 것 /index.html이면 index.html을 보내달라는 뜻이다. 항상 html을 요구할 필요는 없다. 서버가 이해하기 쉬운 주소가 좋다. REST API(Representational State Transfer) 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법이다. /user면 사용자 정보에 관한 정보를 요청하는 것이다. /post면 게시글에 관련된 자원을 요청하는 것이다. HTTP 요청 메서드 GET : 서버 자원을 가져오려고 할 때 사용 POST : 서버에 자원을 새로 등록하고자 할 때 사용(또는 멀 써야할 지 애매할 때) PUT : 서버의 자원을 요청에 들어있는 자원으로 치환 하고자 할 때 사용 PATCH :..
-
노드 fs로 HTML 읽어 제공하기노드 2023. 4. 13. 11:26
전에 서버를 만들었을때 사용했던 코드를 가져와보면 //server1.js const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('Hello Node!'); res.end('Hello Server!'); }) .listen(8080); server.on('listening', () => { console.log('8080번 포트에서 서버 대기 중입니다.'); }); server.on('error', (error) => { console.error(error); }); 간혹 브라우저가..
-
노드 http 서버 만들기노드 2023. 4. 13. 11:07
서버와 클라이언트 서버와 클라이언트의 관계는 다음과 같다 클라이언트가 서버로 요청(request)을 보냄 서버는 요청을 처리 처리 후 클라이언트로 응답(response)을 보냄 간단히 클라이언트와 서버를 설명을 하자면 사람이 웹 브라우저에 naver.com을 입력했다고 하자. 그러면 웹 브라우저가 클라이언트라고 생각하면 되고 naver 서버 즉, 하나의 naver 컴퓨터라고 생각하면 된다. 클라이언트 : 웹 브라우저 서버 : naver 컴퓨터 사람이 naver.com이라는 요청을 클라이언트에서 했으니 이제 naver 컴퓨터에서 그 요청에 대한 응답으로 naver.com이라는 사이트를 가져 와야 한다. *naver 사이트는 요청을 한 사람의 컴퓨터에 저장된 것이 아니라 naver 컴퓨터(서버)에 저장되어 ..
-
노드 에러 처리하기노드 2023. 4. 12. 17:37
예외(Exception) : 처리하지 못한 에러 노드 스레드를 멈춘다. 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것이다. 에러 처리는 필수이다. 기본적으로 try catch 문으로 예외를 처리한다. 에러가 발생할 만한 곳을 try catch로 감싼다. //error1.js setInterval(() => { console.log('시작'); try { throw new Error('서버를 고장내주마!'); } catch (err) { console.error(err); } }, 1000); 자바스크립트의 try, catch 문과 비슷하다. throw라는 것은 의도적으로 에러를 발생시키는 것이다. 에러가 발생하는 곳을 try, catch문으로 감쌌다. 에러가 try문 안에서..
-
노드 스레드풀과 커스텀 이벤트노드 2023. 4. 12. 16:57
fs, crypto, zlib 모듈의 메서드를 실행할 때는 백그라운드에서 동시에 실행된다. 스레드풀이 동시에 처리해준다. 스레드풀이 동시에 처리해주는 것을 보려면 crypto 같은 연산이 필요한 작업으로 확인하는 것이 좋다. //threadpool.js const 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() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () ..
-
노드 pipe와 스트림 메모리 효율 확인노드 2023. 4. 12. 16:06
스트림 데이터는 chunk로 데이터를 흘려 보내는데 이것이 마치 파이프애 액체가 흘러가는 것 같다~ 라고 해서 pipe라는 말을 쓴다. 스트림끼리 파이프를 연결할 수 있다. //pipe.js const fs = require('fs'); const readStream = fs.createReadStream('readme3.txt', {highWaterMark: 16}); const writeStream = fs.createWriteStream('writeme3.txt'); readStream.pipe(writeStream); //writeme3.txt 저는 조금씩 조금씩 나눠서 전달됩니다. 나눠진 조각을 chunk라고 부릅니다. 노드 버퍼 노드 스트림 붕권 나락 마신 슈날 나찰 초풍 사자 더퍼 스트림으로..
-
노드 버퍼와 스트림 이해하기노드 2023. 4. 12. 14:25
버퍼 : 일정한 크기로 모아주는 데이터이다. 일정한 크기가 되면 한 번에 처리한다. 버퍼링 : 버퍼에 데이터가 찰 때까지 모으는 작업이다. 스트림 : 데이터의 흐름이다. 일정한 크기로 나눠서 여러 번에 걸쳐서 처리한다. 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달한다. 스트리밍 : 일정한 크기의 데이터를 지속적으로 전달하는 작업이다. Buffer 객체를 사용했을때 //buffer.js const buffer = Buffer.from('저를 버퍼로 바꿔보세요'); console.log('from():', buffer); console.log('length:', buffer.length); console.log('toString():', buffer.toString()); const a..
-
노드 파일 시스템 사용하기노드 2023. 4. 12. 14:00
fs 파일 시스템에 접근하는 모듈이다. 파일/폴더 생성, 삭제, 일기, 쓰기 가능 웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있다. readme라는 파일을 읽는 방법은 다음과 같다 //readFile.js const fs = require('fs'); fs.readFile('./readme.txt', (err, data) => { if (err) { throw err; } console.log(data); console.log(data.toString()); }); 콘솔에 data를 출력하면 바이너리 데이터(여기서는 2진법을 16진법으로 변환되서 받아온다)로 받아오는 것을 확인 할 수 있다. fs를 프로미스화 하려면 전에 설명했던 util.promisify를 쓰는 방법도 있지만 fs는 더 좋은..