반응형

RDBMS는 관계적이면서 복잡한 데이터를 SQL을 사용해 데이터를 다루지만

NoSQL은 RDBMS와 반대로 복잡하지 않은 간단한 데이터를 저장하고 단순 검색 및 추가 검색 작업을 위해 NoSQL 의 특정 문법을 사용한다.

 

(NoSQL 중, Redis는 키-값을 사용해 데이터를 저장)

 

RDBMS는 SQL이라는 정해진 문법으로 데이터를 다루기 때문에 한 가지의 언어로 다양한 DBMS을 사용할 수 있다.

NoSQL은 Redis, Dynamo, CouchDB, MongoDB 등 다양한 DBMS가 존재하기 때문에 각각의 구조와 사용 문법을 익혀야한다.

 

 

1. MongoDB

  • JSON 형태인 도큐먼트(Document)로 데이터를 저장한다.
  • MongoDB는 JSON형식으로 쿼리를 작성한다.
  • _id 필드가 PK의 역할을 한다.

DML 쿼리를 RDBMS구문과 MongoDB 구문으로 작성하여 비교해보면

SELECT * FROM inventory WHERE status = "A" and qty < 30;
INSERT INTO user(uid, upw,) VALUES ("admin", "secretpassword");
DELETE FROM account WHERE user_id="guest";
UPDATE account SET user_id="guest2" WHERE user_idx=2;
db.inventory.find({$and: [ { status: "A" }, { qty: { $lt: 30 }}]})
db.user.insert({uid: 'admin', upw: 'secretpassword'})
db.account.remove({user_id: "guest"})
db.account.update({user_idx: 2},{ $set: { user_id: "guest2" }})

크게 다른것 없이 문법만 다르지만 큰 특징은 RDBMS는 연산자를 기호로 나타내지만, MongoDB에서는 특정 문자로 나타낸다. 각 연산자에 대응하는 문자는 공식문서에 잘 나와 있다.

 

 

2. Redis

  • Redis는 키-값(Key-Value)의 쌍을 가진 데이터를 저장한다.
  • 메모리 기반의 DBMS이다.
  • 메모리를 사용해 데이터를 저장하고, 접근하기 때문에 읽고 쓰는 작업이 다른 DBMS에 보다 훨씬 빠르다.
  • 다양한 서비스에서 임시 데이터를 캐싱하는 용도로 주로 사용하고 있다.
SET test 1234 //test key에 1234 대입
GET test //test key에 담겨있던 1234 출력
INCR test //1234에 1증가
DECR test //1234에 1감소

Redis는 RDBMS와 구조와 방식 자체가 다르다. DB보다는 커맨드라인의 느낌을 받는 것 같다.

더 많은 명령어는 공식문서를 찾아보자.

 

 

3. CouchDB

  • CouchDB는 MongoDB와 같이 JSON 형태인 도큐먼트(Document)를 저장한다.
  • 웹 기반의 DBMS로, REST API (CRUD)형식으로 데이터베이스안에 데이터를 관리한다.
POST INSERT
GET SELECT
PUT UPDATE
DELETE DELETE

RDBMS의 쿼리에 대응하는 CRUD 메소드들이다.

curl -X PUT http://{username}:{password}@localhost:5984/users/guest -d '{"upw":"guest"}'
{"ok":true,"id":"guest","rev":"1-22a458e50cf189b17d50eeb295231896"}

curl http://{username}:{password}@localhost:5984/users/guest
{"_id":"guest","_rev":"1-22a458e50cf189b17d50eeb295231896","upw":"guest"}

CouchDB에서는 기본적인 API 서버를 통해 데이터베이스의 정보나 관리자 페이지를 제공한다. 

/db로 접근하면 데이터베이스에 대한 정보를 보여주고, /_utils로 접근하면 관리자 페이지를 보여준다.

더 많은 API와 메소드들은 공식문서를 참조하자.

반응형

'Web hacking > 이론' 카테고리의 다른 글

SSRF (web-ssrf)  (0) 2022.10.21
File Vulnerability (image-storage, file-download-1)  (0) 2022.08.31
Command Injection  (0) 2022.08.24
Blind NoSQL Injection (Mongo)  (0) 2022.08.23
SQL injection, Blind SQL injection  (0) 2022.08.17