[Web Hacking] DH Background: Non-Relational DBMS

KyungH·2024년 3월 6일

DH Lecture - Web Hacking

목록 보기
9/17
post-thumbnail

DH Web Hacking

📝Background: Non-Relational DBMS


📌Non-Relational DBMS

RDBMS는 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장한다. 이는 복잡하면서 저장하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있다. 이를 해결하기 위해 비 관계형 데이터베이스 (Non-Relational DBMS, NoSQL)가 등장하였다.

NoSQL은 SQL을 사용하지 않고 복잡하지 않은 데이터를 저장하여,
단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간인 것이 큰 특징이다. 또한 키-값을 사용하여 데이터를 저장하는 특징이 있다.

RDBMS는 SQL이라는 정해진 문법을 통해 저장하므로 한 가지의 언어로 다양한 DBMS를 사용할 수 있으나, NoSQL은 다양한 DBMS 각각의 구조와 사용 문법을 익혀야 한다는 단점이 있다.


📌MongoDB

JSON 형태인 Document를 저장하며, 스키마를 따로 정의하지 않아 각 컬렉션에 대한 정의가 필요하지 않다. JSON 형식으로 쿼리를 작성하며, _id 필드가 Primary Key 역할을 한다.

컬렉션(Collection) : 데이터베이스의 하위에 속하는 개념으로, RDBMS의 테이블과 비슷하다.

MongoDB 연산자

Comparison

NameDescription
$eq지정된 값과 같은 값을 찾는다. (equal)
$in배열 안의 값들과 일치하는 값을 찾는다. (in)
$ne지정된 값과 같지 않은 값을 찾는다. (not equal)
$nin배열 안의 값들과 일치하지 않는 값을 찾는다. (not in)

Logical

NameDescription
$and논리적 AND, 각각의 쿼리를 모두 만족하는 문서 반환
$not쿼리 식의 효과를 반전, 식과 일치하지 않는 문서 반환
$nor논리적 NOR, 각각의 쿼리를 모두 만족하지 않는 문서가 반환
$or논리적 OR, 각각의 쿼리 중 하나 이상 만족하는 문서 반환

Element

NameDescription
$exists지정된 필드가 있는 문서를 찾는다.
$type지정된 필드가 지정된 유형인 문서를 선택한다.

Evaluation

NameDescription
$expr쿼리 언어 내에서 집계 식을 사용할 수 있다.
$regex지정된 정규식과 일치하는 문서를 선택한다.
$text지정된 텍스트를 검색한다.

기본 문법

SELECT

SELECT user_idx FROM account WHERE user_id="admin";
db.account.find(
  { user_id: "admin" },
  { user_idx:1, _id:0 }
)

INSERT

INSERT INTO account(user_id,user_pw,) VALUES ("guest", "guest");
db.account.insertOne(
  { user_id: "guest",user_pw: "guest" }
)

DELETE

DELETE FROM account WHERE user_id="guest";
db.account.remove(
  {user_id: "guest"}
)

UPDATE

UPDATE account SET user_id="guest2" WHERE user_idx=2;
db.account.updateOne(
  { user_idx: 2 },
  { $set: { user_id: "guest2" } }
)

References

DreamHack 강의 - Background: Non-Relational DBMS

0개의 댓글