global
__filename : 현재파일 경로 + 이름
__dirname : 현재폴더 경로 + 이름
process : 현재 작동하는 nodeJS의 프로세스에 대한 정보 (ex. 버전, 업타임...)
process.nextTick() : 가장 우선적으로 실행되는 프로세스의 비동기 함수
process.exit() : 프로세스를 종료시키는 함수
nodeJS가 실행되는 운영체제의 환경을 확인할 수 있음.
웹브라우저에서는 사용이 불가 -> 운영체제에 접근할 수 없다.
인터넷의 주로를 쉽게 조작할 수 있음 -> 링크의 분해가 가능
url.parse(adress) : 주소를 분해함
url.foramt(object) : 주소를 분해하나 WHATWG
노드 url의 검색 부분
parse : query부분을 객체로 분해
stringify : 분해한 객체를 문자열로 조립
암호화시켜주는 모듈
createHash : 단방향 암호화로, 찾기만 가능하고 string으로 되돌릴 수는 없음
-> crypto.createHash(알고리즘).update(비밀번호).digest(인코딩) : 비밀번호를 해시화하여 되돌릴 수 없게 함 (암호화)
createCipheriv(algorithm, key, iv) : 양방향 암호화. 복호화가 가능하다.
파일 경로를 확인할 수 있으며, promise를 지원하여 비동기적으로 사용이 가능 (require('fs').promise;)
writeFile(filename, 내용) : 해당 위치에 파일이 없으면 만들어서 쓰기 사용
readFile(filename) : 해당 위치의 파일을 읽어들임
(promise를 사용하지 않으면 콜백함수를 사용해야 함)
-> 순서를 정하려면 then으로 순서를 보장시킬 수 있음.
동기/비동기, 블로킹/논블로킹
-동기와 블로킹, 비동기와 논블로킹이 서로 비슷한 맥락
-동기와 논블로킹의 조합 : 서로 논블로킹으로 처리는 했지만 다음 순서를 위해 동기로 기다리는 것
비동기 함수는 버퍼로 리턴된다. (데이터를 버퍼에 청크 형태로 쌓아두고 다차면 전송)
Buffer.String(buffer) : 버퍼를 문자열로 바꾸는 방법
Buffer.from(str) : 문자열을 버퍼로 바꾸기 위해 필요하다.(백틱으로 포멧하면 버퍼가 아니라 문자열로 나온다)
Buffer.alloc(num) : num 길이만큼의 버퍼를 생성한다.
Buffer.length() : 버퍼의 길이를 리턴한다.
데이터를 버퍼에 쌓아두지 않고 계속 전달해줌.
createReadStream(adress, {highWaterMark : n}) : n바이트씩 잘라서 stream에 입력
readStream.on("data, end, err", callback) : 스트림에서 데이터를 읽을때마다 data를 실행, 에러가 나면 err 실행, 끝나면 end를 실행. 각각은 callback를 실행하게 된다.
-> callback의 argument는 chunk이다.
createWriteStream(adress) : 파일에 stream 형식으로 쓰기 작업을 함.
writeStream.write(), end() : 쓰기와 끝내기
writeStream.on('finish', callback) : 쓰기가 끝나면 callback 호출
fs.access(adress, F_OK | W_OK | R_OK) : 읽기, 쓰기, 접근에 대해 성공 여부를 결정
-> 이하의 함수에 대해 .then으로 연결시킴
fs.mkdir(adress) : adress에 폴더를 추가
fs.open(adress, 'w,r...') : w는 쓰기, r는 읽기 형식으로 주소의 파일을 열음
fs,rename(adress, new_adress) : 새것으로 교체
error : ENONET 는 파일의 경로가 잘못됨, ENOFILE은 파일이 잘못됨
fs.readdir : 폴더의 내용 확인
fs.unlink : 파일 삭제
fs.rmdir : 폴더 삭제
-> 프로미스는 체인을 걸어 사용하게 되면 then 내부에서 return을 꼭 해주어야 한다.
fs.copyfile(= pipe) : 파일 복사