728x90 분류 전체보기451 시스템 성능 엔지니어링: 네트워크 기초 개념 정리 브렌던 그렉의 『시스템 성능 엔지니어링』을 읽다 보면 네트워크 장에서 익숙하지만 정확히 구분하기 어려운 용어들이 많이 나온다. 예를 들어 전송, 버퍼, 윈도, TCP 오프로드, ICMP, CIDR, backlog 같은 단어들은 모두 들어본 적은 있지만, 막상 성능 문제를 분석할 때는 헷갈리기 쉽다.이번 글에서는 지금까지 정리한 네트워크 관련 질문들을 하나의 흐름으로 묶어 정리한다.1. “전송”이라는 번역어의 여러 의미네트워크 문맥에서 한국어로 전송이라고 번역되는 영어 표현은 하나가 아니다.대표적으로 다음 표현들이 있다.영어 표현자연스러운 번역의미transmission전송, 송신비트나 신호를 실제 매체에 실어 보냄transport전송, 운반TCP/UDP 같은 종단 간 데이터 운반 기능transportati.. 독서(Reading)/시스템 성능 엔지니어링 2026. 6. 3. 복합 인덱스와 실무 인덱스 설계 기준 지난 글에서는 단일 인덱스를 정리했다.단일 인덱스는 하나의 컬럼을 기준으로 만든 인덱스다.CREATE INDEX idx_users_emailON users(email);하지만 실무 쿼리는 보통 이렇게 단순하지 않다.SELECT *FROM ordersWHERE user_id = 10 AND status = 'PAID'ORDER BY created_at DESC;조건이 여러 개 있고,정렬도 함께 들어간다.이럴 때 등장하는 것이 복합 인덱스다.1. 복합 인덱스란?복합 인덱스는 여러 컬럼을 묶어서 만든 인덱스다.CREATE INDEX idx_orders_user_status_createdON orders(user_id, status, created_at);이 인덱스는 다음 세 컬럼을 함께 사용한다.user_i.. 프로그래밍공부(Programming Study)/CS-데이터베이스(Database) 2026. 5. 1. 단일 인덱스는 어떻게 동작할까? 지난 글에서는DB가 데이터를 찾는 기본 방식과 B+Tree 구조를 정리했다.핵심은 이것이었다.인덱스는 DB가 테이블 전체를 읽지 않기 위해 사용하는 정렬된 자료구조다.이번 글에서는 가장 기본적인 인덱스인단일 인덱스를 살펴본다.단일 인덱스는 말 그대로하나의 컬럼을 기준으로 만든 인덱스다.1. 단일 인덱스란?예를 들어 users 테이블이 있다.CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), age INT, created_at DATETIME);여기서 email로 자주 조회한다면다음과 같이 인덱스를 만들 수 있다.CREATE INDEX idx_users_emailON users(emai.. 프로그래밍공부(Programming Study)/CS-데이터베이스(Database) 2026. 4. 30. DB는 데이터를 어떻게 찾을까? - Full Scan과 B+Tree 데이터베이스 인덱스를 공부하다 보면가장 먼저 이런 말을 듣는다.인덱스를 걸면 조회가 빨라진다.틀린 말은 아니다.하지만 이 말만 알고 있으면 인덱스를 제대로 이해하기 어렵다.인덱스는 단순히 "빠르게 해주는 기능"이 아니다.조금 더 정확히 말하면,DB가 테이블 전체를 읽지 않기 위해 사용하는 정렬된 자료구조이다.이번 글에서는 인덱스를 보기 전에DB가 데이터를 어떻게 찾는지부터 정리해본다.1. 인덱스가 없으면 어떻게 찾을까?예를 들어 이런 테이블이 있다고 하자.CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), age INT);그리고 이런 쿼리를 실행한다.SELECT *FROM usersWHER.. 프로그래밍공부(Programming Study)/CS-데이터베이스(Database) 2026. 4. 29. 실제 메모리 문제를 분석하는 흐름 여기까지 오면서 꽤 많은 걸 봤다.malloc이 어떻게 메모리를 가져오는지내부에서 어떻게 나눠 쓰는지왜 free해도 RSS가 안 줄어드는지smaps로 메모리를 어떻게 나눠서 보는지eBPF로 어디서 할당되는지 추적하는 방법이제 남는 건 하나다.“그래서 실제로 문제 터지면 어떻게 접근해야 하지?”이건 개념보다 흐름이 중요하다.대부분의 시작은 여기다메모리 문제는 보통 이렇게 시작한다.RSS가 계속 증가한다OOM이 난다latency가 갑자기 튄다여기서 흔히 하는 실수가 있다.“메모리 누수인가?”바로 결론부터 내리는 거다.그런데 실제로는 그 전에 확인해야 할 게 있다.1단계: “진짜 문제인지”부터 확인한다처음 해야 할 건 단순하다.이게 진짜 문제인지 아닌지 구분예를 들어:RSS 증가 → 무조건 문제 ❌page c.. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 10. eBPF hook 종류 (kprobe, tracepoint, uprobe) 앞 글에서 eBPF가 내부적으로 어떻게 동작하는지 봤다.VM 위에서 실행되고verifier가 검사하고map으로 데이터 주고받는다여기까지 보면 자연스럽게 이런 질문이 나온다.“그래서 이걸 어디에 붙이는 건데?”eBPF는 그냥 실행되는 게 아니라어떤 이벤트에 붙어서 실행된다고 했었다.이때 등장하는 개념이 hook이다.hook은 “끼어드는 지점”이다이걸 너무 어렵게 생각할 필요 없다.특정 순간에 내가 만든 코드를 같이 실행시키는 지점예를 들면 이런 느낌이다.함수 호출 ↓(여기서 끼어듦) ↓원래 함수 계속 실행즉,원래 흐름은 그대로 두고, 중간에 살짝 관찰한다대표적으로 많이 쓰는 3가지실무에서 거의 항상 나오는 게 이 3개다.kprobetracepointuprobe이 셋만 구분해도 80%는 해결된다.kprobe.. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 9. eBPF는 내부적으로 어떻게 동작할까 앞 글에서 eBPF가 왜 안전한지까지 봤다.커널을 직접 수정하는 건 아니고hook에 붙어서 실행되고verifier가 위험한 코드를 막는다여기까지 보면 자연스럽게 이런 궁금증이 생긴다.“그래서 이 코드는 도대체 어떻게 실행되는 거지?”커널 안에서 돌아간다고 했는데,그게 그냥 C 코드가 그대로 들어가는 건 아닐 거다.eBPF는 “그대로 실행되는 코드”가 아니다처음에 많이 오해하는 부분이 이거다.“내가 C로 짠 코드가 커널에서 그대로 실행된다”그건 아니다.실제로는 중간에 한 단계가 더 있다.흐름을 보면C 코드 ↓eBPF bytecode ↓커널에서 실행즉,eBPF는 일종의 “가상 머신(VM)” 위에서 돌아간다왜 굳이 VM을 쓰는 걸까이건 이유가 꽤 명확하다.1. 안전성직접 커널 코드 실행 ❌제한된 명령만 실행 .. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 8. eBPF는 왜 안전한가 (그리고 언제 위험한가) 앞 글에서 eBPF로 malloc을 추적하는 방법을 봤다.코드를 바꾸지 않고도:어떤 함수에서 malloc이 호출되는지 보고얼마나 할당되는지 보고흐름까지 따라갈 수 있다여기까지 보면 한 번쯤 이런 생각이 든다.“이거 커널에서 코드 실행하는 거잖아… 위험한 거 아닌가?”맞는 질문이다.그리고 이걸 제대로 이해해야 eBPF를 안심하고 쓸 수 있다.eBPF가 위험해 보이는 이유eBPF를 처음 보면 불안한 이유는 단순하다.커널에서 실행됨동적으로 로드됨외부에서 코드 주입 가능이걸 그대로 받아들이면 거의 이런 느낌이다.“커널에 코드 꽂아 넣는 거 아냐?”그런데 실제로는 그렇게 동작하지 않는다.eBPF는 커널을 “수정”하지 않는다이건 중요한 포인트다.eBPF는 커널 코드를 바꾸지 않는다대신 이렇게 한다.커널 이벤트 발생.. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 7. eBPF로 메모리를 추적하는 방법 앞 글에서 /proc/smaps로 메모리를 분석하는 방법을 봤다.RSS가 뭔지anon인지 file인지실제로 어떤 메모리가 늘고 있는지이제 어느 정도 “상태”는 볼 수 있게 된다.그런데 여기서 한 번 더 막힌다.“이게 왜 늘고 있는지는 어떻게 알지?”smaps는 결과를 보여줄 뿐이다.원인을 알려주지는 않는다.예를 들어:heap이 늘어나고 있는 건 알겠는데어떤 코드가 malloc을 계속 호출하는지는 모른다이걸 보려면 결국 실행 흐름을 따라가야 한다.여기서 eBPF가 등장한다이 시점에서 자연스럽게 나오는 게 eBPF다.이걸 처음 보면 좀 과하게 느껴진다.“커널에서 코드 실행? 이걸 왜 써야 하지?”그런데 지금 상황을 보면 이유가 명확하다.우리가 알고 싶은 것언제 malloc이 호출되는지얼마나 할당되는지어디서 .. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 6. /proc/smaps로 메모리를 제대로 분석하는 방법 앞 글에서 free를 해도 RSS가 줄어들지 않는 이유를 봤다.핵심은 이거였다.free는 OS에 반환이 아니라 재사용 표시다RSS에는 여러 종류의 메모리가 섞여 있다여기까지 이해하면 자연스럽게 이런 생각이 든다.“그럼 지금 보이는 메모리가 진짜 문제인지 어떻게 판단하지?”이걸 하려면 결국 한 번은 /proc으로 내려가야 한다.왜 top이나 htop만 보면 부족할까보통 메모리 문제를 처음 보면 이렇게 본다.tophtopps여기서 RSS를 보고 판단한다.그런데 여기서 한 번씩 막힌다.RSS는 늘어나는데, 원인이 뭔지 모르겠다이유는 단순하다.RSS는 결과만 보여주고, 구성은 안 보여준다예를 들어 RSS가 1GB라고 해도:1GB가 전부 malloc일 수도 있고절반은 page cache일 수도 있고mmap 파일일.. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 5. free를 했는데 왜 RSS는 줄어들지 않을까 앞 글에서 malloc은 대부분 빠르지만,특정 순간에는 느려질 수 있다고 정리했다.그런데 실제로 메모리 관련해서 더 자주 마주치는 문제는 따로 있다.free를 했는데 메모리 사용량이 그대로다처음 보면 꽤 당황스럽다.free(p);코드상으로는 분명히 메모리를 해제했다.그런데 top이나 htop 같은 걸 보면 RSS가 그대로다.이건 버그가 아니라,메모리가 그렇게 동작하도록 설계되어 있기 때문이다.free는 “메모리 반환”이 아니다여기서 한 번 개념을 다시 잡고 가야 한다.우리가 흔히 생각하는 건 이거다.malloc → OS에서 가져옴free → OS에 돌려줌하지만 실제로는 다르다.free는 OS에 메모리를 돌려주는 게 아니라,malloc에게 “이거 다시 써도 된다”고 알려주는 동작이다즉, 내부에서는 이렇게 .. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 4. O(1)인데 왜 느려질까 (메모리 성능의 진짜 문제) 앞에서 malloc이 내부적으로 메모리를 어떻게 관리하는지 정리했다.free된 블록은 다시 재사용하고크기별로 bin에 넣어두고필요하면 쪼개고(splitting)다시 합치기도(coalescing) 한다여기까지 보면 자연스럽게 이런 생각이 든다.“이 정도면 꽤 단순한데? 대부분 빠른 거 아닌가?”실제로도 맞다.대부분의 malloc/free는 빠르다.그런데 문제는 “대부분”이라는 말에 있다.실제 시스템에서는 평균적으로 빠른 것보다,가끔 느려지는 순간이 있는지가 더 중요할 때가 많다.그리고 메모리 문제는 딱 그 지점에서 터진다.O(1)이라는 말부터 조금 다르게 봐야 한다처음에 많이 헷갈리는 부분이 이거다.O(1)이면 빠르다는 뜻 아닌가?보통은 그렇게 받아들이기 쉬운데, 정확히는 그렇지 않다.O(1)은“항상 빠르.. 프로그래밍공부(Programming Study)/CS-운영체제(OS) 2026. 4. 3. 이전 1 2 3 4 ··· 38 다음 728x90