728x90
fs
파일 시스템에 접근하는 모듈

- 파일/폴더 생성, 삭제, 읽기, 쓰기 가능
- 웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있음
- 파일 읽기 예제(결과의 버퍼는 뒤에서 설명함)
fs Promise
콜백 방식 대신 프로미스 방식으로 사용 가능

- require(‘fs’).promises
- 사용하기 훨씬 더 편해서 프로미스 방식을 추천함
fs 파일 만들기

- fs.writeFile을 사용하게 되면, file을 쓸 수 있다.
동기 메서드와 비동기 메서드
노드는 대부분의 내장 모듈 메서드를 비동기 방식으로 처리


- 비동기는 코드의 순서와 실행 순서가 일치하지 않는 것을 의미
- 일부는 동기 방식으로 사용 가능
- 위 코드의 콜백 함수는 비동기로 동작하기 때문에 어떤 것을 먼저 출력할지 예측할 수 없다(운영체제만 실행 순서를 알고 있다)
- 콜백 함수를 비동기로 호출하기 때문에 백그라운드로 작업이 들어가고 테스트 큐로 옮겨질 때, 어떤 것이 먼저 옮겨지고 실행되는지는 알 수 없다
- 노드에서는 대부분 동기-블로킹 방식과 비동기-논 블로킹 방식임
- 동기와 비동기: 백그라운드 작업 완료 확인 여부
- 블로킹과 논 블로킹: 함수가 바로 return 되는지 여부
- 비동기 논블로킹이 효율적이지만, 순서가 보장되지 않는 단점이 있다.
동기 메서드 사용하기

- 코드는 깔끔하지만, 서버의 입장에서 생각하면, 놀고 있는 자원이 너무 많아지고, 성능이 좋지 않다.
비동기 콜백 메서드로 순서 유지하기

- 코드가 우측으로 너무 들어가는 현상 발생(콜백 헬)
- 동기와의 차이는 해당 asyncOrder 파일을 다른 곳에서 여러 번 호출할 때 있다(해당 파일을 실행할 때 비동기로 호출하기에 성능이 훨씬 빠르다)
프로미스 비동기 호출(콜백 헬 극복)

- 프로미스를 사용해, 콜백 헬에서 벗어날 수 있다.
- 아직 가독성은 그렇게 좋지 않다(then 지옥에서는 벗어나지 못했다)
Async/Await로 조금 더 깔끔한 코드 작성
const fs = require("fs").promises;
async function main() {
let data = await fs.readFile("./readme.txt");
console.log("1번", data.toString());
data = await fs.readFile("./readme.txt");
console.log("2번", data.toString());
data = await fs.readFile("./readme.txt");
console.log("3번", data.toString());
data = await fs.readFile("./readme.txt");
console.log("4번", data.toString());
}
- 동기적으로 호출하는 코드와 비슷해졌지만 비동기로 호출된다.
- 코드가 훨씬 간결해졌으며, 가독성이 좋아졌다
728x90
'Node > 노드 기능' 카테고리의 다른 글
| pipe와 스트림 메모리 효율 확인 (0) | 2022.09.04 |
|---|---|
| 버퍼와 스트림 이해하기 (0) | 2022.09.04 |
| child_process (0) | 2022.07.24 |
| worker_threads (0) | 2022.07.24 |
| crypto와 util (0) | 2022.07.24 |