참고글

Node 웹서버 클라이언트에게 스트림을 이용하여 파일 응답하기
웹서버는 클라이언트에게 웹페이지(html)를 응답하기도 하지만 동영상이나, 이미지, 워드문서 같은 미디어 파일을 응답하기도 합니다.
예를 들어 NodeJS로 게시판을 만든 경우에 회원이 올린 게시글의 첨부파일이 있을 수 있습니다.

이 때 다른 회원이 다시 해당 게시글에서 첨부파일을 내려받는다면 node 웹서버는 해당 첨부파일을 서버의 저장소에서 찾아 출력 스트림을 통해 보내주어야 할 것입니다. 그러나 고용량 첨부파일을 동시에 여러 회원이 다운로드 받는다면 모든 첨부파일 바이너리 데이터를 웹서버에 로딩한 후에 각각의 출력스트림을 통해 보내주어야 하는데 이는 웹서버 입장에서는 상당한 자원을 소모하는 것입니다.

NodeJS 스트림을 이용한 출력
nodeJS 에서는 첨부파일을 모두 로딩하지 않고 한 덩어리씩 읽은 후 데이터를 곧바로 출력 스트림을 통해 내보낼 수 있는 방법을 제공하고 있습니다.
소스는 매우 쉽고 직관적인데 클라이언트가 요청을 하면 입력스트림으로 flower.png 이미지 파일을 읽어 들인 후 응답 객체인  res를 pipe로 연결하여 내보내는 것입니다.
그러나 주의할 점은 다음과 같이 스트림을 파이프로 연결하여 출력하는 경우에는 HTTP 응답 메시지의 헤더를 제어할 수 없습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var http = require('http');
var fs = require('fs');
 
 
var server = http.createServer();
 
 
server.listen(7070function() {
    console.log('웹서버가 시작됨');
});
 
 
server.on('request'function(req, res) {
 
 
    var filename = 'flower.png';
    var file = fs.createReadStream(filename, {flags: 'r'} );
 
    file.pipe(res);
      
});
cs





테스트 결과


블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!