더북(TheBook)

Buffer 객체는 여러 가지 메서드를 제공합니다.

from(문자열): 문자열을 버퍼로 바꿀 수 있습니다. length 속성은 버퍼의 크기를 알립니다. 바이트 단위입니다.

toString(버퍼): 버퍼를 다시 문자열로 바꿀 수 있습니다. 이때 base64hex를 인수로 넣으면 해당 인코딩으로도 변환 가능합니다.

concat(배열): 배열 안에 든 버퍼들을 하나로 합칩니다.

alloc(바이트): 빈 버퍼를 생성합니다. 바이트를 인수로 넣으면 해당 크기의 버퍼가 생성됩니다.

readFile 방식의 버퍼가 편리하기는 하지만 문제점도 있습니다. 만약 용량이 100MB인 파일이 있으면, 읽을 때 메모리에 100MB의 버퍼를 만들어야 합니다. 이 작업을 동시에 열 개만 해도 1GB에 달하는 메모리가 사용됩니다. 특히 서버처럼 몇 명이 이용할지 모르는 환경에서는 메모리 문제가 발생할 수 있습니다.

또한, 모든 내용을 버퍼에 다 쓴 후에야 다음 동작으로 넘어가므로 파일 읽기, 압축, 파일 쓰기 등의 조작을 연달아 할 때 매번 전체 용량을 버퍼로 처리해야 다음 단계로 넘어갈 수 있습니다.

그래서 버퍼의 크기를 작게 만들고 여러 번에 걸쳐 나눠 보내는 방식이 등장했습니다. 예를 들면 버퍼 1MB를 만든 후 100MB 파일을 100번에 걸쳐 나눠 보내는 것입니다. 이로써 메모리 1MB로 100MB 파일을 전송할 수 있습니다. 이를 편리하게 만든 것이 스트림입니다.

▲ 그림 3-13 스트림

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.