반응형
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 |
최근댓글