목록프로그래밍/node.js (6)
쌓고 쌓다
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oFbhu/btrXIn403eT/6Tc0qWkWDkKLXJ95PbFhyK/img.png)
서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현한다. 주소가 /index.html이면 서버의 index.html을 보내달라는 뜻이다. 물론 html이나 css, 이미지 같은 파일도 요청이 가능하고, 특정 동작을 행하는 것을 요청할 수도 있다. 서버의 요청이 주소로 표현되니 서버가 이해하기 쉽게 주소를 사용하는것이 좋다. 여기서 REST가 등장한다. REST(REpresentational State Transfer)는 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 뜻한다. 자원이라 해서 파일만 뜻하는 것이 아니라 서버가 행할 수 있는 것들을 통 들어서 의미한다. REST를 따르는 서버를 RESTful하다라고 한다... REST API? API(Application Programming..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cOgIal/btrXBZiJIQV/qJGm5JTWbwE5OqtoiVY3S1/img.png)
요청과 응답 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청에 따라 처리하여 응답(response)을 보낸다. 따라서 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식이라고 생각하자. 클라이언트로부터 요청이 왔을 때 어떤 작업을 할지 이벤트 리스너를 미리 등록해둔다. createServer.js const http = require('http'); http.createServer((req, res) => { // 응답을 어떻게 할지 적음. } http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으니 http 모듈을 사용했다. req 객체는 요청에 관한 정보들을, res 객체는 응답에 관한 정보들을 담고 있다. 현재 요청에 대한 응답을 넣..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bo7EnQ/btrXwjnhRjM/bW5QSqmR1eDnC2mIlGiUdk/img.png)
파일을 읽고 쓸 때 크게 두 가지 방식이 있다. 버퍼를 이용하거나 스트림을 이용하는 방식이다. 버퍼 fs 모듈에서 사용한 readFile 메소드 또한 버퍼 방식을 사용한다. 파일을 읽을때 메모리에 파일 크기만큼 공간을 마련한 뒤, 그 공간에 데이터를 저장하고 사용자가 사용한다. 이때 메모리에 저장된 데이터를 버퍼라고 한다. 일정한 크기로 데이터를 모은 것이다. 일정한 크기가 되면 한 번에 데이터를 처리하며, 버퍼링은 버퍼에 데이터가 찰 때까지 모으는 작업을 말한다. Buffer 클래스로 버퍼를 다룰 수 있다. 스트림 버퍼 방식에서 100MB 파일을 읽을 때 100MB 버퍼를 만들어야 했었다. 이게 10개가 되면 1GB가 된다. 메모리의 문제가 발생할 수 있다는 말이다. 게다가 버퍼에 다 써야지 파일 읽기..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mmugZ/btrXjZ3RuAG/hmXv29F3fI07xh31qJwLrk/img.png)
fs 모듈 fs 모듈은 파일 시스템에 접근하는 모듈이다. 이 모듈로 파일의 생성과 삭제, 읽기, 폴더 생성도 가능하다. 1. 파일 읽기 - readFile readme.txt 리드미입니다. readFile.js const fs = require('fs') fs.readFile('./readme.txt', (err, data) => { if(err) { throw err } console.log(data) console.log(data.toString()) }) * 읽은 파일의 경로가 현재 파일 기준이 아니라 node 명령어를 실행하는 콘솔 기준이다. C:\ 디렉토리에서 node folder/readFile.js를 실행하면 C:\folder\readme.js가 실행되는 것이 아니라 C:\readme.txt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MLSF8/btrWVLeoize/Zjmw5I2KVrfQeFm8r5u0Jk/img.png)
__firename, __dirname 노드는 __filename, __dirname 키워드로 현재 파일명과 파일 경로 정보를 제공한다. study.js console.log(__filename) console.log(__dirname) __filename은 파일명까지 포함하여 나오고, __dirname은 파일의 위치까지만 나온다. + ES모듈에서는 __filename, __dirname을 사용할 수 없다. 대신 import.meta.url로 경로를 가져온다. filename.mjs console.log(import.meta.url) console.log('__filename은 에러 발생') console.log(__filename) path 내장 모듈 위의 __filename을 사용할 때 윈도가 아니라..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/WUrL8/btrWCicCI7q/okXbVVjqYMZjkpJXmFAss1/img.png)
REPL 자바스크립트를 컴파일하지 않고 콘솔을 통해 코드를 즉시 실행할 수 있었다. 노드도 비슷한 콘솔을 제공하는데 REPL(Read Eval Print Loop)이다. 윈도에서는 명령 프롬프트에서 node를 입력하고, VS Code에서는 터미널을 통해 실행 가능하다. 콘솔에서 node [자바스크립트 파일경로]로 실행한다. Ctrl + c 를 두번 누르거나 .exit를 입력하여 종료함. 노드는 브라우저의 자바스크립트와 다르게 코드를 모듈로 만들 수 있다. 모듈? 특정한 기능을 하는 함수나 변수들의 집합. 노드에서는 CommonJS 모듈 또는 ECMAScript 모듈을 사용한다. CommonJS 모듈 var.js const odd = '홀수입니다.' const even = '짝수입니다.' module.ex..