[DAY21] NodeJs 맛보기(2)

Jhey·2024년 11월 14일
0

JavsScript

목록 보기
18/18

0. 파일 시스템

//동기적으로 파일을 읽을 때
readFileSync

//비동기적으로 파일을 읽을때
readFile
  • 동기 메서드는 작업이 완료될 때까지 프로세스를 블로킹, 이로 인해 애플리케이션의 다른 작업이 잠시 멈출 수 있다.

  • 비동기 메서드는 작업을 백그라운드로 처리하며 콜백 또는 Promise로 결과를 받는다.


1. 버퍼 vs 스트림

1.1 버퍼

버퍼는 파일 내용을 한 번에 메모리에 올릴 때 유용하지만, 대용량 데이터에는 비효율적입니다.

❓ 버퍼시스템 기반으로 10MB를 처리한다면

  1. 메모리에 10MB 공간을 확보 하고 진행

  2. 10개면 100MB 공간을 확보

    ➿ 미리 확보를 해야하기 때문에 효율이 좋지 않을 수 있다.

버퍼 예제

fs.readFile('example.txt', (err, data) => {
  if (err) throw err;
  console.log('버퍼 데이터:', data); 
});

1.2 버퍼를 Base64로 인코딩하기

파일서버를 구축하기 어려울때는 base64 로 인코딩해서 이미지를 변경해서 업로드한다.

1.3 스트림

스트림은 데이터를 청크 단위로 처리하여 메모리 사용량을 줄인다.
읽기 스트림과 쓰기 스트림으로 나눈다.

❓ 스트림 시스템 기반으로 10MB를 처리한다면

  1. 10MB 를 1MB 단위로 처리하여 10번 보낸다.

    ➿ 단위로 처리하여 메모리 사용량을 줄일 수 있다.

스트림 예제

const readStream = fs.createReadStream('example.txt', 'utf8');
readStream.write("스트림 방식으로 쓰기 완료")
readStream.end("쓰기 완료")

const readStream = fs.createReadStream('example.txt', 'utf8');
const copyStream = fs.createWriteStream()
readStream.pipe(copyStream)

스트림 특징

  • 쪼개는 단위를 내가 정할 수 있음
const readStream = fs.createReadStream('example.txt', {
	encoding: 'utf8',
	highWaterMark: 16,});	// 16으로 쪼개서 표현해라

1.4 버퍼 vs 스트림

버퍼스트림
100mb 1개 100mb 필요100mb 100개 1mb 필요
100mb 10개 1000mb 필요100mb 100개 10mb 필요



2. MIME Types (=Media Types)

서버와 클라이언트 간의 데이터를 전송할 때 사용되는 데이터 형식을 정의,
클라이언트가 서버로부터 데이터를 받을 때, 해당 데이터가 어떤 종류인지 알려준다.

타입 종류를 볼 수 있는 곳 : media-types 정의

// 예시: Express.js 서버에서 MIME  타입 설정하기
const express = require('express');
const app = express();
const path = require('path');

1. pdf 설정하기
  app.get('/download-pdf', (req, res) => {
    const filePath = path.join(__dirname, 'sample.pdf');

    // Content-Type 헤더에 MIME  타입을 설정
    res.setHeader('Content-Type', 'application/pdf');

    // PDF 파일을 응답으로 보냄
    res.sendFile(filePath);
  });

2. text 설정하기
app.get('/plain-text', (req, res) => {
  // Content-Type 헤더에 텍스트 MIME  타입 설정
  res.setHeader('Content-Type', 'text/plain');
  res.send('This is a plain text file.');
});

3. 이벤트

특정 기능을 이벤트에 등록해서 한 번에 수행하고 싶을 때 사용

const EventEmitter = require("event")
const myEvent = new EventEmitter()

// 등록
// .on()
myEvent.on("greet", (name, age)=> {
	console.log(`안녕하소 ${name} 나이는 ${age}`)
})

// 호출
// .emit()
myEvent.emit("greet", "철수", 20)

//제거
const event
profile
천천히 가더라도 즐겁게 ☁

0개의 댓글

관련 채용 정보