[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

First Time Ziggy

Zig JS 문법을 사용했다면 인터페이스 상으로 익숙하게 접할 수 있는 언어. 보기에는 JS같지만 Rust의 향기가 많이 난다. Rust의 경우 새로 도입되는 개념들이나, 독자적인 기능들이 많아 접근이 쉽지 않았는데, 오히려 그런 부분에서는 C와 유사한 부분들이 많이 보여서 좋았다. 그 안에서도 메모리를 관리나 코드 관리 차원에서 명시성을 주요하게 가져간다는 점이 Go와 닮은 듯하다. C와 거의 같다고 해도 될 정도로 호환이 잘 되며, 라이브러리도 내가 원하는 헤더파일을 가져와서 그 기능을 어렵지 않게 붙여 쓸 수 있도록 되어 있다....

January 22, 2025

[Networks] Unix Socket

Unix socket Unix 소켓은 동일 호스트 내에서 프로세스 간 통신 (IPC, Inter-Process Communication)을 가능하게 하는 기능이다. 이는 네트워크 소켓과 유사한 API를 사용하지만, TCP/IP프로토콜을 사용하지 않고 로컬 파일 시스템을 기반으로 작동한다. Unix 도메인 소켓(UDS)는 주로 성능 및 메모리 효율성을 위해 사용되며, TCP소켓보다 더 빠른 통신을 지원한다. 특징 및 장점 로컬 통신: 동일 호스트 내에서 통신이므로, 속도가 빠르다. FS기반: 이는 포트를 통해 연결되지 않고, 파일시스템의 경로를 통해 식별되어 일반적인 파일처럼 다룰 수 있다....

November 30, 2024

[Computer Networks] Local and Private Network IPs

In general, developers often use non-public IP like 192.168.1.111, 127.0.0.1…etc. What’s the difference between them? And why there are various ranges for Private usage IPs? Loopback IP At first, Let’s talk about Loopback IP. Loopback IP, which helps individual host to interconnect between processes using port number, is defined in RFC3330. Be specific, it includes range of 127.0.0.0/8 and we use 127.0.0.1 (as known as localhost) in common. That means we can use other CIDR blocks like 127....

November 23, 2024

Base Policy

BASE 원칙 BASE원칙은 설계 철학 중 하나로, 분산 시스템 내에서 데이터 일관성을 완화하면서도 가용성과 성능을 극대화하기 위한 것이다. 이는 ACID원칙과는 대조적으로, 대규모 분산 시스템(특히 NoSQL)에서 자주 적용된다. BASE는 다음 세 가지 핵심 개념의 약자이다. Basically Available Soft State Eventually Consistent 아래에서 조금 더 자세히 살펴보자. Basically Available 시스템이 항상 가용성을 유지하며, 일부 노드나 부분적인 장애가 발생하더라도 대부분의 요청에 대해 응답 가능해야함을 의미한다. 네트워크 장애나 서버 장애가 시스템의 완전한 중단을 초래하지 않음....

November 23, 2024

CAP & Consistency Model

CAP이론과 일관성 모델 CAP이론은 분산 시스템에서 다음 세 가지 속성을 동시에 만족할 수 없음을 설명한다. 일관성: 모든 노드가 같은 데이터를 반환함. 가용성: 모든 요청이 응답 받을 수 있음. 네트워크 분할 허용: 네트워크 장애에도 시스템이 동작함. 분산 시스템 설계자는 이 중 두 가지를 선택해야 하고, 선택에 따라 적합한 일관성 모델을 결정해야한다. CP(Consistency & Partition Tolerance) 강한 일관성을 유지하지만 일부 요청이 거부될 수 있음 (Zookeeper) 데이터의 정확성과 신뢰성이 중요한 곳에서 적합하다. 특히 금융 시스템에서 쓰인다....

November 23, 2024

Consistency Model

Consistency Model 분산 컴퓨팅에서 일관성 모델은 분산 시스템 내 데이터의 일관성을 유지하기 위한 규칙과 매커니즘을 정의해둔 것이다. 이는 분산 환경에서 데이터가 여러 노드에 걸쳐 저장되고 처리되는 상황에서 발생 가능한 데이터의 불일치를 해결하거나 최소화하기 위한 것이다. 분산 시스템의 설계는 CAP이론과 같은 제약 속에서 일관성, 가용성, 분할 내성을 균형 있게 고려해야한다. Strong Consistency 모든 클라이언트가 동일한 시점에 동일한 데이터를 보장받는다. 즉, 특정 노드에서 데이터를 업데이트하면 모든 노드가 즉시 해당 변경을 반영하는 모델이다. 데이터의 정확성과 신뢰성이 높다....

November 23, 2024

[Database] Db Block Io

테이블 스캔 방식에 따른 DB Block IO 전략 데이터베이스가 쿼리에서 요구하는 데이터를 검색하기 위해 테이블에 접근하는 방식의 종류는 다양하다. 가장 주요하고 크게는 인덱스를 활용하는지에 따라 갈리고, 인덱스를 어떤 방식으로 스캔할지에 대해서도 종류가 나뉜다. 각 스캔 방식들은 내부 작동 방식에 따라 서로 다른 Block IO 전략을 가지게 되는데, 이러한 내부 작동의 차이를 이해하면 왜 DB가 해당 방식을 사용했는지에 대한 이해도를 높일 수 있다. Block IO 데이터베이스에서 IO를 하는 단위를 Block으로 하기 때문에, DB 엔진에 따라 1회의 IO에서 8KB내지 16KB의 데이터를 불러온다....

November 11, 2024

[Nix] Nix 1

NixOS NixOS 는 리눅스 배포판 중 하나로, 평소 잘 아는 Debian, Red Hat(RHEL) 등과는 별도의 계열을 가지는 배포판이다. Nix 패키지 관리 시스템 을 기반으로 설계되어, 아래와 같은 특성을 가진다. 재현성: 소프트웨어 패키지를 격리된 환경에서 빌드하고, 의존성을 통제해 높은 재현성을 확보한다. 실제 작성 시에도 외부 패키지들의 버전을 세밀하게 기록하여 재현에 차질이 없도록 한다. 선언적: 소프트웨어 패키징에 특화된 선언적 프로그래밍 언어 Nix를 사용한다. 신뢰성: 한 패키지를 업데이트하는 일이 다른 패키지를 망가뜨리지 않도록 보장한다....

November 10, 2024

Intern Review

인턴 기간 진행했던 일들 + 배운 내용과 생각을 정리한다. 기록을 안 하면 큰 줄기만 기억하고 디테일은 까먹을게 뻔하다. Object Storage 리소스 추가 처음 진행했던 일이다. 전반적인 테라폼 프로바이더 프로젝트의 구조를 파악하고, Object Storage에 대한 테라폼 프로바이더를 제공하는 것을 목적으로 했다. 기존과 조금 다른 형태의 코드 작성이 필요했었는데, 그 이유는 아래와 같다. NCP의 Object Storage의 경우 AWS S3 Compatible API를 사용하고 있어 AWS SDK와의 호환성을 확인해야함. VPC 종속의 리소스가 아니어서 기존과 조금 다른 형태로 생성과 삭제를 확인해야함....

October 27, 2024