<아랑고DB> 4. AQL(Arango Query Lang) 배워보기 1 - WebUI / INSERT
07 Nov 2021 | 아랑고DB 그래프DB1. 들어가기에 앞서
여기서는 아랑고DB에서 제공하는 교육 자료를 사용할 예정이기 때문에 영어를 읽는데 무리가 없다면 해당 자료만 보고 이 글은 패스해도 된다. 자료는 아랑고DB의 공식 튜토리얼 자료 중 하나를 발췌했고, 여기를 눌러 다운받을 수 있다. 더 많은 자료는 여기에서 확인하자.
2. Web UI 사용해보기
AQL을 사용하고 데이터를 쉽게 조회할 수 있는 가장 간단한 방법은 아랑고DB를 설치하면 자동으로 설치되는 Web UI에 접속하는 것이다. 아무 브라우저나 열어서 아랑고DB가 설치된 서버 주소의 8529 포트로 접속할 수 있으며, 잘 안 되면 세팅에 대해 적었던 글에서 Web UI 관련 부분을 읽어보자.
나는 AWS EC2를 사용중이기 때문에, http://ec2-xxx-xxx-xxx-xxx.ap-northeast-2.compute.amazonaws.com:8529
주소로 접속했다.
성공적으로 접속했다면 귀여운 아보카도 그림과 함께 로그인 화면이 뜬다. 따로 사용자를 생성해주지 않았다면 계정은 root
, 비밀번호는 초기 설정한 비밀번호를 입력하자.
입력하면 데이터베이스를 선택하는 드롭다운이 생기는데, 일단은 그대로 _system
데이터베이스로 접속한다. 관리자 데이터베이스이기 때문에 서버 상태에 대한 대시보드와 함께 데이터베이스 목록(Databases), 레플리케이션, 서버 Log, 유저 권한을 설정할 수 있는 메뉴 등이 나타난다.
당장 여기서는 볼 게 없기 때문에, 우측 상단의 DB:_SYSTEM
옆의 새로고침 버튼 같은 걸 눌러서 데이터베이스 선택 화면으로 다시 나간 뒤, 저번에 만들었던 movies
데이터베이스에 접속해보자. 아까와는 메뉴 구성이 다른 것을 볼 수 있다.
Collections 메뉴로 들어가면 지난번에 만들었던 titles
컬렉션이 있는데, 눌러보면 도큐먼트들의 목록이 쭉 나오는 것을 알 수 있다. 탑바에 있는 Indexes
, Info
, Settings
들은 컬렉션 수준의 설정을 의미한다. 나중에 인덱스가 정상적으로 만들어졌는지 확인하기 위해 종종 사용한다.
그리고 대망의 Queries 메뉴로 들어가보자. 여기는 AQL을 입력하고 바로 실행시킬 수 있는 환경을 제공해준다. 비록 에디터의 기능이 거의 없다시피해서 수정이 편리하지는 않지만, 쿼리의 실행 관련 Execution Plan과 실행 결과를 곧바로 볼 수 있어 편리하다.
저번 글에서 잠깐 맛만 봤던 AQL을 테스트해보자. titles
컬렉션의 모든 도큐먼트를 반환하는 쿼리다.
3. AQL(Arangu Query Language) 파헤쳐보기
이제 본격적으로 AQL에 대해 배워보려고 한다. AQL의 문서에 따르면, AQL은 선언형 언어로써 어떤 결과를 조회 할지를 표현하는 언어이다. 목적성에 있어서 SQL과 유사하지만, 큰 차이점이 있다면 AQL은 DML(Data Manipulation Lang)이지, DDL(Data Definition Lang)이나 DCL(Data Control Lang)이 아니라는 점이다. 즉, 데이터를 읽고 수정은 하지만, 데이터베이스를 생성하거나 인덱스를 생성하거나 하는 연산은 지원하지 않는다. (아랑고DB를 의미하는 게 아닌, AQL에서 지원하지 않는다는 것!) 즉 SQL에서는 CREATE DATABASE ...
, CREATE TABLE ...
과 같은 DDL 구문이 있지만 AQL에는 없다는 것임!
기본 연산을 배우기 전에, 아랑고DB의 데이터 타입을 잠깐 짚고 넘어가자.
데이터 타입
아랑고DB는 데이터 타입을 primitive
와 compound
로 분류한다. 전자는 하나의 값을 가지는 데이터 형태이고, null
, boolean
, number
, string
형태가 있다. 후자는 0개~ 여러 값을 포함하는 데이터 타입으로, array/list
와 object/document
가 있다.
오브젝트는 중괄호 {}
로 감싸진 데이터 타입이고, 이름-값 쌍으로 구성되어 있으며, 각 쌍은 컴마,
로 분리된다.
즉, 아래의 형태이다. 이름에 해당하는 name, age, blog는 따옴표나 쌍따옴표로 감싸도 되고, 감싸지 않아도 된다.
글에서 계속해서 나오는 도큐먼트는 컬렉션에서 최상위 데이터 레벨을 의미한다. 즉, 오브젝트나 도큐먼트나 같은 형태이지만 컬렉션에 들어가는 레코드로써의 의미를 위해 도큐먼트라는 표현을 쓴다. 하나의 도큐먼트 내에 또다른 도큐먼트 형태가 있다면 (즉, nested object) 보통 오브젝트라고 분리하여 부르는 것 같다.
CREATE
INSERT
는 말그대로 특정 컬렉션에 도큐먼트를 삽입하는 연산이며, 아래와 같이 쓰인다.
위 AQL에서 왜 명령을 한 줄씩 입력해야할까? AQL은 컬렉션 하나당 한 번의 Insert 연산만을 허용하기 때문이다. 요기 맨 첫 부분에 나와있음
앞서 title
에 unique constraint을 주었기 때문에, Avengers 1을 생성하려는 시도는 실패했다. 하지만 때로는 중복인 도큐먼트는 무시하고 알아서 잘 센스있게 나머지 도큐먼트만 넣어주었으면 하는 바람이 든다. 이때 사용할 수 있는 것이 AQL의 Options 개념이다. 여기에서 Insert와 관련된 추가 설정들을 잘 보여주고 있는데, 중복을 무시하기 위해서는 ignoreErrors
옵션을 사용하면 된다.
여기서 더 나아가, overwriteMode
옵션을 설정하면, 중복 도큐먼트를 마주했을 때의 규칙을 설정할 수도 있다.
ignore
: 그냥 무시한다replace
: 덮어쓴다update
: 지정한 도큐먼트의 일부 부분만 업데이트한다conflict
: 에러를 일으킨다. 이는 따로 설정값이 없을 때의 기본 규칙임
그 외에 컬렉션 수준의 락을 거는 exclusive
옵션과 같은 유용한 설정이 있으니 시간이 되면 살펴보자. 나중에 아랑고DB에 수많은 도큐먼트를 벌크로 넣을 때, 이런 세세한 옵션들의 존재 유무를 알아두는 것이 큰 도움이 된다.
4. 어디까지 왔나
생각보다 쓸 내용이 많아져서 AQL 기초 관련 내용을 1편과 2편으로 나누려고 한다. 2편은 도큐먼트를 삽입하는 또다른 방법인 UPSERT를 알아보고, 나머지 Read, Update, Delete 를 간단히 짚고 넘어가려고 한다. 그리고 그래프 횡단은 내용이 방대하기에 따로 분리할 예정이다.
- 아랑고DB란? 왜 쓰는가?
- 아랑고DB 세팅하기 on Ubuntu
- 아랑고DB 쉘로 붙어서 명령어 체험해보기, 실체 파악해보기
- (지금 보고있는 글) AQL(Arango Query Lang) 배워보기 1
- AQL(Arango Query Lang) 배워보기 2 - RETURN / UPDATE
- AQL(Arango Query Lang) 배워보기 3 - REPLACE / UPSERT / REMOVE
- 그래프 개념잡기
- 그래프 횡단하기 Graph Traversal
- 데이터 모으기 COLLECT / AGGREGATE / MIN_BY, MAX_BY
- 프로젝트. 그래프를 통한 영화 추천시스템 만들어보기 1
- 프로젝트. 그래프를 통한 영화 추천시스템 만들어보기 2 (최종편)