NoSQL은 Non SQL, Non relational SQL, Not Only SQL 등으로 불리우며, 최근에는 Not Only SQL로 통용되고 있다. 이들은 모두 데이터베이스와 관련된 작업을 할 때 SQL을 사용하지 않아도 된다는 의미를 가진다. NoSQL은 **관계형 데이터베이스(RDBMS)**와 달리 복잡하지 않은 데이터를 관리하는 것이 가장 큰 특징이자 RDBMS와의 차이점이다. 또한, 2000년대 말 저장공간의 비용이 크게 하락하면서 등장한 만큼 단순한 데이터 검색을 포함한 다양한 작업에 있어 최적화된 저장소이다. RDBMS와 NoSQL은 모두 데이터 저장소이며 결국 특정 명령에 의해서 데이터를 저장하고, 조회하기 때문에 공격자가 해당 명령들을 실행할 수 있다면 저장된 데이터들을 획득할 수 있다.
CouchDB는 키와 값이 하나의 쌍을 이루는 데이터를 저장하며, JSON 객체 형태인 도큐먼트를 저장한다. 이는 HTTP 기반의 서버로 동작하며 REST API 형식으로 HTTP 메소드를 사용해 요청을 받고, 처리한다. 아래는 GET 메소드를 통해 CouchDB 서버와 통신한 모습이다. 이처럼 CouchDB는 HTTP 클라이언트를 사용해 접근할 수 있다.
$ curl <http://127.0.0.1:5984/>
{"couchdb":"Welcome","version":"3.1.0","git_sha":"ff0feea20","uuid":"c7592f66bba3c6ebc38f0f4dcd374d68","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
데이터 삽입
$ 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 특수 구성 요소
일반적으로 _ 문자로 시작하는 URL 요소 및 JSON 필드는 특수 구성 요소를 나타낸다. 다음은 특수 구성 요소를 나열한 표이다. 더 자세한 정보는 공식 문서에서 확인 가능하다.
Server
| 구성 요소 | 설명 |
|---|---|
| / | 인스턴스에 대한 메타 정보를 반환한다. |
| /_all_dbs | 인스턴스의 데이터베이스 목록을 반환한다. |
| /_utils | 관리자 페이지 (Fauxton Administration Interface)로 이동한다. |
Databases
| 구성 요소 | 설명 |
|---|---|
| /db | 지정한 데이터베이스에 대한 정보를 반환한다. |
| /{db}/_all_docs | 지정한 데이터베이스에 포함된 모든 도큐먼트를 반환한다. |
| /{db}/_find | 지정한 데이터베이스에서 JSON 쿼리에 해당하는 모든 도큐먼트를 반환한다. |