RDB 에서 큰 컬럼을 인덱스로 잡으면 안되는 이유B-Tree 는 기본적으로 페이지 사이즈 와 저장할 수 있는 원소의 개수를 고정값으로 사용한다. 하지만 우리가 실제로 페이지에 저장하는 값은 가변적인 크기를 가지고 있기 때문에 필연적으로 물리적으로 저장해야할 개수가 다 차기도 전에 페이지가 넘치는 상황에 부딪히게 된다. 예를 들어 100KB 를 저장하는 페이지에 위와 같이 데이터를 저장한 상태이다. 여Feb 26, 2026·2 min read·49
Python 톺아보기 1화 - 토큰화(Tokenization)Python 에서는 코드를 의미 있는 단위로 나누기 위한 토큰화 작업을 거친다. 이 작업을 거치면 코드는 토큰으로 분해된다. 오늘은 tokenize 모듈을 사용해서 이를 한번 눈으로 보고 확인해보도록 하자. import tokenize import io # 토큰 타입 이름 확인 print("주요 토큰 타입:") print(f" NAME: {tokenize.NAME} - 변수명, 함수명 등") print(f" NUMBER: {tokenize...Feb 6, 2026·4 min read·22
Redis ZSETZSET 이란? ZSET 은 Redis 에서 unique 한 string 들이 score 순서대로(in order) 정렬되어 있는 자료구조이다. 그래서 Leader board 나 Rate limiter 에 쓰일수 있습니다. 기본적으로 자료구조가 Hash Table + Skip List(스킵 리스트) 두가지 자료구조를 합쳐서 사용하기 때문에 접근에는 O(1), 추가에는 O(log N) 이 소요됩니다. 추가(ZADD) ZADD KEY [NX | X...Feb 2, 2026·4 min read·30
좀비 프로세스로 인한 트러블 슈팅기서론 크롤러를 운영하다보면 규모 및 속도에 따라서 크게 두가지 부류로 크롤러를 운영하게 된다. html 만을 http request 로 가져와서 Parsing 하는 경우 javascript 들이 로딩되고 실행되고 나서 데이터를 가져오기 위해 selenium 같은 헤비한 크롤러를 돌리는 경우 이 외에도 여러 방식이 더 있을 수 있지만 보통은 이 두가지 부류로 크롤링을 하게 된다고 생각한다. 첫번째 http request 의 경우 별도의 프...Jan 19, 2026·6 min read·29
Postgresql 커버링 인덱스Index? Index 란 무엇이고 왜 중요할까? Index 는 데이터베이스에서 File System 에 일어나는 Random I/O 를 줄이기 위해 존재한다. 랜덤 I/O 란, 해당 데이터가 저장된 Array 에 우리가 특정 주소값 i 를 넣어 조회하듯 일어나는 이벤트를 뜻한다. 그럼 느리지 않을거 같은데 왜 랜덤 I/O 를 줄여야 하지? 라는 고민이 충분히 들수도 있다. 이러한 이유는 File System 까지 가는 계층에서 드는 비용과 전...Jan 18, 2026·6 min read·37
Postgresql MVCCpostgresql 의 MVCC 를 살펴보면 아주 재미있다. MVCC(Multi-Version Concurrency Control) 은 동시성을 처리하는 핵심아이디어로 기본적인 전제로 “읽기는 쓰기를 블록해선 안되고, 쓰기도 읽기를 블록하지 않는다” 라는 아이디어 에서 시작한다. 이 개념을 적용하기 위해서는 Postgresql 에서는 xmin 과 xmax 를 활용한다. Postgresql 에서 테이블안에 있는 데이터는 튜플(Tuple) 형태로 ...Jan 14, 2026·6 min read·29
[짧은 글] 1024, 2048, 4096 크기를 지키는게 왜 중요할까?개요 프로그래밍을 하다보면 무언가 읽기 위해 buffer 를 설정할때 꼭 버퍼의 사이즈가 512, 1024, 2048, 4096, … 등으로 올라가는 것을 확인할 수 있다. 왜 이런것일까? 운영체제 하드웨어마다 다르겠지만 보통 하드웨어에서는 섹터(Sector) 단위로 데이터를 읽어온다. 예전 하드웨어에서는 512KB 를 읽어서 로드해주고, 최신 하드웨어에서는 4096KB 크기로 읽어서 올려준다. 즉, 내가 1KB 를 읽던, 2KB 를 읽던 하드...Dec 28, 2025·5 min read·49