Fascination
article thumbnail

Background: Non-Relational DBMS


# 들어가며 - 서론

- RDBMS: 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장

  > 복잡할 뿐만 아니라, 저장해야 하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있음

  > 이를 해결하기 위해 등장한 것이 비관계형 데이터베이스 Non-relational DBMS(NRDBMS, NoSQL)

- 관계형 데이터베이스에서 발생할 수 있는 문제점으로 SQL Injection이 있었음

  > 공격자는 이를 통해 데이터베이스의 정보를 알아내거나 임의의 결과를 반환해 인증을 우회하는 등의 행위가 가능함

  > NoSQL 또한 이용자의 입력값을 통해 동적으로 쿼리를 생성해 데이터를 저장하기 때문에

    이와 같은 문제점이 발생할 수 있음

 

 

# 비관계형 데이터베이스

- RDBMS: SQL을 사용해 데이터를 조회 및 추가 삭제할 수 있음

  > SQL이라는 정해진 문법을 통해 데이터를 저장하기 때문에 한 가지 언어로 다양한 DBMS를 사용할 수 있음

- NoSQL: SQL을 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 작업을 위해 매우 최적화된 저장 공간인 것이 큰 특징이자 RDBMS와의 차이점

  > 이 외에도, 키-값을 사용해 데이터를 저장하는 차이점이 존재

  > Redis, Dynamo, CouchDB, NongoDB 등 다양한 DBMS가 존재하기 때문에

     각각의 구조와 사용 문법을 익혀야한다는 단점이 있음

💡NoSQL 유래

- NoSQL이 가지는 의미에 대해 Non SQL, Non Relational SQL, Not Only SQL 등의 다양한 의견이 있지만 Not Only SQL로 통용되고 있음

- NOT Only SQL: SQL을 사용하지 않고 데이터를 다룰 수 있다는 의미

 

 

# MongoDB

(1) MongoDB

- MongoDB는 JSON 형태인 도큐먼트(Document)를 저장하며, 다음과 같은 특징을 갖고 있음

1. 스키마를 따로 정의하지 않아 각 콜렉션(Collection)에 대한 정의가 필요하지 않음

2. JSON 형식으로 쿼리를 작성할 수 있음

3. _id 필드가 Primary Key 역할을 함

MongoDB 사용 예시

- MongoDB에서 데이터를 삽입하고, 조회하는 쿼리의 예시

$ mongo
> db.user.insert({uid: 'admin', upw: 'secretpassword'})
WriteResult({ "nInserted" : 1 })

> db.user.find({uid: 'admin'})
{ "_id" : ObjectId("5e71d395b050a2511caa827d"), "uid" : "admin", "upw" : "secretpassword" }

- 각 DBMS에서 status의 값이 "A"이고, qty의 값이 30보다 작은 데이터를 조회하는 쿼리는 다음과 같음

  > MongoDB의 경우 $ 문자를 통해 연산자를 사용할 수 있음

💡콜렉션(Collection)

- 콜렉션은 데이터베이스의 하위에 속하는 개념으로, RDBMS의 테이블과 비슷

 

(2) MongoDB 연산자

- Comparison

- Logical

- Element

- Evaluation

 

(3) 기본 문법

SELECT

INSERT

DELETE

UPDATE

 

 

# Redis

- Radis: 키-값(Key-Value)의 쌍을 가진 데이터를 저장

  > 다른 데이터베이스와 다르게 메모리 기반의 DBMS

  > 메모리를 사용해 데이터를 저장하고, 접근하기 때문에 읽고 쓰는 작업이 다른 DBMS 보다 훨씬 빠름

  > 다양한 서비스에서 임시 데이터를 캐싱하는 용도로 주로 사용하고 있음

rdis 명령어 사용 예시

- 데이터를 추가하고, 조회하는 명령어의 예시

$ redis-cli
127.0.0.1:6379> SET test 1234 # SET key value
OK
127.0.0.1:6379> GET test # GET key
"1234"

데이터 조회 및 조작 명령어

관리 명령어

 

 

# CouchDB

(1) CouchDB

- CouchDB: MongoDB와 같이 JSON 형태인 도큐먼트(document)를 저장

  > 웹 기반의 DBMS로, REST API 형식으로 요청을 처리

Method

CouchDB 레코드 업데이트 및 조회 예시

- HTTP 요청으로 레코드를 업데이트하고, 조회하는 예시

$ 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"}

 

(2) 특수 구성 요소

- CouchDB에서는 서버 또는 데이터베이스를 위해 다양한 기능을 제공

- 그 중 _ 문자로 시작하는 URL, 필드는 특수 구성 요소를 나타냄

SERVER

Database

 

 

# 마치며

- 키워드

① 비관계형 데이터베이스(NoSQL): SQL을 사용해 데이터를 조회/추가/삭제하는 관계형 데이터베이스(RDBMS)와 달리 SQL을 사용하지 않으며, 이에 따라 RDBMS와는 달리 복잡하지 않은 데이터를 다루는 것이 큰 특징이자 RDBMS와의 차이점

② 콜렉션(Collection): 데이터베이스 하위에 속하는 개념

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!