다음은 책 리액트를 다루는 기술을 읽고 공부한 내용을 바탕으로 작성된 글입니다.
1. MongoDB
MongoDB는 관계형 데이터베이스가 아닌, 문서지향적 NoSQL 데이터베이스이다.
그럼 여기서, 문서란?
문서 ❓ RDBMS의 레코드(record)의 개념. 한 개 이상의 키-값 쌍으로 이루어진다.
다음은 문서의 예이다.
- 문서의 예시
{
"_id" : ObjectId("509980132123"),
"username" : "subbni",
"name" : { first : "S.B", last : "Oh" }
}
새로운 문서를 만들면 _id라는 고윳값을 자동생성한다.
- 문서는 BSON 형태로 저장된다.
BSON ❓ JSON 문서를 바이너리로 인코딩한 형태
여러 문서가 들어있는 곳은 컬렉션이라 한다.
컬렉션 ❓ RDBMS의 테이블(table)과 유사한 개념
기존 RDBMS의 테이블에서는 테이블마다 같은 스키마를 가져야 했다.
만약, 새로 등록할 데이터가 다른 스키마를 가진다면 같은 테이블의 기존 데이터의 스키마도 전부 변경해주어야 했다.
반면, MongoDB의 컬렉션에서는 다른 스키마를 가진 문서들이 한 컬렉션에서 공존 가능하다.
2. Mongoose
- Node.js 환경에서 사용하는 MongoDB 기반 Object Data Modeling 라이브러리로, 데이터베이스 문서들을 자바스크립트 객체처럼 사용할 수 있게 해준다.
Mongoose에는 스키마와 모델이라는 개념이 존재한다.
스키마 ❓ 컬렉션에 들어가는 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체
모델 ❓ 스키마를 사용하여 만드는 인스턴스
스키마로 형식을 정의하고 { title: String, active: Boolean, ... }
이를 토대로 모델을 만들어 사용한다고 생각하면 된다. { title: "text" , active: true, ... }
1. Post 스키마 생성
블로그 포스트에 대한 스키마를 만들어보자.
초기 데이터는 다음과 같다
- 포스트 스키마
필드 이름 | 데이터 타입 | 설명 |
title | String | 제목 |
body | String | 내용 |
tags | 문자열 배열 | 태그 목록 |
publishedData | Date | 작성 날짜 |
- src/models/post.js
import mongoose from 'mongoose';
const { Schema } = mongoose;
const PostSchema = new Schema({
title: String,
body: String,
tags: [String], // 문자열로 이루어진 배열
publishedDate: {
type: Date,
default: Date.now, // 현재 날짜를 기본값으로 설정
},
});
스키마를 만들 때는 mongoose 모듈의 Schema를 사용하여 정의한다.
필드의 기본값으로는 default 값을 설정하면 된다.
2. Post 모델 생성
모델을 만들 때는 mongoose.model 함수를 사용한다.
다음 코드를 post.js 하단에 추가했다.
- src/models/post.js
const Post = mongoose.model('post',PostSchema);
export default Post;
모델 인스턴스를 만들고, ( const Post )
export default를 통해 내보내 주었다.
여기서 사용한 model 함수는 기본적으로 두 개의 파라미터가 필요하다.
첫 번째 파라미터는 스키마 이름,
두 번째 파라미터는 스키마 객체이다.
데이터베이스는 스키마 이름을 지정해주면 그 이름 뒤에 's'를 붙여 데이터베이스에 컬렉션 이름을 만든다.
예를 들어 스키마 이름을 Post로 설정한다면 실제 데이터베이스에는 posts 의 이름으로 컬렉션이 만들어진다.
BookInfo로 입력한다면, bookinfos로 컬렉션이 만들어진다.
MongoDB에서 컬렉션 이름을 만들 때 권장되는 convention은 구분자 없이 복수형태로 사용하는 것이다.
만약 이를 따르고 싶지 않을 경우에는 원하는 이름을 model 함수의 세 번째 파라미터에 입력하면 된다.
- 예시
mongoose.model('Post',PostSchema, 'custom_book_collection');
이 경우 첫 번째 파라미터로 넣어 준 이름은 나중에 다른 스키마에서 이 스키마를 참조해야 하는 상황에서 사용된다.
'Front-End > React' 카테고리의 다른 글
[React] 블로그 만들기 3 - 요청 검증 (id 검증) (0) | 2022.03.14 |
---|---|
[React] 블로그 만들기 2 - 데이터 생성, 조회, 삭제, 수정 기능 구현 (0) | 2022.03.14 |
[React] Koa를 이용한 개발 / 라우터 모듈화 / 컨트롤러 파일 모듈화 (0) | 2022.03.09 |
[React] Koa를 이용한 개발 / Koa, koa-router, nodemon (0) | 2022.03.07 |
[React] Render Props (0) | 2022.03.04 |