Node/노드 기능

버퍼와 스트림 이해하기

webmaster 2022. 9. 4. 18:09
728x90

버퍼: 일정한 크기로 모아두는 데이터

  • 일정한 크기가 되면 한 번에 처리
  • 버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업

스트림: 데이터의 흐름

  • 일정한 크기로 나눠서 여러 번에 걸쳐서 처리
  • 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달
  • 스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업

버퍼와 스트림

버퍼 사용하기( 스트림이 더 효율적이다)

node에서는 Buffer객체를 사용

  • from(문자열): 문자열을 버퍼로 바꿀 수 있습니다. length 속성은 버퍼의 크기를 알려줍니다. 바이트 단위입니다.
  • toString(버퍼): 버퍼를 다시 문자열로 바꿀 수 있습니다. 이때 base64나 hex를 인자로 넣으면 해당 인코딩으로도 변환할 수 있습니다.
  • concat(배열): 배열 안에 든 버퍼들을 하나로 합칩니다.
  • alloc(바이트): 빈 버퍼를 생성합니다. 바이트를 인자로 지정해주면 해당 크기의 버퍼가 생성됩니다.
  • 버퍼는 크기가 정해져 있고, 해당 크기가 가득 차면 보내는 방식으로 동작한다.

스트림 방식

  • createReadStream에 인자로 파일 경로와 옵션 객체 전달
  • highWaterMark 옵션은 버퍼의 크기(바이트 단위, 기본값 64KB)
  • data(chunk 전달), end(전달 완료), error(에러 발생) 이벤트 리스너와 같이 사용
  • 스트림 같은 경우 대용량 데이터를 쪼개서 전달하기 때문에 서버에는 많은 양을 메모리를 가지고 있을 필요가 없다.

파일 쓰기 스트림 방식

  • createReadStream에 인자로 파일 경로 전달
  • write로 chunk 입력, end로 스트림 종료
  • 스트림 종료 시 finish 이벤트 발생
  • 파일을 쓸때도, 한 번에 많은 보낼 필요 없이 나눠서 보내면 된다.
728x90

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

스레드풀과 커스텀 이벤트  (0) 2022.09.04
pipe와 스트림 메모리 효율 확인  (0) 2022.09.04
파일 시스템 사용하기  (0) 2022.09.04
child_process  (0) 2022.07.24
worker_threads  (0) 2022.07.24