728x90
우선 제목부터 나와있지만 해당 글에서는 데이터베이스를 사용해서 repository를 만드는 것이 아닌, 별도의 파일에 데이터들을 저장하고 그것을 repository로 불러오고 저장할 것이다.
우선 repository에 다음과 같은 메서드들을 만들것이다.
export class MessagesRepository {
async findOne(id: string){
}
async findAll(){
}
async create(message: string){
}
}
우선 구조만 이렇게 만들어두고, messages의 데이터들을 저장하기 위해 루트 디렉토리에 다음과 같은 파일도 생성한다.
이제 read, write로 해당 json 파일에 데이터를 저장할 것이다.
이제 repository의 남은 부분을 완성해보자.
우선 데이터는 이렇게 저장되어 있을 것이다.
{
1: {
"id": 1,
"content": "hi"
}
}
그러면 우리는 1을 검색 할 때, [1]로 가져오면 되는 것이다.
이렇게 readFile로 메시지들을 읽어오고, Json으로 파싱한 후 해당 아이디의 값을 가져온다.
async findOne(id: string){
const messages = await readFile(`messages.json`, 'utf8');
const messagesJson = JSON.parse(messages);
return messagesJson[id];
}
findAll()은 그냥 Json으로 파싱하고, 모든 데이터를 가져오면 된다.
async findAll(){
const messages = await readFile(`messages.json`, 'utf8');
return JSON.parse(messages);
}
마지막으로 가장 어려운 create이다.
아이디는 동시성 문제 때문에 우선 random으로 생성한다.
그리고 모두 Json으로 불러오고, 해당 Json에 추가하는 값을 넣은 후 다시 파일에 작성하는 방법으로 데이터를 저장한다.
사실 어차피 파일 시스템이라 동시성 문제가 발생하기는 한다...
async create(content: string){
const messages = await readFile(`messages.json`, 'utf8');
const messagesJson = JSON.parse(messages);
const id = (Math.random() * 9999)
messagesJson[id] = {id, content};
await writeFile(`messages.json`, JSON.stringify(messagesJson), 'utf8');
}
이렇게 임시로 repository layer를 만들어보았다.
당연히 원래는 데이터베이스로 만들어야 하지만, 임시로 텍스트 파일을 사용했으며 테스트는 service layer까지 만들어보고 진행할 예정이다.
'Node > Nest' 카테고리의 다른 글
Nest에서의 IOC/DI 알아보기 (0) | 2025.07.06 |
---|---|
Nest에서 Service layer 구현하기 (0) | 2025.07.05 |
Nest에서 파이프를 통해 요청 DTO 검사하기 (1) | 2025.07.04 |
Nest 모듈과 컨트롤러 만들어보기 (0) | 2025.07.03 |
Nest 살짝 맛보기 (2) | 2025.07.01 |