Node.js의 File System (fs) 모듈은 파일을 읽고, 쓰고, 삭제하는 등 파일 시스템과 상호작용할 수 있는 강력한 기능을 제공합니다. 이를 통해 서버에서 파일을 관리하고 데이터 저장소로 활용할 수 있습니다. 이 글에서는 Node.js fs 모듈을 사용하여 파일을 처리하는 다양한 방법을 소개하겠습니다.
Node.js File System 모듈이란?
Node.js의 File System (fs) 모듈은 파일과 디렉터리와 관련된 작업을 비동기 및 동기 방식으로 수행할 수 있도록 도와줍니다. 비동기 방식은 코드가 차단되지 않고 실행을 계속하는 반면, 동기 방식은 작업이 완료될 때까지 코드를 차단합니다.
require()
함수를 사용해 fs
모듈을 불러오면 파일을 생성, 읽기, 쓰기, 삭제하는 등의 작업을 수행할 수 있습니다.
fs 모듈 불러오기
const fs = require('fs'); // File System 모듈 불러오기
위 코드처럼 fs
모듈을 require()
함수로 불러오면, 파일 시스템과 상호작용할 수 있는 다양한 기능을 사용할 수 있습니다.
파일 읽기
비동기 방식 파일 읽기
fs.readFile()
메서드는 파일을 비동기 방식으로 읽습니다. 비동기 방식은 파일을 읽는 동안 다른 코드가 실행될 수 있도록 해주며, 작업이 완료되면 콜백 함수가 실행됩니다.
// 비동기 방식으로 파일 읽기
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error('파일을 읽는 중 오류 발생:', err);
return;
}
console.log('파일 내용:', data);
});
위 코드에서는 example.txt
파일을 비동기 방식으로 읽고, 그 내용을 출력합니다. utf8
인코딩을 지정해 파일을 읽으며, 오류가 발생할 경우 err
객체가 반환됩니다.
동기 방식 파일 읽기
fs.readFileSync()
메서드는 파일을 동기 방식으로 읽습니다. 동기 방식은 파일을 완전히 읽기 전까지 다른 코드가 실행되지 않으며, 파일 내용을 반환합니다.
// 동기 방식으로 파일 읽기
try {
const data = fs.readFileSync('example.txt', 'utf8');
console.log('파일 내용:', data);
} catch (err) {
console.error('파일을 읽는 중 오류 발생:', err);
}
위 코드에서는 동기 방식으로 파일을 읽고, 예외 처리를 통해 오류를 처리합니다.
파일 쓰기
비동기 방식 파일 쓰기
fs.writeFile()
메서드를 사용하면 파일을 비동기 방식으로 작성할 수 있습니다. 파일이 존재하지 않으면 새로 생성하고, 존재하면 덮어씁니다.
// 비동기 방식으로 파일 쓰기
fs.writeFile('example.txt', 'Hello, Node.js!', 'utf8', (err) => {
if (err) {
console.error('파일 쓰기 중 오류 발생:', err);
return;
}
console.log('파일이 성공적으로 작성되었습니다.');
});
위 코드에서는 example.txt
파일에 "Hello, Node.js!"라는 내용을 비동기 방식으로 작성하고, 완료 후 메시지를 출력합니다.
동기 방식 파일 쓰기
fs.writeFileSync()
메서드를 사용하면 파일을 동기 방식으로 작성할 수 있습니다. 이 방식은 파일 쓰기가 완료될 때까지 코드가 차단됩니다.
// 동기 방식으로 파일 쓰기
try {
fs.writeFileSync('example.txt', 'Hello, Node.js!', 'utf8');
console.log('파일이 성공적으로 작성되었습니다.');
} catch (err) {
console.error('파일 쓰기 중 오류 발생:', err);
}
동기 방식에서는 파일 쓰기가 완료되기 전까지 다음 코드가 실행되지 않으며, 오류는 try-catch
블록으로 처리됩니다.
파일 추가
fs.appendFile()
메서드를 사용하면 기존 파일에 내용을 추가할 수 있습니다. 파일이 존재하지 않으면 새로 생성됩니다.
// 파일에 내용 추가
fs.appendFile('example.txt', '\nThis is appended text.', (err) => {
if (err) {
console.error('파일 추가 중 오류 발생:', err);
return;
}
console.log('파일에 내용이 추가되었습니다.');
});
위 코드는 example.txt
파일의 끝에 "This is appended text."라는 내용을 추가합니다.
파일 삭제
fs.unlink()
메서드는 지정한 파일을 삭제하는 데 사용됩니다. 삭제 작업도 비동기 방식으로 수행됩니다.
// 파일 삭제
fs.unlink('example.txt', (err) => {
if (err) {
console.error('파일 삭제 중 오류 발생:', err);
return;
}
console.log('파일이 성공적으로 삭제되었습니다.');
});
위 코드에서는 example.txt
파일을 삭제하고, 완료 후 메시지를 출력합니다.
디렉터리 생성 및 삭제
fs.mkdir()
과 fs.rmdir()
메서드를 사용해 디렉터리를 생성하거나 삭제할 수 있습니다.
디렉터리 생성
// 디렉터리 생성
fs.mkdir('newDir', (err) => {
if (err) {
console.error('디렉터리 생성 중 오류 발생:', err);
return;
}
console.log('디렉터리가 성공적으로 생성되었습니다.');
});
디렉터리 삭제
// 디렉터리 삭제
fs.rmdir('newDir', (err) => {
if (err) {
console.error('디렉터리 삭제 중 오류 발생:', err);
return;
}
console.log('디렉터리가 성공적으로 삭제되었습니다.');
});
위 코드는 newDir
이라는 디렉터리를 생성하고 삭제하는 방법을 보여줍니다.
파일 정보 확인
fs.stat()
메서드를 사용하면 파일의 크기, 생성 날짜, 수정 날짜 등의 정보를 확인할 수 있습니다.
// 파일 정보 확인
fs.stat('example.txt', (err, stats) => {
if (err) {
console.error('파일 정보 확인 중 오류 발생:', err);
return;
}
console.log('파일 정보:', stats);
});
위 코드에서는 example.txt
파일의 정보를 출력합니다. stats
객체에는 파일의 크기, 생성일, 수정일 등의 정보가 포함됩니다.
파일 및 디렉터리 목록 읽기
fs.readdir()
메서드는 지정한 디렉터리의 파일 및 디렉터리 목록을 읽습니다.
// 디렉터리 목록 읽기
fs.readdir('.', (err, files) => {
if (err) {
console.error('디렉터리 읽기 중 오류 발생:', err);
return;
}
console.log('디렉터리 목록:', files);
});
위 코드에서는 현재 디렉터리(.
)의 모든 파일과 디렉터리 목록을 읽어 출력합니다.
결론
Node.js의 fs 모듈은 파일과 디렉터리를 관리하는 데 매우 유용한 도구입니다. 파일을 읽고, 쓰고, 삭제하는 기본적인 작업부터 파일 정보 확인, 디렉터리 생성 및 삭제 등 다양한 파일 시스템 작업을 지원합니다. 비동기와 동기 방식 중 프로젝트 요구 사항에 맞는 방식을 선택하여 효율적인 파일 처리를 구현해보세요.
댓글 쓰기