반응형
🔍fs 모듈이란?
- 파일 시스템에 접근하는 모듈
- 파일 생성, 삭제, 읽기, 쓰기, 폴더도 만들거나 지울 수 있다.
🔍동기 메서드와 비동기 메서드
//readme.txt
저를 여러 번 읽어보세요.
- 비동기방식으로 파일 하나를 여러 번 읽어보기
실행 결과
- 비동기메서드들은 백그라운드에 해당 파일을 읽으라고만 요청하고 다음 작업으로 넘어감 => 따라서 파일 읽기 요청만 세 번 보내고 console.log('끝')을 찍는다.
- 수백 개의 I/O 요청이 들어와도 메인 스레드는 백그라운드에 요청 처리를 위임, 얼마든지 추가 요청을 받을 수 있음.
- 동기방식으로 순서대로 읽어보기
실행 결과
- readFile 대신 readFileSync 메서드 사용
- 동기방식의 경우 수백 개 이상의 요청이 들어올 때 성능에 문제가 생김(이전 작업이 완료되어야 다음 작업을 진행할 수 있기 때문에) ->백그라운드 작업 시 메인 스레드는 아무 것도 하지 못하고 대기해야 하는 비효율적인 상황이 발생
- 비동기방식으로 하되 순서는 유지하고 싶을 때 : readFile의 콜백에 다음 readFile을 넣으면 된다.
🔍버퍼와 스트림
파일을 읽거나 쓰는 방식에는 크게 두 가지 방식이 있다. => 버퍼, 스트림
- from(문자열) : 문자열을 버퍼로 바꾸는 기능
- toString(버퍼) : 버퍼를 다시 문자열로 바꾸는 기능
- concat(배열) : 배열 안에 든 버퍼들을 하나로 합침.
- alloc(바이트) : 빈 버퍼를 생성함.
실행 결과
//readme3.txt
저는 조금씩 조금씩 나눠서 전달됩니다. 나눠진 조각을 chunk라고 부릅니다.
- createReadStream으로 읽기 스트림 만들기 : 첫 번째 인수로 읽을 파일 경로, 두 번째 인수로 버퍼의 크기 설정 (옵션)
- readStream은 이벤트 리스너를 붙여서 사용(보통 data, end, error 이벤트 사용). -> 파일을 읽는 도중 에러 발생 시 error 이벤트 호출, 파일 읽기가 시작되면 data 이벤트 발생.
- 아래 코드에서는 미리 data 배열을 만들어놓고 들어오는 chunk들을 하나씩 push한 뒤 마지막에 Buffer.concat()으로 합쳐서 다시 문자열을 만듦.
실행 결과
- createWriteStream으로 쓰기 스트림 만들기
- finish이벤트 리스너를 붙여 데이터를 다 썼다면 end 메서드로 종료를 알리고, 이때 finish 이벤트가 발생함.
실행 결과
- pipe : createReadStream으로 파일을 읽고 그 스트림을 전달받아 createWriteStream으로 파일을 씀. (=파일 복사와 비슷)
실행 결과 : writeme3.txt가 생성됨(복사)
🔍기타 fs 메서드 알아보기
- 폴더 생성
- fs.access(경로, 옵션, 콜백) : 폴더나 파일에 접근할 수 있는지 체크함.
💡F_OK : 파일 존재 여부
💡R_OK : 읽기 권한 여부
💡W_OK : 쓰기 권한 여부
- fs.mkdir(경로, 콜백) : 폴더 생성 메서드
- fs.open(경로, 옵션, 콜백) : 파일의 아이디(fd 변수)를 가져오는 메서드. 파일이 업사면 파일을 생성한 뒤 그 아이디를 가져온다.
- fs.rename(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾸는 메서드.
실행 결과
- 폴더 내용 확인 및 삭제
- fs.readdir(경로, 콜백) : 폴더 안의 내용물 확인
- fs.unlink(경로, 콜백) : 파일 지우기
- fs.rmdir(경로, 콜백) : 폴더 지우기
실행 결과
- 복사
- 첫 번째 인수로 복사할 파일, 두 번째 인수로 복사될 경로, 세 번째 인수로 복사 후 실행될 콜백 함수
실행 결과
🔍스레드풀
- 비동기 메서드 사용 시 여러 요청이 들어와도 백그라운드에서 동시 처리가 가능한 이유는 바로 스레드풀이 있기 때문이다.
- 내부적으로 스레드풀을 사용하는 모듈은 crypto, zlib, dns.lookup 등이 있다.
실행 결과
- 실행할 때마다 시간과 순서가 달라진다.
- 스레드풀이 작업을 동시에 처리하므로 여덟 개의 작업 중 어느 것이 먼저 처리될지 알 수 없다.
- 기본적인 스레드풀의 개수가 4개이기 때문에 1~4 / 5~8이 그룹으로 묶여져 있고, 5~8이 1~4보다 시간이 더 소요되는 규칙을 발견할 수 있다.
반응형
'💻 my code archive > 📗Node.js' 카테고리의 다른 글
노드 공부 기록(8) - 시퀄라이즈 사용하기 (0) | 2022.04.27 |
---|---|
노드 공부 기록(7) - Node.js 자주 사용하는 미들웨어 (0) | 2022.04.22 |
노드 공부 기록(5) - 자주 사용하는 Node.js 내장 모듈 정리 (0) | 2022.04.17 |
노드 공부 기록(4) - Node.js 내장 객체 알아보기, global, console, 타이머, require, process (0) | 2022.04.14 |
노드 공부 기록(3) - 자바스크립트 문법, 구조분해 할당, 프로미스, async / await (0) | 2022.04.14 |