Teno's Lab
Preview Image

[System Design] Modular Monolith

🧩 Module 대규모 시스템을 구축할 때 흔히 저지르는 실수는 모듈을 단순히 ‘기능별로 분류된 폴더’로 취급하는 것입니다. 그러나 엔지니어링 관점에서 모듈은 추상화의 벽(Abstraction Wall)입니다. 내부의 복잡성을 외부로 유출하지 않으면서도, 시스템의 전체적인 정합성을 유지하기 위한 논리적 요새여야 합니다. 모듈화가 실패한 모놀리스는 결...

Preview Image

[Data Structure] Hash

컴퓨터 과학의 역사는 거대한 데이터 더미 속에서 원하는 정보를 얼마나 빨리 찾아낼 수 있느냐는 질문에 대한 답을 찾아가는 과정이었습니다. 데이터가 적을 때는 순차적으로 훑는 것만으로도 충분했으나, 데이터가 기하급수적으로 늘어남에 따라 우리는 선형적인 탐색 시간을 허용할 수 없게 되었습니다. 정렬된 데이터를 전제로 한 이진 탐색조차 $O(\log n)$...

Preview Image

[JVM Internal] JVM Memory Layout

자바 개발자가 new 키워드를 호출하는 순간, 추상적인 소스 코드는 운영체제가 관리하는 물리적인 메모리 영역으로 하강합니다. 우리는 흔히 객체를 ‘데이터와 행위의 집합’으로 정의하지만, JVM 실행 엔진의 관점에서 객체는 철저하게 계산된 바이트의 연속(Sequence of Bytes)일 뿐입니다. 자바가 고성능 시스템 언어인 C++로 작성된 HotS...

Preview Image

[Distributed System] Logical Time과 Vector Clock

우리는 ‘지금 이 순간’이라는 개념이 우주 어디에서나 보편적이라고 믿는 경향이 있습니다. 하지만 분산 시스템의 세계에 발을 들이는 순간, 이 직관은 가장 먼저 무너져야 할 허상입니다. 서로 떨어진 두 서버가 “정확히 같은 시간”에 데이터를 수정했다고 주장할 때, 그 ‘동시성’을 입증할 수 있는 절대적인 기준점은 존재하지 않습니다. 흔히 우리는 NTP...

Preview Image

[Distributed System] CAP와 PACELC 이론

엔지니어링의 역사는 추상화와의 끊임없는 사투였습니다. 우리는 복잡한 하드웨어의 동작을 운영체제라는 인터페이스 뒤로 숨겼고, 이제는 전 세계에 흩어진 수천 대의 서버를 마치 하나의 거대한 컴퓨터처럼 다루려 시도합니다. 그러나 로컬 함수 호출과 원격 프로시저 호출(RPC) 사이의 간극을 메우려는 이 대담한 시도는 종종 비참한 실패로 끝납니다. 이 실패의...

Preview Image

[DB Theory] Normalization

🧩 Relation 데이터베이스 설계의 여정은 릴레이션(Relation)이라는 개념을 정확히 해부하는 것에서 시작합니다. 흔히 실무에서 ‘테이블’과 ‘릴레이션’을 혼용하여 부르곤 하지만, 정규화의 논리적 엄밀함을 확보하기 위해서는 이 둘을 철저히 구분해야 합니다. 테이블이 물리적인 저장 구조를 암시하는 용어라면, 릴레이션은 수학적 집합론에 뿌리를 둔...

Preview Image

[Computer Structure] CPU Cache와 False Sharing

현대의 CPU 클럭 속도는 기가헤르츠(GHz) 단위에 도달하여 나노초(ns) 미만의 간격으로 명령을 처리합니다. 반면 메인 메모리(DRAM)는 물리적 구조상의 한계로 인해 데이터 요청 후 응답까지 약 100ns 이상의 시간이 소요됩니다. 이 수백 배에 달하는 속도 격차를 메우기 위해, 하드웨어는 연산 장치와 메모리 사이에 SRAM 기반의 고속 저장소인...

Preview Image

[OS] I/O Models

🧩 I/O Model 우리가 작성한 코드가 하드웨어의 물리적 실체에 닿기까지는 운영체제라는 거대한 중재자가 놓여 있습니다. 이 인위적인 세계에서 애플리케이션은 스스로 데이터를 읽거나 쓸 권한이 없으며, 오직 ‘시스템 콜(System Call)’이라는 엄격한 통로를 통해 커널(Kernel)에게 작업을 대행해 달라고 요청해야 합니다. 프로세스의 추상화...

Preview Image

[Data Structure] Tree

우리는 흔히 데이터를 ‘쌓는다’고 표현하지만, 실제 엔지니어링의 세계에서 데이터는 단순히 적재되는 대상이 아닙니다. 데이터 사이의 관계가 선형적인 순서를 넘어 복잡한 위계를 형성하기 시작할 때, 배열이나 연결 리스트와 같은 1차원적 접근은 곧 치명적인 성능 병목에 봉착합니다. 수억 개의 데이터 속에서 단 몇 번의 연산만으로 원하는 정보를 찾아내야 하는...