모듈 : 코드 조각들을 패키지로 묶어 다른 코드에서 사용할 수 있는 독립적인 단위
주요 모듈
- fs (File System) - 파일 읽기/쓰기/삭제
- http - HTTP 서버 및 클라이언트 생성
- path - 파일 경로 처리
- os - 운영체제 관련 정보 제공
- events - 이벤트 기반 프로그래밍 지원
- crypto - 암호화 기능 제공
- stream - 스트림을 통한 데이터 처리
- url - URL 처리 및 파싱
File System 모듈 (fs)
fs(File System) 모듈은 파일을 읽고, 쓰고, 삭제하는 등의 파일 시스템 작업을 수행하는 모듈
fs 모듈의 메서드
- fs.readFile() - 파일 읽기
- fs.writeFile() - 파일 쓰기
- fs.appendFile() - 파일 내용 추가
- fs.unlink() - 파일 삭제
- 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 모듈 주요 메서드
- http.createServer() - HTTP 서버 생성
- server.listen(port, callback) - 지정된 포트에서 서버 실행
- req (request 객체) - 클라이언트 요청 정보
- 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.js와 hello.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 |