본문 바로가기

개발/웹 개발

[백엔드] Node.js 모듈

모듈 : 코드 조각들을 패키지로 묶어 다른 코드에서 사용할 수 있는 독립적인 단위

주요 모듈

  1. fs (File System) - 파일 읽기/쓰기/삭제
  2. http - HTTP 서버 및 클라이언트 생성
  3. path - 파일 경로 처리
  4. os - 운영체제 관련 정보 제공
  5. events - 이벤트 기반 프로그래밍 지원
  6. crypto - 암호화 기능 제공
  7. stream - 스트림을 통한 데이터 처리
  8. url - URL 처리 및 파싱

File System 모듈 (fs)

fs(File System) 모듈은 파일을 읽고, 쓰고, 삭제하는 등의 파일 시스템 작업을 수행하는 모듈

fs 모듈의 메서드

  1. fs.readFile() - 파일 읽기
  2. fs.writeFile() - 파일 쓰기
  3. fs.appendFile() - 파일 내용 추가
  4. fs.unlink() - 파일 삭제
  5. fs.rename() - 파일 이름 변경
const fs = require('fs');

//파일 쓰기 코드
fs.writeFile('ex.txt', 'Hello, Node', (err) => {
    if (err) throw err;
    console.log('파일이 저장되었습니다!');
});

//파일 읽기 코드
fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log('파일 내용:', data);
});

HTTP 모듈 (http)

http 모듈은 클라이언트 요청을 처리하고 응답을 반환하는 기능을 제공

http 모듈 주요 메서드

  1. http.createServer() - HTTP 서버 생성
  2. server.listen(port, callback) - 지정된 포트에서 서버 실행
  3. req (request 객체) - 클라이언트 요청 정보
  4. res (response 객체) - 클라이언트에게 응답 전송
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!');
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

사용자 정의 모듈

user.js 파일 생성

const user = "홍길동";
module.exports = user; //user 변수를 외부에서 사용할 수 있도록 함

 

hello.js 파일 생성

const hello = (name) => {
    console.log(`${name}님, 안녕하세요`);
};
module.exports = hello; //hello 함수를 외부에서 사용할 수 있도록 함

 

app.js 파일에서 user.jshello.js 모듈을 가져와 사용하는 법

const user = require('./user');
const hello = require('./hello');

hello(user); 

//결과: 홍길동님, 안녕하세요

파일 시스템이나 HTTP 요청을 사용할 때 비동기 처리 방식이 많기 때문에 콜백 함수, 프로미스, async/await 등의 개념을 아는 것이 좋음

 

콜백함수 (Callback)

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
});

콜백 함수는 다른 함수의 인자로 전달되어 특정 작업이 완료된 후 실행되는 함수인데 비동기 작업(파일 읽기, HTTP 요청 등)이 끝난 후, 콜백 함수를 호출하여 결과를 처리함
콜백을 많이 사용하면 코드가 복잡해지고 콜백 지옥(Callback Hell) 문제가 발생 가능


프로미스 (Promise)

const fs = require('fs').promises;

fs.readFile('lsh.txt', 'utf8')
    .then((data) => console.log(data))
    .catch((err) => console.error(err));

프로미스는 비동기 작업의 성공 또는 실패를 처리할 수 있는 객체로 .then()을 사용하여 작업이 성공했을 때의 동작을 정의하고, .catch()를 이용해 에러를 처리할 수 있음
콜백 함수보다 가독성이 좋고, 체이닝 방식으로 여러 비동기 작업을 순차적으로 실행 가능


async/await

const readFile = async () => {
    try {
        const data = await fs.readFile('lsh.txt', 'utf8');
        console.log(data);
    } catch (err) {
        console.error(err);
    }
};

readFile();

async/await는 프로미스를 기반으로 한 최신 비동기 처리 방식으로 await 키워드를 사용하면 비동기 작업이 끝날 때까지 기다린 후 다음 코드를 실행할 수 있어 동기 코드처럼 쉽게 작성 가능
+ try-catch 문을 사용하여 에러 처리가 직관적으로 가능 함

'개발 > 웹 개발' 카테고리의 다른 글

개인프로젝트 [딥페이크 판독 서비스]  (5) 2024.11.01
풀스택 43일차  (0) 2024.09.30
풀스택 41 ~ 42 Java  (0) 2024.09.27
풀스택 38~40일차  (1) 2024.09.23
풀스택 37일차  (1) 2024.09.20