최근에는 임베디드 DB를 벗어나 분산처리(rqlite), 스트리밍 복제(Litestream), GraphQL(tuql) 등 기능을 확장한 솔루션들과 함께 여러 용도로 사용되고 있다.
- rqlite
SQLite 기반의 가벼운 분산 데이터베이스
Go 언어로 만들어진 가볍고, 오픈소스이고, 분산 관계 데이터베이스- Litestream
Write Ahead Log를 이용해 SQLite DB를 Replication 해주는 오픈소스
AWS S3, Azure Blob Storage, Google Cloud Storage, SFTP, NFS 에 대한 SQLite 변경 사항을 지속적으로 스트리밍한다. 만약 서버가 다운되면 실패한 지점으로 빠르게 복구한다.
분리된 프로세스에 의해 실행되기 때문에 코드 변화 없이 기존 애플리케이션으로 통합할 수 있다.
적은 금액이 들어간다.- GraqhQL(tuql)
API를 위한 쿼리 언어, 클라이언트가 요청한 만큼 데이터를 서버로부터 효율적으로 가져오는 것이 목적
어떤 특정 데이터베이스 또는 스토리지 엔진이든 종속되지 않고 대신 기존 코드와 데이터에 의해 지원받는다.
요즘엔 '빅데이터'가 많이 거론되지만, 대부분 어플리케이션은 크게 성공하더라도 테라바이트 수준의 데이터를 보기 어렵다. 이에 따라 자신에게 알맞은 솔루션을 찾는 것이 중요하다.
긱뉴스에서는 Litestream을 만든 벤 존슨의 개발 이야기를 정리한 내용도 올려주었다.
- 요약
SQLite는 임베디드 DB로 일반적인 아키텍처 티어에선 존재하지 않는, 사용자의 어플리케이션 서버 프로세스에 링크되는 그냥 라이브러리 = 다른 서버에 의존하지 않고 혼자 실행 되는 "싱글 프로세스 어플리케이션"
벤 존슨은 임베디드 Key/Value DB인 BoltDB를 만듦, BoltDB는 안정적이고 인프로세스 DB에서 기대하는 것처럼 Nitro가 달린 장난감 자동차 같은 성능을 보여주지만 스키마가 Go코드로 정의되기 때문에 DB 마이그레이션이 어려움, 사용자가 도구를 직접 만들어야 하고 심지어 REPL(콘솔 화면에서 구문을 입력하면 바로 결과를 반환하고 다시 입력할 수 있는 도구)도 없음
이 때문에 SQLite를 만듦
하지만 제약 존재, 단일 프로세스 어플리케이션은 SPOF(Single Point of Failure)가 있어 서버를 잃어버리면 데이터베이스도 잃어버림(스토리지 오류에 대한 복원력이 별로), 규모가 클 때의 동시성 부족
그래서 Litestream에 주목
Litestream은 SQLite의 WAL(Wrtie Ahead Log) 모드 저널링을 제어함으로써 동작, WAL모드에서는 쓰기 오퍼레이션들이 SQLite의 메인 DB 파일외의 별도 로그파일에 추가됨, 자동 체크포인트를 방지하는 무한 읽기 트랜잭션을 오픈하고 WAL 업데이트를 직접 캡쳐하고 복제하고 스스로 체크포인트를 트리거함(제어)
DB는 탄력적이고 쉽게 옮기거나 마이그레이션 가능해짐 또한 SQLite DB간 실시간 복제 가능(분산 Read Replica와 Write-Leader DB를 셋업하는 게 가능해짐)
자바스크립트는 요즘 가장 많이 쓰이는 '동적' 타입 언어, 하지만 실행하기 전에는 '타입'을 알 수 없어 실제 운영 시에 오류가 발생할 수 있는 문제가 있다.
이 문제를 해결하기 위해 마이크로소프트는 자바스크립트에 타입 검사를 추가한 타입스크립트를 만들었고 점점 인기가 많아지고 있다.
이에 따라 타입 검사에 대한 관심이 높아진 가운데 프로그래밍 언어 속 타입이라는 책이 전체공개되었다.
- 일부 요약
버그 없는 프로그램을 만들기란 불가능에 가까움, 버그를 고치는 것도 중요하고 어렵지만 더 중요하고 어려운 일은 버그를 찾는 것. 만약 개발 과정에서 미처 버그를 발견하지 못한 채 프로그램을 배포한다면 사용자가 버그 때문에 피해를 볼 것임
버그의 가장 흔한 원인은 타입 오류
타입은 프로그램에 존재하는 값들을 그 능력에 따라 분류한 것(string, boolean...) 그런데 이 타입에 맞지 않게 사용한다면 프로그램에 문제가 생김 -> 해결을 위해 타입 오류를 일으키는지 자동으로 판단해주는 프로그램 타입 검사기를 이용해야 함, 그러나 아직까지 이런 타입 검사기(이상적인 = 검사 후 오류 없으면 통과, 있으면 거부+오류 메시지)는 존재하지 않음
현실적인 타입 검사기는 타입 오류가 없는 경우에 통과 또는 거부+오류 메시지가 나올 수 있음
출처
GeekNews Weekly 150
rqlite
Litestream
GraphQL
GraphQL
데이터 엔지니어