패스트캠퍼스 작심 30일 챌린지 16일차.
오늘은 게시판 객체를 JSON 파일에 저장시켜서 데이터베이스처럼 사용하기!
추석 당일이라 강의 하나만 수강했다.
지금까지 작성한 소스코드는 In memory를 활용하여 서버가 동작하는 동안에만 사용할 수 있었다.
만약 사용자가 게시판을 추가했는데 소스코드를 수정하였다면, 사용자가 추가한 데이터가 유지될까?
지금은 소스코드를 수정하면 서버도 재시작되고, 그 과정에서 In Memory에 등록한 데이터도 초기화 된다. 즉, 사용자가 입력한 데이터는 유지되지 않는다.
이러한 문제를 해결하기 위해 Database.json이라는 파일을 만들어 게시판 정보를 저장할 수 있도록 기능을 개선하였다.
먼저 이전 과정에서 작성한 게시판 객체를 JSON 파일로 이동시킨다.
{
"boards" : [
{
"id": "my_first_board",
"title": "My first board.",
"content": "Hello."
},{
"id": "my_first_board",
"title": "My first board.",
"content": "Hello."
}
]
}
그리고 api.js 파일에 위의 객체를 읽을 수 있도록 다음 코드를 작성한다.
const fs = require('fs')
const DB_JSON_FILE = 'database.json'
const DATA_ENCODING = 'utf-8'
/** @returns {Promise<Board[]>} */
async function getBoards() {
const json = await fs.promises.readFile(DB_JSON_FILE, DATA_ENCODING)
return JSON.parse(json).boards
}
위 코드에서 보는 것과 같이 파일을 읽을 수 있도록 File System 모듈을 호출하고,
await과 promises를 활용하여 비동기적으로 파일을 읽어오는 것을 알 수 있다.
getBoards() 함수는 JSON 파일 안의 boards 객체를 가져오는 기능을 하는 함수로,
게시판 목록을 가져오는 API의 return으로 바로 사용할 수 있다
그리고 특정 아디이를 통해서 게시판 정보를 조회하는 기능도
getBoards()를 통해 목록을 가져온 뒤 특정 아이디 값을 가지고 있는 객체를 찾도록 수정하였다.
(특정 아이디를 통해 조회하는 기능은 블로그에서 따로 작성하지 않겠다.)
게시판 목록과 조회 기능을 Database.json 파일에서 읽어온 후 처리할 수 있도록 수정하였으면
다음은 사용자가 입력한 데이터를 JSON 파일에 작성하는 기능이다.
async function saveBoards(boards) {
const content = {
boards,
}
return fs.promises.writeFile(
DB_JSON_FILE,
JSON.stringify(content),
DATA_ENCODING
)
}
저장하는 기능을 담당하는 함수를 비동기 함수로 선언한 후
File system과 promise를 이용하여 새로 입력된 게시판 객체를 Database.json에 작성하도록 구현한 코드이다.
이렇게 JSON 파일을 이용하게 되면 Database가 없어도 파일에 게시판 정보가 작성되어 있기 때문에
서버가 재시작되거나 나중에 데이터를 조회할 때에도 게시판 데이터가 초기화 되지 않고
마지막에 저장한 정보를 유지할 수 있어, Database 역할을 대신 해준다.
오늘은 추석이니 여기까지.
다음 강의부터는 본격적으로 NodeJS에 대한 학습을 하게 되므로
조금 더 열심히 집중해서 들어야겠다.
[오늘의 학습통계]
- 패스트캠퍼스 URL : https://bit.ly/37BpXiC
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Web > Node.JS' 카테고리의 다른 글
[패스트캠퍼스 챌린지 18일차] NodeJS 핵심개념- npm, yarn (0) | 2021.09.23 |
---|---|
[패스트캠퍼스 챌린지 17일차] NodeJS 핵심개념- require, module (0) | 2021.09.22 |
[패스트캠퍼스 챌린지 15일차] RESTful API - 리팩토링 (0) | 2021.09.20 |
[패스트캠퍼스 챌린지 14일차] RESTful API - 기능완성 (0) | 2021.09.19 |
[패스트캠퍼스 챌린지 13일차] RESTful API - 예시(2) (0) | 2021.09.18 |