1. 데이터베이스
: 데이터를 체계화하여 관리하는 데이터의 집합 또는 해당 작업을 수행하는 응용 프로그램을 의미함.
: 몽고디비는 NoSQL 데이터베이스. 그 중 도큐먼트 타입이다.
: NoSQL 데이터베이스는 데이터 모델에 따라 키-밸류 , 컬럼, 도큐먼트 , 그래프 타입으로 분류할 수 있다.
2. NoSQL 분류
1) 키-밸류 타입 : 키를 기준으로 데이터를 조회하고 값으로 데이터를 저장한다.
ex) Redis, Amazon DynamoDB
2) 도큐먼트 타입 : JSON과 유사한 형식의 객체를 담은 데이터를 저장함.
ex) MongoDB , Couchbase , Firestore
3) 그래프 타입 : 노드를 사용하여 데이터를 저장하고, 에지를 사용해 데이터 관계를 저장한다.
ex) ArangoDB , Amazon Neptune , Neo4j
* 나는 실제로 DynamoDB가 비록 키 밸류 타입이지만 도큐먼트 DB도 지원하기에 JSON 형태로 데이터를 저장했었던 경험이 있었다.
3. 데이터베이스 기본 용어
1) 테이블 : 특정 주제에 대한 행과 열로 이루어진 데이터의 모음.
2) 행(row) : 관계형 데이터베이스의 테이블에서 단일 구조 데이터 항목을 의미. 레코드라고도 부른다.
3) 컬럼(column) : 관계형 데이터베이스의 테이블에서 특정한 자료의 값 혹은 테이블에서의 열을 의미한다.
4) 기본 키(Primary Key) : 중복된 값을 가질 수 없다. 데이터를 식별할 때 필요한 키
5) 외래키: 두 테이블을 연결 할 때 사용하는 키.
6) RDB : 관계형 데이터베이스라고 하며, 모든 데이터를 2차원의 테이블에 저장한다. 서로 다른 테이블 간에 조인 혹은 외래키로 관계를 맺을 수 있다.
7) 스키마 : 데이터베이스 테이블의 명세를 기술한 데이터.
ex) 문자열 20자 user_name , 숫자 4자리 password 등과 같은 정보를 정의한 것
8) 모델 : 데이터베이스의 특정 테이블과 테이블에 있는 컬럼들의 형태를 정의한 클래스.
ex) user 테이블에 대한 모델 -> User 클래스 , 변수로 String userName, int password를 선언해야 함
9) 컬렉션 : 몽고디비에서 사용하는 용어로, 도큐먼트의 집합을 컬렉션이라고 한다. (= 관계형 데이터베이스의 테이블)
10) 조인 : 두 개 이상의 테이블 또는 컬렉션을 조합하여 데이터를 보여주는 기법
11) 트랜잭션 : 데이터 변경을 ㅜㅅ행하는 작업 단위
12) 클러스터 : 데이터 처리량을 높일 목적으로 데이터를 여러 서버(샤드)에 저장하는 기법
13) 샤드 : 큰 데이터베이스를 작은 단위로 분할하는 기능을 의미. 샤드를 사용하여 데이터를 작은 단위로 분할하여 노드(데이터를 가지고 있는 서버)에 분산 시켜 저장할 수 있다.
4. 몽고디비 특징
: BSON 라는 데이터 포맷으로 문서 다룸. Binary JSON의 약자로 JSON을 바이너리 형식으로 저장하는 형태.
: Date와 BinData 타입을 지원한다.
: BSON을 사용하므로 자바스크립트와 호환성이 좋다.
5. 몽고디비 아틀라스
: 몽고디비 서버군으로 클라우드 사용할 수 있는 몽고디비 아틀라스가 있다.
: 접속 예시
// test-mongodb.js
const { MongoClient} = require("mongodb");
const uri = "mongodb+srv:<id>:<password>@<cluster_info>/myFirstDatabase?retryWrites=true&w=majority";
const client = new MongoClient(uri);
// MongoDB 클라이언트 객체 생성
client.connect(error => {
const collection = client.db("test").collection("devices"); // DB 및 컬렉션에 접속
client.close(); // 접속 끊기
});
: 실행 방법
npm i mongodb
node test-mongodb.js
// DB 정보 출력하는 test-mongodb2.js
const { MongoClient } = require("mongodb");
const uri = "mongodb+srv://<아이디>:<패스워드>@<클러스터정보>/myFirstDatabase?retryWrites=true&w=majority";
const client = new MongoClient(uri);
async function run() {
await client.connect();
const adminDB = client.db("test").admin(); // admin DB 인스턴스
const listDatabases = await adminDB.listDatabases(); // 데이터베이스 정보 가져오기
console.log(;istDatabases);
return "OK";
}
run()
.then(console.log)
.catch(console.error)
.finally(()=> client.closes());
6. 몽고디비 CRUD API
const MongoClient = require("mongodb").MongoClient;
const url = mongodb+srv://<id>:<password>&<cluster_info>/test?retryWrites=true&w=majority";
// MongoClient 생성
const client = new MongoClient(url, { useNewUrlParser: true });
async function main() {
try {
// 커넥션을 생성하고 연결 시도
await client.connect();
console.log("MongoDB Connected");
// testDB의 User 컬렉션 가져오기
const collection = client.db("test").collection("User");
// 문서 추가
await collection.insertOne({ name: "john doe" , age: 30 });
console.log("insert completed");
// 문서 찾기
const documents = await collection.find({name: "john doe" }).toArray();
console.log("Find Document: ", documents);
// 문서 업데이트
await collection.updateOne({ name: "john doe" }, { $set: {age : 31 } });
console.log("update completed");
// 업데이트 문서 확인
const updateDocuments = await collection.find({ name : "john doe" }).toArray();
console.log("업데이트 문서 :" , updatedDocuments);
// 연결 끊기
await client.close();
} catch(err) {
console.error(err);
}
}
main();
7. 몽고디비 콤파스
: GUI 도구인 몽고디비 콤파스로 데이터를 더 간편하게 확인 가능
8. 몽구스
: mongodb 패키지보다 조금 더 편리한 기능을 제공하는 라이브러리다. typeORM 처럼 객체를 도큐먼트로 매핑하는 기능이 있다. 그래서 ODM(object document mapper)라고 부르기도 한다.
: 몽고디비에는 스키마 지정 기능이 없으나 몽구스로는 스키마 지정이 가능하다는 점이 특징이다.
npm install mongoose
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
const userSchema = new Schema({
name: String,
age : Number,
email : { type: String, required: true },
});
module.exports = mongoose.model('User' , userSchema); // 모델 객체 생성
9. REST Client
: VSCode의 REST 클라이언트를 통해 API 테스트 가능하다.
: .http 파일로 코드를 작성하면 테스트에 사용한 코드가 남아있게 되고 코드 저장소에 저장해 다시 재활용 할 수 있다.
: rest client 익스텐션 설치 후 test.http 등으로 파일을 만들어줌
# 변수 설정
@server = http://localhost:3000
### GET 요청 보내기
GET {{server}}/user
### POST 요청 보내기
POST {{server}}/user
Content-Type: application/json
{
"name": "John Doe",
"age" : 30,
"email": "hello@example.com"
}
### 생성한 문서 확인
GET {{server}}/user/hello@example.com
'BackEnd Skils' 카테고리의 다른 글
[Backend] Dorker 총 정리 (1) | 2024.12.30 |
---|---|
백엔드 입문 (5) - Express 아키텍처 구조 (1) | 2024.12.08 |
백엔드 입문 (3) - npm 과 yarn 패키지 (0) | 2024.12.01 |
백엔드 입문 (2) - Express로 웹 어플리케이션 서버 구현해보기 (1) | 2024.11.30 |
백엔드 입문 (1) - Node.js로 백엔드 시작해보기 (1) | 2024.11.27 |