Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/jepsen-io/duckdb
Vulnerability AnalysisPapers & ResearchLearning & EducationDatabase SecurityAnomaly Detection
GitHubjepsen-io/duckdb

duckdb

DuckDB용 Jepsen 기반 트랜잭션 정확성 테스트 프레임워크로, 무작위 워크로드와 Elle 체커를 통해 G2-item 및 SSI 위반과 같은 격리 이상을 탐지합니다.

저장소 보기
5255개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Jepsen DuckDB 테스트

DuckDB 데이터베이스를 위한 Jepsen 테스트입니다. 원격 클러스터가 아닌 로컬에서 실행됩니다. 테스트는 로컬에서 DuckDB 파일을 열고 STDIN/STDOUT을 통해 상호작용하는 로컬 프로세스 집합을 생성합니다.

이것은 초기 프로토타입입니다. 켜지고, 트랜잭션을 실행하고, 올바른지 확인하고, 버그를 보고하지만, 그 버그가 실제인지 확실하지 않습니다.

설치

JDK(21+), Git, Gnuplot, Graphviz, 그리고 Leiningen이 필요합니다. 대부분의 Jepsen 테스트와 달리 이 테스트는 완전히 로컬에서 실행됩니다; 머신 클러스터, SSH 키 등이 필요하지 않습니다.

Debian

root@kitploit:~
sudo apt install openjdk leiningen gnuplot graphviz

OS X

root@kitploit:~
brew install openjdk leiningen gnuplot graphviz

사용법

테스트를 실행하려면 다음을 시도하세요:

root@kitploit:~
lein run test

DuckDB는 (추측컨대) 기본적으로 Strong SI를 제공하며, 테스트는 이를 확인합니다. 하지만 G2-item을 허용하며, 이는 Repeatable Read 위반입니다. 이를 증명하려면 다음을 시도하세요:

root@kitploit:~
lein run test --time-limit 10 --expected-consistency-model serializable --max-writes-per-key 8

우리는 10초 동안 테스트를 요청하여 직렬화 가능성 위반을 찾고, (작고 읽기 쉬운 예제를 생성하기 위해) 키당 8개의 요소만 작성합니다. G2-item의 예제는 store/latest/elle/G2-item에서 확인할 수 있습니다.

여러 조정 옵션이 있습니다. 다양한 옵션에 대한 도움말은 lein run test --help를 통해 확인할 수 있습니다.

테스트 결과는 store/<test-name>/<date>/에 기록되며, store/latest로 심볼릭 링크됩니다. 각 테스트 디렉토리는 자체 포함되어 있어 복사, tar 압축, 이후 분석, 삭제 등이 가능합니다. 또한 웹 서버를 실행하여 결과를 탐색할 수 있습니다.

root@kitploit:~
lein run serve

REPL을 사용할 수 있습니다; lein repl을 참조하세요.

구조

테스트 하니스는 이 디렉토리에 있습니다; 프로젝트 파일은 project.clj, 소스는 src/ 등에 있습니다.

테스트 하니스는 별도의 프로그램인 "local node"를 실행하며, 이는 DuckDB 라이브러리를 내장하고 트랜잭션을 수행합니다. 테스트 하니스는 주어진 워크로드에 대해 임의의 트랜잭션을 생성하고, HTTP를 통해 local node에 제출하며, 해당 트랜잭션의 결과를 저널링하고, 마지막에 다양한 트랜잭션 이상을 확인합니다. Elle 체커(https://github.com/jepsen-io/elle)를 사용하여 Strong Snapshot Isolation을 찾습니다.

local node는 테스트 하니스로부터 추상 트랜잭션(예: "read key x, then set y to 5")을 수신하고, 이를 DuckDB JDBC 드라이버에 대해 실행되는 트랜잭션으로 변환하는 작은 HTTP 서버를 가지고 있습니다.

우리는 한 가지 종류의 결함(프로세스 종료)을 주입할 수 있습니다.

워크로드

두 가지 워크로드가 있습니다.

첫 번째는 append로, 고유한 정수를 리스트에 추가하고 해당 리스트의 내용을 읽는 트랜잭션을 실행합니다. 각 리스트는 여러 테이블에 걸쳐 단일 행에 존재합니다. 리스트는 기본 키 또는 인덱싱되지 않은 보조 키로 식별됩니다. 리스트는 텍스트 필드 또는 DuckDB INTEGER{] 리스트로 인코딩됩니다. 변형은 INSERT ON CONFLICT UPDATE 또는 MERGE INTO를 사용하여 수행됩니다.

두 번째는 fkey-register로, 정수 레지스터의 읽기 및 쓰기를 수행합니다. DuckDB에서 해당 레지스터는 두 개의 테이블에 저장됩니다. logical 테이블은 키를 물리적 ID(외래 키 사용)에 매핑합니다. physical 테이블은 물리적 ID를 값에 매핑합니다. 읽기에는 두 테이블 간의 간단한 JOIN을 사용합니다. 쓰기는 물리적 행을 업데이트하거나, 새로운 물리적 행을 생성하고 이에 대한 논리적 포인터를 변경하여 수행됩니다. 방금 이 워크로드를 켜는 데 성공했습니다; 실행되지만 아직 완성되지 않았습니다.

라이선스

Copyright © 2026 Jepens, LLC

이 프로그램 및 관련 자료는 https://www.eclipse.org/legal/epl-2.0에서 확인할 수 있는 Eclipse Public License 2.0의 조건에 따라 제공됩니다.

이 소스 코드는 Eclipse Public License v. 2.0에 명시된 가용성 조건이 충족되는 경우 다음 보조 라이선스에 따라 제공될 수도 있습니다: Free Software Foundation에서 발행한 GNU General Public License 버전 2 또는 (선택에 따라) 이후 버전, 단 GNU Classpath Exception이 적용되며 이는 https://www.gnu.org/software/classpath/license.html에서 확인할 수 있습니다.

도구 다운로드