본문 바로가기
더이상 하지 않는 Backend - NodeJS/Node-Express 개론(완)

[O'REILLY] Node & Express - 13장 : 지속성(Persistence)

by VictorMeredith 2023. 4. 10.

- 웹과 앱에는 어떤 형태든 지속성이 필요하다.

- 데이터를 메모리가 아닌 다른 형태로 저장해서 서버 다운, 정전, 업그레이드, 이전 등의 상황에서도 데이터를 유지할 수 있어야 한다.

 

1. 파일시스템 지속성

- 지속성을 획득하는 방법 중 하나는 데이터를 플랫 파일에 저장하는 것

- 플랫이란 ? : 파일에 특별한 구조가 없이 그저 바이트의 연속

- 노드는 fs(파일시스템) 모듈을 통해 파일시스템의 지속성을 제공한다.

- 파일시스템 지속성의 단점 : 확장이 어렵다. 플랫 파일에는 구조가 없으므로, 찾기, 정렬, 필터링 기능을 모두 앱에서 구현해야 한다.

- 그러므로 데이터는 DB를 이용하는 것이 좋다. 다만, 이미지/오디오/비디오같은 이진 파일은 파일시스템이 더 효율적이다.

- 이진 파일에 관한 정보는 보통 DB에 저장한 후 검색, 정렬, 필터 기능을 사용한다.

- 이진파일은 S3, Azure 같은 클라우드 기반 스토리지 서비스에 저장해야 한다.

 

Node 예제

노드의 파일시스템 지원

- 사용자가 제시한 이름이 충돌될 경우를 대비하여 그 이름을 사용하지 않고 타임스탬프로 고유한 디렉터리를 만들어 이 문제를 피한다.

- 사용자가 업로드한 파일의 정보와 사용자의 정보는 DB에 저장하는 것이 낫다.

 

2. 클라우드 지속성

- 용어를 달아두면 좋다

- 파일 스토리지 메커니즘을 AWS에서는 '버킷' 이라고 부른다.

- Azure에서는 '컨테이너' 라고 부른다.

- 각자 알아서 잘 찾아서 배우는 것이 좋다. 매번 업데이트되기도 하고, 설명이 잘 되어있다.

 

3. DB 지속성

- 여기서는 RDBMS인 PostgreSQL과 NoSQL인 MongoDB에 대해서 다룬다.

- Node는 다양한 DB와 통합이 가능하고 잘 맞는다.

 1) 성능

   - NoSQL의 단순함은 양날의 검이다. 성능을 이끌어내기 위해서는 상당한 전문성이 필요하다.

   - 관계형DB(RDBMS)는 엄격한 DB구조와 오래된 최적화 연구를 통해 고성능을 달성했다. 

   - 반면 NoSQL DB는 분산되어 존재한다는 인터넷의 특징을 살려 동시성에 집중하여 성능을 끌어올렸다.

  2) DB레이어 추상화

   - 가능하다면 선택한 기술을 추상화하는 것이 좋다. 일종의 API 레이어를 만들어 실제 동작하는 기술을 일반화 하는 형태이다.

   - 적절히 추상화할 수 있다면, 이후 구성 요소를 교체하는 데에 비용이 적게 들기 때문이다. 

  3) MongoDB

   - MongoDB는 NoSQL DB이다.

   - mLab과 Atlas 서비스가 있다. 무료로 사용하기에 좋다.

   4) Mongoose

   - 객체 문서 매퍼(Object Document Mapper, ODM)이다.

   - 거의 표준화 되어있는 MongoDB의 사용법이다. MongoDB있으면 무조건 쓴다고 봐야한다.

   - DB를 파편화하고 최적화하기 어렵게 만드는 JS의 유연함을 제한하여 스키마와 모델을 도입해 균형을 찾는다.

 

db.js

실제 개인 연습프로젝트에서 사용하는 db연결모듈패턴

 

server.js

미들웨어모듈인 app.js 와 db연결모듈인 db.js를 불러와 실행하는 server.js이다

 

https://victormeredith.tistory.com/95

 

Express - 4장 : Mongoose 의 CRUD

1. CRUD란 ? - create - read - update - delete 2. Cheat Sheet Schema 세팅 var mongoose = require("mongoose"); var Schema = mongoose.Schema; var ProductSchema = new Schema({ name: { type: String, required: true }, brand: { type: String, required: false },

victormeredith.tistory.com

- 이 포스팅에 간단하게 mongoose의 crud에 대해서 적혀있다.

- 스키마와 crud 사이의 많은 옵션과 기능들이 존재하니 알아보면서 사용하면 된다.

댓글