Node.js에서 JSON 파일 저장 방법으로는 fs(File System) 모듈을 사용하여 데이터를 파일에 쓰면 됩니다.
fs 모듈은 파일을 읽고 쓰는 기능을 제공합니다.
여기서 writeFile() 메소드를 사용하면 데이터를 파일에 쓸 수 있습니다.
Table of Contents
JSON
JSON(JavaScript Object Notation)이란 가볍게 사용하도록 고안된 데이터 교환 포맷입니다.
사람과 기계 모두 읽고 쓰기 쉬운 텍스트 형식으로 웹 애플리케이션에서 클라이언트와 서버 간에 데이터를 주고받을 때 많이 사용됩니다.
JSON은 자바스크립트 객체 표기법을 기반으로 하지만, 다양한 프로그래밍 언어에서 사용 가능합니다.
JSON 파일 저장
const fs = require('fs'); // fs 모듈을 가져옵니다.
const data = {
name: "홍길동",
age: 30,
city: "서울"
};
// JSON 데이터를 문자열로 변환
const jsonData = JSON.stringify(data, null, 2);
// 파일에 JSON 데이터를 씁니다.
fs.writeFile('data.json', jsonData, (err) => {
if (err) {
console.log('파일 저장 중 오류 발생:', err);
} else {
console.log('파일이 성공적으로 저장되었습니다.');
}
});
파일에 JSON 데이터를 쓰기 위해 먼저 fs 모듈을 require 구문을 통해 불러와야 합니다.
그 다음 JSON.stringify() 메소드를 통해 data라는 변수에 저장된 JSON 객체를 문자열로 변환해야 합니다.
문자열로 변환된 데이터는 fs.writeFile() 메소드를 통해 파일에 저장할 수 있습니다.
writeFile() 메소드에는 먼전 파일의 경로를 전달하고 다음으로 파일에 쓸 문자열을 전달합니다.
마지막으로 콜백함수를 전달해 JSON 파일 저장 결과를 확인할 수 있습니다.
파일 내용 확인
위의 코드를 실행하면 data.json 파일이 생성되고, 내용을 확인해보면 다음과 같습니다:
{
"name": "홍길동",
"age": 30,
"city": "서울"
}
파일의 내용으로 JSON 포맷의 문자열 데이터가 있는 것을 확인할 수 있습니다.
동기 방식으로 JSON 파일 저장
비동기 방식 대신 동기적으로 파일을 저장하고 싶으면 fs.writeFileSync() 메소드를 사용할 수 있습니다.
이는 writeFile() 메소드와는 다르게 데이터 쓰기 결과를 콜백 함수가 아닌 리턴 값으로 전달합니다.
const fs = require('fs');
const data = {
name: "홍길동",
age: 30,
city: "서울"
};
const jsonData = JSON.stringify(data, null, 2);
// 동기적으로 파일에 JSON 데이터를 씁니다.
try {
fs.writeFileSync('data.json', jsonData);
console.log('파일이 성공적으로 저장되었습니다.');
} catch (err) {
console.log('파일 저장 중 오류 발생:', err);
}
비동기 방식과의 주요한 차이점 다음과 같습니다:
- writeFileSync() 메소드는 동기 방식으로 파일을 저장하며, 다음 줄의 코드는 이 메소드가 끝날 때 까지 기다리게 됩니다.
- writeFile() 메소드는 비동기 방식이기 때문에 다음 줄의 코드가 바로 실행되고 동시에 파일 쓰기 작업을 진행합니다.
이러한 차이에 의해 다음 코드를 바로 실행할지 기다릴지가 결정되며 각각은 목적이 확연히 다르게 쓰입니다.
비동기 vs 동기 JSON 파일 저장
비동기 방식은 비교적 시간이 오래 걸리는 파일 쓰기 작업이 진행되는 동안 다른 코드를 바로 실행할 수 있는 장점을 가지고 있습니다.
파일 쓰기가 끝난다면 그 순간 관련 코드를 실행하기 때문에 효율적인 작업을 할 수 있습니다.
하지만 이런 콜백 함수의 호출이 중첩된다면 코드가 읽기 어려워지고 유지관리가 힘들어 질 수 있습니다.
동기 방식은 코드의 순서대로 작업을 진행하는 방법입니다.
이번 예제와 같은 경우 파일 쓰기가 끝나야 다음 코드를 수행합니다.
이러면 파일을 쓰는 동안 아무 작업도 진행할 수 없기 때문에 비효율적이지만 코드가 간결해서 읽기 쉬워집니다.
예외 처리
JSON 파일 저장 작업 중에는 오류가 발생할 수 있습니다.
그렇기 때문에 항상 오류 처리를 해주는 것이 좋습니다.
fs.writeFile()이나 fs.writeFileSync()를 사용할 때 콜백 함수의 인자를 확인하거나, try/catch 구문을 사용해 오류를 처리합니다.