Node/노드 기능

pipe와 스트림 메모리 효율 확인

webmaster 2022. 9. 4. 23:02
728x90

스트림 사이에 pipe 사용하기

  • pipe로 여러 개의 스트림을 이을 수 있다.
    • 스트림 사이 사이에 다른 연산을 할 수 있다.
  • zlib으로 압축을 할 수 있다.

Stream VS Buffer 비교하기

큰 파일 생성
Buffer - Stream 비교

  • Buffer와 Stream을 비교하였을 때 메모리 사용량을 비교해 보면 많은 차이가 나는 것을 확인할 수 있다.
  • Buffer 방식은 사용자가 몇명만 오버되더라도 많은 자원을 요구하기에 금방 서버가 오류가 발생할 것이다.
  • Stream 방식은 비교적 작은 용량만 사용해 데이터를 전달받아 처리하기 때문에 접속자가 많아도 문제없이 파일 전송을 할 수 있다
  • 따라서 Stream 방식을 파일 전송을 지향한다.

기타 fs 메서드

  • fs.access(경로, 옵션, 콜백): 폴더나 파일에 접근할 수 있는지를 체크합니다. 두 번째 인자로 상수들을 넣었습니다. F_OK는 파일 존재 여부, R_OK는 읽기 권한 여부, W_OK는 쓰기 권한 여부를 체크합니다. 파일/폴더나 권한이 없다면 에러가 발생하는데, 파일/폴더가 없을 때의 에러 코드는 ENOENT입니다.
  • fs.mkdir(경로, 콜백): 폴더를 만드는 메서드입니다. 이미 폴더가 있다면 에러가 발생하므로 먼저 access() 메서드를 호출해서 확인하는 것이 중요합니다.
  • fs.open(경로, 옵션, 콜백): 파일의 아이디(fd 변수)를 가져오는 메서드입니다. 파일이 없다면 파일을 생성한 뒤 그 아이디를 가져옵니다. 가져온 아이디를 사용해 fs.read()나 fs.write()로 읽거나 쓸 수 있습니다. 두 번째 인자로 어떤 동작을 할 것인지 설정할 수 있습니다. 쓰려면 w, 읽으려면 r, 기존 파일에 추가하려면 a입니다. 예제에서는 w로 설정했으므로 파일이 없을 때 새로 만들 수 있었습니다. r이었다면 에러가 발생하였을 것입니다.
  • fs.rename(기존 경로, 새 경로, 콜백): 파일의 이름을 바꾸는 메서드입니다. 기존 파일 위치와 새로운 파일 위치를 적어주면 됩니다. 반드시 같은 폴더를 지정할 필요는 없으므로 잘라내기 같은 기능을 할 수도 있습니다.

폴더 내용 확인 및 삭제

  • fs.readdir(경로, 콜백): 폴더 안의 내용물을 확인할 수 있습니다. 배열 안에 내부 파일과 폴더명이 나옵니다.
  • fs.unlink(경로, 콜백): 파일을 지울 수 있습니다. 파일이 없다면 에러가 발생하므로 먼저 파일이 있는지를 꼭 확인해야 합니다.
  • fs.rmdir(경로, 콜백): 폴더를 지울 수 있습니다. 폴더 안에 파일이 있다면 에러가 발생하므로 먼저 내부 파일을 모두 지우고 호출해야 합니다 

파일을 복사하는 법

파일을 감시하는 법

  • copyFile 함수로 파일을 서로 복사할 수 있다
  • watch 함수로 해당 파일을 이벤트를 받을 수 있다
  • existsSync(존재 여부 찾기), statSync( 파일 상태 체크-폴더인지 파일인지 등)

 

728x90

'Node > 노드 기능' 카테고리의 다른 글

예외 처리하기  (0) 2022.09.04
스레드풀과 커스텀 이벤트  (0) 2022.09.04
버퍼와 스트림 이해하기  (0) 2022.09.04
파일 시스템 사용하기  (0) 2022.09.04
child_process  (0) 2022.07.24