𝗠𝗘𝗥𝗡 𝗦𝘁𝗮𝗰𝗸 𝗵𝗮𝗸𝘀𝘂𝗽 𝟯𝟵𝗶𝗹 𝗰𝗵𝗮
MERN 스택 학습 여정의 39일 차에 접어들었습니다.
어제는 GET과 POST 같은 HTTP 메서드를 공부했습니다. 오늘은 백엔드 작업에 집중했습니다. 서버가 데이터 스트림과 바디 파싱(body parsing)을 어떻게 처리하는지 학습했습니다.
사용자가 폼이나 파일을 전송할 때, 서버는 이를 한 번에 모두 받지 않습니다. 데이터는 작은 조각들로 나누어져 들어옵니다. 이 조각들을 청크(chunks)라고 부릅니다.
Node.js는 메모리를 절약하기 위해 스트림(streams)을 사용합니다. 대용량 파일을 서버 메모리에 즉시 로드하지 않고, 대신 데이터를 작은 단위로 나누어 처리합니다.
프로세스는 다음과 같이 작동합니다:
- 들어오는 POST 데이터는 Readable Stream 역할을 합니다.
- 서버는 작은 이진 데이터(binary data) 청크를 수신합니다.
- 데이터를 사용하기 전에 이 청크들을 모아야 합니다.
Node.js에서는 요청 바디(request body)를 즉시 받을 수 없습니다. 대신 특정 네트워크 이벤트를 감지해야 합니다:
req.on("data"): 새로운 청크가 도착할 때마다 이 이벤트가 발생합니다. 이 청크들을 배열에 저장합니다.req.on("end"): 스트림이 완료되면 이 이벤트가 발생합니다. 이는 모든 데이터가 도착했음을 알려줍니다.
Buffer.concat을 사용하여 조각들을 하나로 합친 다음, 이를 문자열로 변환합니다.
이 방식은 서버를 빠르고 효율적으로 유지해 줍니다. 또한 대용량 파일을 처리할 때 메모리 부족으로 인한 충돌을 방지합니다.
출처: https://dev.to/ali_hamza_589ec7b3eb6688d/day-39-of-learning-mern-stack-hkp