8강. 파일 읽기와 쓰기 (fs 모듈 심화)
이번 강의에서는 Node.js의 fs(File System) 모듈을 활용하여 파일과 폴더를 다루는 방법을 배웁니다.
목표: 파일을 생성하고, 읽고, 수정하고, 삭제하며 동기(Sync)와 비동기(Async)의 차이를 이해합니다.
1. fs(File System)란?
fs는 파일과 폴더를 관리하는 Node.js의 내장 모듈입니다.
const fs = require("fs");
할 수 있는 작업
파일 생성
파일 읽기
파일 수정
파일 삭제
폴더 생성
폴더 삭제
JSON 파일 관리
2. 동기(Sync)와 비동기(Async)
Node.js에는 두 가지 방식이 있습니다.
동기(Synchronous)
작업이 끝날 때까지 기다립니다.
파일 읽기
↓
완료
↓
다음 코드 실행
비동기(Asynchronous)
기다리지 않고 다음 코드를 실행합니다.
파일 읽기 시작
↓
다음 코드 실행
↓
읽기 완료
Node.js는 비동기 방식을 많이 사용합니다.
3. writeFileSync()
파일 생성
const fs = require("fs");
fs.writeFileSync("hello.txt", "안녕하세요.");
실행 후
project
│
├── hello.txt
└── index.js
4. writeFile()
비동기 방식입니다.
const fs = require("fs");
fs.writeFile("hello.txt", "Node.js", (err) => {
if(err){
console.log(err);
return;
}
console.log("저장 완료");
});
5. readFileSync()
동기 방식
const fs = require("fs");
const data = fs.readFileSync("hello.txt", "utf8");
console.log(data);
결과
Node.js
6. readFile()
비동기 방식
const fs = require("fs");
fs.readFile("hello.txt", "utf8", (err, data)=>{
if(err){
console.log(err);
return;
}
console.log(data);
});
7. appendFileSync()
내용 추가
const fs = require("fs");
fs.appendFileSync("hello.txt","\nExpress");
결과
Node.js
Express
8. unlinkSync()
파일 삭제
const fs = require("fs");
fs.unlinkSync("hello.txt");
9. existsSync()
파일 존재 여부 확인
const fs = require("fs");
if(fs.existsSync("hello.txt")){
console.log("파일 있음");
}else{
console.log("파일 없음");
}
10. mkdirSync()
폴더 생성
const fs = require("fs");
fs.mkdirSync("images");
결과
project
│
├── images
├── index.js
└── package.json
11. readdirSync()
폴더 안 목록 보기
const fs = require("fs");
const files = fs.readdirSync("./");
console.log(files);
예시
[
'images',
'index.js',
'package.json'
]
12. rmdirSync()
폴더 삭제
const fs = require("fs");
fs.rmdirSync("images");
참고: 최신 Node.js에서는 fs.rmSync() 사용을 권장합니다.
fs.rmSync("images", { recursive: true, force: true });
13. JSON 저장하기
객체 만들기
const user = {
name:"커사맨",
age:50
};
JSON 저장
const fs = require("fs");
fs.writeFileSync(
"user.json",
JSON.stringify(user)
);
14. JSON 읽기
const fs = require("fs");
const data = fs.readFileSync("user.json","utf8");
const user = JSON.parse(data);
console.log(user.name);
console.log(user.age);
15. 실무 예제
회원 정보 저장
const fs = require("fs");
const member = {
id:"admin",
password:"1234"
};
fs.writeFileSync(
"member.json",
JSON.stringify(member,null,2)
);
생성 결과
{
"id": "admin",
"password": "1234"
}
16. 실습 1
memo.txt 생성
const fs = require("fs");
fs.writeFileSync("memo.txt","오늘 Node.js 공부");
17. 실습 2
memo.txt 읽기
const fs = require("fs");
const memo = fs.readFileSync("memo.txt","utf8");
console.log(memo);
18. 실습 3
memo.txt에 내용 추가
const fs = require("fs");
fs.appendFileSync("memo.txt","\nExpress 공부");
19. 실습 4
사용자 정보를 JSON으로 저장
const fs = require("fs");
const user = {
name:"홍길동",
age:30
};
fs.writeFileSync(
"user.json",
JSON.stringify(user,null,2)
);
20. 이번 강의 핵심 정리
함수 설명
writeFileSync() 파일 생성(동기)
writeFile() 파일 생성(비동기)
readFileSync() 파일 읽기(동기)
readFile() 파일 읽기(비동기)
appendFileSync() 내용 추가
unlinkSync() 파일 삭제
existsSync() 파일 존재 확인
mkdirSync() 폴더 생성
readdirSync() 폴더 목록 보기
rmSync() 폴더 삭제
JSON.stringify() 객체 → JSON 문자열
JSON.parse() JSON 문자열 → 객체
실무 팁
실무에서는 데이터베이스를 사용하지만, 작은 프로젝트나 설정 파일은 JSON으로 관리하는 경우가 많습니다.
예시
project
│
├── config.json
├── users.json
├── settings.json
├── package.json
└── index.js
또한, 새로운 코드에서는 비동기 방식(readFile, writeFile)이나 fs/promises를 사용하는 것이 일반적입니다. 동기 방식(Sync)은 학습과 간단한 스크립트에서는 이해하기 쉽지만, 서버에서는 요청을 오래 멈추게 할 수 있기 때문입니다.
실습 미션
간단한 메모장 프로그램을 만들어 보세요.
기능
memo.txt 생성
메모 추가
메모 읽기
메모 삭제
메모 파일 존재 여부 확인
이 미션을 완료하면 fs 모듈의 핵심 기능을 대부분 익히게 됩니다.
이번 강의에서는 Node.js의 fs(File System) 모듈을 활용하여 파일과 폴더를 다루는 방법을 배웁니다.
목표: 파일을 생성하고, 읽고, 수정하고, 삭제하며 동기(Sync)와 비동기(Async)의 차이를 이해합니다.
1. fs(File System)란?
fs는 파일과 폴더를 관리하는 Node.js의 내장 모듈입니다.
const fs = require("fs");
할 수 있는 작업
파일 생성
파일 읽기
파일 수정
파일 삭제
폴더 생성
폴더 삭제
JSON 파일 관리
2. 동기(Sync)와 비동기(Async)
Node.js에는 두 가지 방식이 있습니다.
동기(Synchronous)
작업이 끝날 때까지 기다립니다.
파일 읽기
↓
완료
↓
다음 코드 실행
비동기(Asynchronous)
기다리지 않고 다음 코드를 실행합니다.
파일 읽기 시작
↓
다음 코드 실행
↓
읽기 완료
Node.js는 비동기 방식을 많이 사용합니다.
3. writeFileSync()
파일 생성
const fs = require("fs");
fs.writeFileSync("hello.txt", "안녕하세요.");
실행 후
project
│
├── hello.txt
└── index.js
4. writeFile()
비동기 방식입니다.
const fs = require("fs");
fs.writeFile("hello.txt", "Node.js", (err) => {
if(err){
console.log(err);
return;
}
console.log("저장 완료");
});
5. readFileSync()
동기 방식
const fs = require("fs");
const data = fs.readFileSync("hello.txt", "utf8");
console.log(data);
결과
Node.js
6. readFile()
비동기 방식
const fs = require("fs");
fs.readFile("hello.txt", "utf8", (err, data)=>{
if(err){
console.log(err);
return;
}
console.log(data);
});
7. appendFileSync()
내용 추가
const fs = require("fs");
fs.appendFileSync("hello.txt","\nExpress");
결과
Node.js
Express
8. unlinkSync()
파일 삭제
const fs = require("fs");
fs.unlinkSync("hello.txt");
9. existsSync()
파일 존재 여부 확인
const fs = require("fs");
if(fs.existsSync("hello.txt")){
console.log("파일 있음");
}else{
console.log("파일 없음");
}
10. mkdirSync()
폴더 생성
const fs = require("fs");
fs.mkdirSync("images");
결과
project
│
├── images
├── index.js
└── package.json
11. readdirSync()
폴더 안 목록 보기
const fs = require("fs");
const files = fs.readdirSync("./");
console.log(files);
예시
[
'images',
'index.js',
'package.json'
]
12. rmdirSync()
폴더 삭제
const fs = require("fs");
fs.rmdirSync("images");
참고: 최신 Node.js에서는 fs.rmSync() 사용을 권장합니다.
fs.rmSync("images", { recursive: true, force: true });
13. JSON 저장하기
객체 만들기
const user = {
name:"커사맨",
age:50
};
JSON 저장
const fs = require("fs");
fs.writeFileSync(
"user.json",
JSON.stringify(user)
);
14. JSON 읽기
const fs = require("fs");
const data = fs.readFileSync("user.json","utf8");
const user = JSON.parse(data);
console.log(user.name);
console.log(user.age);
15. 실무 예제
회원 정보 저장
const fs = require("fs");
const member = {
id:"admin",
password:"1234"
};
fs.writeFileSync(
"member.json",
JSON.stringify(member,null,2)
);
생성 결과
{
"id": "admin",
"password": "1234"
}
16. 실습 1
memo.txt 생성
const fs = require("fs");
fs.writeFileSync("memo.txt","오늘 Node.js 공부");
17. 실습 2
memo.txt 읽기
const fs = require("fs");
const memo = fs.readFileSync("memo.txt","utf8");
console.log(memo);
18. 실습 3
memo.txt에 내용 추가
const fs = require("fs");
fs.appendFileSync("memo.txt","\nExpress 공부");
19. 실습 4
사용자 정보를 JSON으로 저장
const fs = require("fs");
const user = {
name:"홍길동",
age:30
};
fs.writeFileSync(
"user.json",
JSON.stringify(user,null,2)
);
20. 이번 강의 핵심 정리
함수 설명
writeFileSync() 파일 생성(동기)
writeFile() 파일 생성(비동기)
readFileSync() 파일 읽기(동기)
readFile() 파일 읽기(비동기)
appendFileSync() 내용 추가
unlinkSync() 파일 삭제
existsSync() 파일 존재 확인
mkdirSync() 폴더 생성
readdirSync() 폴더 목록 보기
rmSync() 폴더 삭제
JSON.stringify() 객체 → JSON 문자열
JSON.parse() JSON 문자열 → 객체
실무 팁
실무에서는 데이터베이스를 사용하지만, 작은 프로젝트나 설정 파일은 JSON으로 관리하는 경우가 많습니다.
예시
project
│
├── config.json
├── users.json
├── settings.json
├── package.json
└── index.js
또한, 새로운 코드에서는 비동기 방식(readFile, writeFile)이나 fs/promises를 사용하는 것이 일반적입니다. 동기 방식(Sync)은 학습과 간단한 스크립트에서는 이해하기 쉽지만, 서버에서는 요청을 오래 멈추게 할 수 있기 때문입니다.
실습 미션
간단한 메모장 프로그램을 만들어 보세요.
기능
memo.txt 생성
메모 추가
메모 읽기
메모 삭제
메모 파일 존재 여부 확인
이 미션을 완료하면 fs 모듈의 핵심 기능을 대부분 익히게 됩니다.
#8강. 파일 읽기와 쓰기 (fs 모듈 심화)