Database
- 데이터를 효율적으로 저장하여 관리하는 시스템을 Database라고 한다.
- Database 를 체계적으로 조작하기 위해서 DBMS(DataBase Management System) 을 사용한다.
- Database는 형태에 따라 크게 Relational Database (관계형 DB), Non-Relational Database(비관계형 DB) 로 분류된다.
- Relational Database : 테이블 형태로 데이터를 관리
- Non-Relational Database : key-value 세트로 구성된 형태로 데이터를 관리(ex: json format)
RDBMS (Relational Database Management System)
- Relational Database 조작을 위한 시스템을 의미한다.
- Codds 에서 정의한 12가지 정의에 따르도록 설계된다. (보통은 선두의 2가지 규칙만 필수로 따른다.)
- SQL (Structured Query Language) 이라는 쿼리 언어를 사용하여 Database를 조작한다.
SQL (Structured Query Language)
- RDBMS의 데이터를 정의하고 질의, 수정 등을 하기 위해 고안된 언어로, 다음 세가지 종류의 언어를 포함한다.
- DDL (Data Definition Language) : 데이터를 정의하기 위한 언어로 데이터베이스의 생성/수정/삭제 등의 행위를 수행
- DML (Data Manipulation Language) : 데이터를 조작하기 위한 언어로 실제 데이터베이스 내에 존재하는 데이터에 대해 조회/저장/수정/삭제 등의 행위를 수행
- DCL(Data Control Language) : 접근 권한을 설정하기 위한 언어
NoSQL
Non-Relational Database
를 위한 언어로,Non-Relational DBMS
라고도 불린다.- SQL를 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 추가 검색 작업을 위해 매우 최적화되었고, 저장공간이 크다는 것이 특징이다.
- key-value 조합으로 데이터에 접근하기에 문법이 따로 없다는 것도 장점이다.
- MongoDB, Redis, CouchDB 등이 해당된다.
- MongoDB : Json 형태로 테이블 관리
- Redis : 메모리 기반 DBMS로 속도가 빨라 임시데이터 캐싱 용도로 주로 사용
- CouchDB : 이는 웹 기반의 DBMS로, REST API 형식으로 요청을 처리
문법
MongoDB 데이터 삽입
$ mongosh > db.user.insertOne({uid: 'admin', upw: 'secretpassword'}) { acknowledged: true, insertedId: ObjectId("5e71d395b050a2511caa827d")} > db.user.find({uid: 'admin'}) [{ "_id" : ObjectId("5e71d395b050a2511caa827d"), "uid" : "admin", "upw" : "secretpassword" }]
MongoDB 데이터 검색
db.inventory.find( { $and: [ { status: "A" }, { qty: { $lt: 30 } } ]} )
- 검색 연산자
$eq
: 지정된 값과 같은 값 반환
ex)db.users.find({ "age": { "$eq": 25 } })
$in
: 배열 안의 값들과 일치하는 값 반환$ne
: 지정된 값과 같지 않은 값 반환
ex)db.users.find({ "status": { "$ne": "inactive" } })
$nin
: 배열 안의 값들과 일치하지 않는 값 반환$and
: 논리적 AND
ex)db.users.find({ "$and": [ { "age": { "$gte": 18 } }, { "age": { "$lte": 30 } } ] })
+ and는 생략할 수도 있다.
ex)db.users.find({ "age": { "$gte": 18 }, "age": { "$lte": 30 } })
$not
: 쿼리 식의 효과를 반전
ex)db.users.find({ "age": { "$not": { "$gte": 18 } } })
$nor
: 논리적 NOR$or
: 논리적 OR$exists
: 지정된 필드가 있는 값 반환$type
: 지정된 필드가 지정된 유형인 문서를 반환$expr
: 쿼리 조건자 내에 표현식을 사용 가능하도록 함$regex
: 지정된 정규식과 일치하는 값 반환$text
: 문자열 검색 - MongoDB 함수
db.테이블.find(조건, 필드)
: 조건을 만족하는 레코드에서 선택한 필드를 반환- ex)
db.account.find()
: 모든 레코드 선택 - ex)
db.account.find( { user_id: "admin" }, { user_idx:1, _id:0 })
- ex)
db.테이블.insertOne(레코드)
: 레코드를 테이블에 삽입- ex)
db.account.insertOne({ user_id: "guest",user_pw: "guest" })
- ex)
db.테이블.remove(조건)
: 레코드를 테이블에서 삭제- ex)
db.account.remove()
: 전체 레코드 삭제 - ex)
db.account.remove({user_id: "guest"})
- ex)
db.account.updateOne(변경할 값, 조건)
: 조건에 맞는 레코드의 값을 변경- db.account.updateOne( { user_idx: 2 }, { $set: { user_id: “guest2” } })`
- 검색 연산자