[RDBMS with zig] - Storage

Zig의 allocator와 comptime에 대한 이해를 더하기 위해, facebook의 RocksDB를 기반으로 하는 RDBMS를 구성한다. 데이터를 저장하기 위한 직렬화 / 역직렬화를 수행하는 코드를 작성한다. 모든 코드는 https://notes.eatonphil.com/zigrocks-sql.html 레포지토리를 기반으로 하며, 추가적인 기능을 구현하는 내용을 포함한다. 이제는 RocksDB에 데이터를 저장할 때의 직렬화 및 데이터 조회 시 역직렬화를 위한 코드를 작성한다. Serialize & Deserialize pub fn serializeInteger(comptime T: type, buf: *std.ArrayList(u8), i: T) !void { var length: [@sizeOf(T)]u8 = undefined; std.mem.writeInt(T, &length, i, std....

March 16, 2025

[RDBMS with zig] - RocksDB Interface

Zig의 allocator와 comptime에 대한 이해를 더하기 위해, facebook의 RocksDB를 기반으로 하는 RDBMS를 구성한다. RocksDB Header file을 불러와 직접적으로 RocksDB API와 소통하는 인터페이스를 제작한다. 모든 코드는 https://notes.eatonphil.com/zigrocks-sql.html 레포지토리를 기반으로 하며, 추가적인 기능을 구현하는 내용을 포함한다. RocksDB Interface RocksDB는 고성능의 Persistent Key-Value Store로 c++로 작성되었기에 zig에서는 빌드된 내용을 header file을 import하여 소통할 수 있다. Zig는 내부적으로 Clang 컴파일러를 내장하고 있어, @cimport()를 사용하여 c 헤더파일을 가져오는 경우 내부적으로 Clang을 활용하여 AST를 만들고 이를 Zig 코드로 변환하는 과정을 거친다....

March 9, 2025

[RDBMS with zig] - Parser

Zig의 allocator와 comptime에 대한 이해를 더하기 위해, facebook의 RocksDB를 기반으로 하는 RDBMS를 구성한다. Lexer 에서 전달한 Token 배열을 기반으로 각 인자들을 추출하는 Parser를 제작한다. 모든 코드는 https://notes.eatonphil.com/zigrocks-sql.html 레포지토리를 기반으로 하며, 추가적인 기능을 구현하는 내용을 포함한다. Parser Parser 는 Lexing 파트에서 각 역할 별로 나눠둔 Segment들을 분석하여 내부의 인자들을 해당 Token의 역할에 맞는 AST로 변환하는 과정을 포함한다. 생성된 AST들은 추후 Executor에게 전달되어 실질적인 구현체(RocksDB)에 전달되어 그에 맞는 Operation을 수행한다. Ready for...

March 9, 2025

[RDBMS with zig] - Lexer

Zig의 allocator와 comptime에 대한 이해를 더하기 위해, facebook의 RocksDB를 기반으로 하는 RDBMS를 구성한다. 가장 먼저 SQL문을 분해하고 분류하는 Lexer를 제작한다. 모든 코드는 https://notes.eatonphil.com/zigrocks-sql.html 레포지토리를 기반으로 하며, 추가적인 기능을 구현하는 내용을 포함한다. Ready for 일단 가독성 및 효율성을 위한 유틸리티를 제작한다. pub const String = []const u8; pub const Error = String; pub fn Result(comptime T: type) type { return union(enum) { val: T, err: Error, }; } Lexer Lexer는 SQL문을 분석하는 도구를 말한다....

March 8, 2025

[Networks] MTLS

mTLS with cfssl NOTE: 개념에 대해 설명하지 않고, 간단한 구현을 진행하는 글입니다. mTLS와 CFSSL에 대해서는 아래 글을 참고해주세요. mTLS: rfc8705 cfssl: cfssl mTLS의 경우는 요 영상을 통해서도 어렵지 않게 접할 수 있다 :) 토스ㅣSLASH 23 - 고객 불안을 0으로 만드는 토스의 Istio Zero Trust 다만 위 영상에서 소개되는 istio의 경우, mTLS를 위한 다양한 기능을 제공하기에 어렵지 않게 프로덕션 환경에서 mTLS를 적용할 수 있다. 이 글에서 진행하는 내용은 istio를 이용한 것은 아니며, mTLS를 위해서 자체 CA를 구축하고, 이를 기반으로 두 애플리케이션이 연결될 수 있도록 하는 것을 목적으로 한다....

October 20, 2024

[System Programming] Path & Exec

ls나 cd는 뭔데 그냥 입력해도 동작하나? 예약어의 기원이 궁금해 환경변수 정리 cc: c compiler gcc: gnu compiler collection. GNU 프로젝트의 일환으로 개발되어 쓰이는 컴파일러. 리눅스에서는 gcc가 기본으로, gcc가 자동으로 cc로 연결되어 사용되도록 함. 일반적인 실행파일의 경우, 해당 실행파일이 존재하는 디렉토리에 접근해야 실행 가능하게된다. 일반적인 바이너리 파일을 열게 되면, 다음과 같이 나온다(2진수 포맷). 이렇게 기계어로 정리된 파일을 실행파일로 사용하게 된다. xxd -b binary --- ... 00e625a8: 10111010 01010101 01001111 10110010 11010101 11010110 ....

September 30, 2024