콘텐츠로 이동

CSBE 키워드 누적 목록

챕터별로 등장하는 CS 키워드를 누적 관리한다. - 새 키워드: 해당 챕터에서 처음 등장 - 재등장 키워드: 이전 챕터에서 이미 다뤘고 다시 연결되는 개념


Ch.1 - 왜 CS를 공부해야 하는가

키워드 분류 한 줄 설명
Computational Thinking 새 키워드 문제를 CS 개념으로 분해하고 해결하는 사고방식
Keyword (키워드) 새 키워드 CS 개념을 지칭하는 용어, 검색과 AI 활용의 출발점
WORD size 새 키워드 CPU가 한 번에 처리하는 데이터의 기본 단위 크기
JD (Job Description) 새 키워드 채용 공고에 명시된 직무 요구사항

키워드 연관 관계

graph LR
    KW["Keyword<br/>(키워드)"]
    CT["Computational<br/>Thinking"]
    WS["WORD size"]
    JD["JD"]

    KW -->|"키워드를 알아야<br/>분해할 수 있다"| CT
    KW -->|"키워드를 모르면<br/>검색도 못 한다"| JD
    KW -->|"키워드를 모르면<br/>생기는 일의 예시"| WS

Ch.2 - 로그를 뺐더니 빨라졌어요? (1) - System Call과 커널

키워드 분류 한 줄 설명
Bytecode 새 키워드 소스 코드를 실행 직전 단계로 변환한 중간 코드
stdout 새 키워드 프로그램의 기본 출력 통로, fd 1번
File Descriptor (fd) 새 키워드 운영체제가 열린 파일/자원에 부여하는 정수 번호
System Call 새 키워드 사용자 프로그램이 커널에게 작업을 요청하는 인터페이스
Kernel 새 키워드 운영체제의 핵심 프로그램, 하드웨어 자원 관리자
User Mode / Kernel Mode 새 키워드 CPU의 두 가지 권한 수준
write() 새 키워드 파일/자원에 데이터를 쓰는 System Call
CPU Cycle 새 키워드 CPU의 기본 동작 단위, 성능 측정의 기준
Buffer 새 키워드 I/O 효율을 위해 데이터를 임시로 모아두는 메모리 공간
flush 새 키워드 버퍼의 데이터를 실제로 내보내고 비우는 행위
I/O 새 키워드 프로그램이 외부와 데이터를 주고받는 행위
Mode Switch 새 키워드 User Mode <-> Kernel Mode 전환
Throughput 새 키워드 단위 시간당 처리량, req/s
Latency 새 키워드 요청~응답 소요 시간, ms
VU 새 키워드 부하 테스트의 가상 사용자

키워드 연관 관계

graph LR
    print["print()"] --> stdout
    stdout --> fd["File Descriptor"]
    stdout --> buffer["Buffer"]
    buffer -->|flush| write["write() System Call"]
    fd --> write
    write --> MS["Mode Switch"]
    MS --> kernel["Kernel"]
    MS --> UM["User Mode"]
    MS --> KM["Kernel Mode"]
    MS --> cycle["CPU Cycle"]
    write --> IO["I/O"]
    print -.-> bytecode["Bytecode"]

Ch.3 - 로그를 뺐더니 빨라졌어요? (2) - CPU Bound와 I/O Bound

키워드 분류 한 줄 설명
CPU Bound 새 키워드 실행 속도가 CPU 연산 능력에 의해 제한되는 상태
I/O Bound 새 키워드 실행 속도가 I/O 속도에 의해 제한되는 상태
Blocking I/O 새 키워드 I/O 완료까지 호출 측이 멈추고 기다리는 방식
Non-blocking I/O 새 키워드 I/O 요청 후 바로 돌아오는 방식
Context Switch 새 키워드 실행 중인 프로세스/스레드를 다른 것으로 전환
GIL 새 키워드 CPython에서 한 번에 하나의 스레드만 바이트코드 실행 가능하게 하는 잠금
Event Loop 새 키워드 asyncio의 핵심 엔진, 단일 스레드에서 비동기 작업 스케줄링
Coroutine 새 키워드 실행을 중간에 멈췄다가 이어서 실행할 수 있는 함수
async/await 새 키워드 Python 비동기 프로그래밍 문법
Thread Pool 새 키워드 미리 생성된 스레드 묶음에 작업을 분배하는 구조
Process Pool 새 키워드 미리 생성된 프로세스 묶음에 작업을 분배하는 구조
Concurrency 새 키워드 여러 작업이 논리적으로 동시에 진행되는 것
Parallelism 새 키워드 여러 작업이 물리적으로 같은 순간에 실행되는 것
IPC 새 키워드 프로세스 간 데이터 교환 (Inter-Process Communication)
I/O 재등장 (Ch.2) I/O Bound의 "I/O"
Mode Switch 재등장 (Ch.2) Context Switch와 비교 대상
Throughput 재등장 (Ch.2) 벤치마크에서 req/s 비교에 사용
Latency 재등장 (Ch.2) 벤치마크에서 응답 시간 비교에 사용

키워드 연관 관계

graph LR
    CB["CPU Bound"] --> GIL
    IB["I/O Bound"] --> BIO["Blocking I/O"]
    IB --> NBIO["Non-blocking I/O"]

    GIL -->|"CPU Bound에서<br/>스레드 무의미"| TP["Thread Pool"]
    GIL -->|"우회"| PP["Process Pool"]

    NBIO --> EL["Event Loop"]
    EL --> CR["Coroutine"]
    CR --> AA["async/await"]

    CB -->|"추천"| PP
    IB -->|"추천"| AA
    IB -->|"추천"| TP

    PP --> PAR["Parallelism"]
    TP --> CON["Concurrency"]
    EL --> CON

    CS["Context Switch"] --> TP
    CS --> PP

    ch2_io["Ch.2 I/O"] -.->|"I/O Bound의 I/O"| IB
    ch2_ms["Ch.2 Mode Switch"] -.->|"vs"| CS

Ch.4 - 프로세스와 스레드, 진짜로 이해하고 있는가

키워드 분류 한 줄 설명
Process 새 키워드 실행 중인 프로그램의 인스턴스, 독립적인 메모리 공간을 가진다
Thread 새 키워드 프로세스 안의 경량 실행 단위, Stack만 별도이고 나머지 메모리를 공유
PCB (Process Control Block) 새 키워드 운영체제가 프로세스를 관리하기 위한 자료구조
TCB (Thread Control Block) 새 키워드 운영체제가 스레드를 관리하기 위한 자료구조
Memory Layout 새 키워드 프로세스의 가상 주소 공간 구성 (Text, Data, Heap, Stack)
Text Segment 새 키워드 실행 코드(기계어)가 저장되는 Read-only 영역
Data Segment 새 키워드 전역/static 변수가 저장되는 영역
Heap 새 키워드 동적 할당 메모리 영역, 아래에서 위로 자란다
Stack 새 키워드 함수 호출 정보(Stack Frame)가 저장되는 고정 크기 영역
Stack Frame 새 키워드 함수 호출 시 Stack에 쌓이는 데이터 묶음 (매개변수, 지역변수, 복귀주소)
Virtual Memory 새 키워드 OS가 프로세스에게 제공하는 가상의 메모리 주소 공간
Physical Memory 새 키워드 실제 RAM, 크기가 물리적으로 고정
Page / Page Table 새 키워드 가상 메모리를 4KB 블록으로 관리, Page Table이 가상→물리 주소 변환
Page Fault 새 키워드 물리 메모리에 없는 Page 접근 시 발생하는 인터럽트
OOM (Out of Memory) 새 키워드 사용 가능한 메모리가 모두 소진된 상태
RSS (Resident Set Size) 새 키워드 프로세스가 실제로 물리 메모리에 올려놓은 데이터 크기
Thrashing 새 키워드 Page In/Out이 끊임없이 반복되어 시스템이 극도로 느려지는 상태
Context Switch 재등장 (Ch.3) PCB/TCB를 저장하고 복원하는 과정이라는 구체적 의미
Mode Switch 재등장 (Ch.2) Page Fault 시 User→Kernel 전환이 발생
Kernel 재등장 (Ch.2) Virtual Memory를 관리하는 주체, Page Fault 처리
GIL 재등장 (Ch.3) 스레드의 Heap 공유와 연결, Reference Counting 보호
Thread Pool / Process Pool 재등장 (Ch.3) 메모리 관점에서의 비용 차이를 이해
IPC 재등장 (Ch.3) 프로세스가 메모리를 분리하기 때문에 IPC가 필요

키워드 연관 관계

graph LR
    PROC["Process"] --> PCB
    THREAD["Thread"] --> TCB
    PROC --> ML["Memory Layout"]
    ML --> STACK["Stack"]
    ML --> HEAP["Heap"]
    ML --> DATA["Data Segment"]
    ML --> TEXT["Text Segment"]
    STACK --> SF["Stack Frame"]
    STACK -->|"넘치면"| SO["Stack Overflow"]
    HEAP -->|"끝없이 자라면"| OOM

    PROC --> VM["Virtual Memory"]
    VM --> PT["Page Table"]
    VM --> PM["Physical Memory"]
    PT --> PF["Page Fault"]
    PF -.->|"Ch.2"| MS["Mode Switch"]
    PM -->|"꽉 차면"| OOM
    VM --> RSS

    PROC -->|"전환 시"| CS["Context Switch<br/>(Ch.3)"]
    CS --> PCB
    THREAD -->|"Stack만 별도<br/>나머지 공유"| ML
    THREAD -.->|"Ch.3"| GIL

    ch3_tp["Ch.3 Thread Pool"] -.->|"메모리 공유"| THREAD
    ch3_pp["Ch.3 Process Pool"] -.->|"메모리 분리"| PROC

    style OOM fill:#f96,stroke:#333
    style SO fill:#f96,stroke:#333

Ch.5 - 동시성 제어의 기초 - Mutex에서 Deadlock까지

키워드 분류 한 줄 설명
Race Condition 새 키워드 여러 스레드가 공유 자원에 동시 접근 시 실행 순서에 따라 결과가 달라지는 상황
Critical Section 새 키워드 동시에 두 개 이상의 스레드가 실행하면 안 되는 코드 구간
Atomicity 새 키워드 연산이 "다 되거나 아예 안 되거나"하는 성질
Mutex / Lock 새 키워드 Critical Section에 한 번에 하나의 스레드만 들어갈 수 있게 하는 잠금 장치
Deadlock 새 키워드 두 개 이상의 스레드가 서로의 자원을 기다리며 영원히 멈추는 상태
Mutual Exclusion 새 키워드 자원을 한 번에 하나의 스레드만 사용할 수 있는 조건 (Deadlock 필요조건)
Hold and Wait 새 키워드 자원을 잡고 있으면서 다른 자원을 기다리는 상태 (Deadlock 필요조건)
No Preemption 새 키워드 다른 스레드의 자원을 강제로 빼앗을 수 없는 조건 (Deadlock 필요조건)
Circular Wait 새 키워드 A→B→A 순환 대기 구조 (Deadlock 필요조건)
Lock Ordering 새 키워드 Lock을 항상 정해진 순서로 잡아서 Deadlock을 방지하는 기법
Semaphore 새 키워드 동시에 N개 스레드까지 접근을 허용하는 카운팅 잠금
Starvation 새 키워드 Lock 경쟁에서 특정 스레드가 계속 밀려 실행 기회를 못 얻는 상태
Thread 재등장 (Ch.4) Race Condition의 주체, Heap 공유가 원인
Heap 재등장 (Ch.4) 스레드 간 공유 데이터가 위치하는 곳
GIL 재등장 (Ch.3) bytecode 단위만 보호, 복합 연산의 Race Condition은 못 막음
Context Switch 재등장 (Ch.3) Critical Section 중간에 발생하면 Race Condition 트리거
Thread Pool 재등장 (Ch.3) FastAPI 요청 핸들러가 ThreadPool에서 실행됨
File Descriptor 재등장 (Ch.2) 파일 잠금 사례, open/close = acquire/release

키워드 연관 관계

graph LR
    THREAD["Thread<br/>(Ch.4)"] -->|"Heap 공유"| HEAP["Heap<br/>(Ch.4)"]
    HEAP -->|"동시 접근"| RC["Race Condition"]
    RC -->|"보호 구간"| CS["Critical Section"]
    CS -->|"보호 수단"| MUTEX["Mutex / Lock"]
    MUTEX -->|"보장"| ATOM["Atomicity"]
    MUTEX -->|"잘못 쓰면"| DL["Deadlock"]

    DL --> ME["Mutual Exclusion"]
    DL --> HW["Hold and Wait"]
    DL --> NP["No Preemption"]
    DL --> CW["Circular Wait"]
    CW -->|"해결"| LO["Lock Ordering"]

    MUTEX -->|"일반화"| SEM["Semaphore"]
    SEM -->|"N=1이면"| MUTEX

    GIL["GIL<br/>(Ch.3)"] -.->|"bytecode 단위만"| RC
    CTXSW["Context Switch<br/>(Ch.3)"] -.->|"트리거"| RC
    FD["File Descriptor<br/>(Ch.2)"] -.->|"파일 잠금"| MUTEX

    style DL fill:#f96,stroke:#333
    style RC fill:#f96,stroke:#333

Ch.6 - 네트워크 기초: 3-way handshake를 넘어서

키워드 분류 한 줄 설명
TCP/IP 새 키워드 인터넷 통신의 기본 프로토콜 모음, TCP가 신뢰성, IP가 주소 지정 담당
TCP 새 키워드 Connection-oriented 프로토콜, 순서 보장과 재전송 제공
UDP 새 키워드 Connectionless 프로토콜, 빠르지만 신뢰성 없음
Socket 새 키워드 네트워크 통신의 끝점, OS 관점에서 File Descriptor
3-Way Handshake 새 키워드 TCP Connection 수립 과정 (SYN → SYN-ACK → ACK)
4-Way Handshake 새 키워드 TCP Connection 종료 과정 (FIN → ACK → FIN → ACK)
Connection Pool 새 키워드 미리 N개의 Connection을 만들어두고 재활용하는 구조
Keep-Alive 새 키워드 TCP Connection을 유지하면서 여러 요청에 재활용하는 기법
TIME_WAIT 새 키워드 Connection을 먼저 끊은 쪽이 2MSL 동안 유지하는 대기 상태 (OS마다 다름)
CLOSE_WAIT 새 키워드 close()를 호출하지 않아 Connection이 해제되지 않는 상태
File Descriptor 재등장 (Ch.2) Socket도 fd다, Connection 하나 = fd 하나
System Call 재등장 (Ch.2) socket(), connect(), close() 전부 System Call
Semaphore 재등장 (Ch.5) Connection Pool = Semaphore(N)
Blocking I/O 재등장 (Ch.3) Pool 고갈 시 빈 Connection을 기다리며 블로킹
Context Manager 재등장 (Ch.5) with engine.connect() = acquire/release 자동화
Throughput / Latency 재등장 (Ch.2) Pool vs NullPool 벤치마크 비교 지표

키워드 연관 관계

graph LR
    TCP["TCP"] -->|"연결 수립"| TH["3-Way<br/>Handshake"]
    TCP -->|"연결 종료"| FH["4-Way<br/>Handshake"]
    TCP -->|"vs"| UDP["UDP"]

    TH -->|"비용이 크니까"| CP["Connection Pool"]
    FH -->|"먼저 끊은 쪽"| TW["TIME_WAIT"]
    FH -->|"close 안 하면"| CW["CLOSE_WAIT"]

    CP -->|"유지"| KA["Keep-Alive"]
    CP -.->|"Ch.5 같은 원리"| SEM["Semaphore<br/>(Ch.5)"]

    SK["Socket"] -->|"= fd"| FD["File Descriptor<br/>(Ch.2)"]
    SK -->|"System Call"| SC["System Call<br/>(Ch.2)"]
    TCP --> SK

    style TW fill:#f96,stroke:#333
    style CW fill:#f96,stroke:#333

Ch.7 - AI가 코드를 짜주는 시대, 왜 CS를 알아야 하는가

키워드 분류 한 줄 설명
LLM (Large Language Model) 새 키워드 AI 코딩 도구의 핵심 엔진, 확률적으로 다음 토큰을 예측하는 모델
Token 새 키워드 LLM이 텍스트를 처리하는 기본 단위
Context Window 새 키워드 LLM이 한 번에 처리할 수 있는 토큰 수의 상한
Hallucination 새 키워드 AI가 사실이 아닌 정보를 그럴듯하게 생성하는 현상
Prompt Engineering 새 키워드 AI에게 원하는 결과를 얻기 위해 프롬프트를 설계하는 기법
System Call 재등장 (Ch.2) 프롬프트에서 "느린 원인" 키워드로 사용
CPU Bound / I/O Bound 재등장 (Ch.3) "async로 바꿔줘" 대신 정확한 최적화 방향 지정
Race Condition 재등장 (Ch.5) "동시에 에러 난다" 대신 원인 기반 프롬프트
Connection Pool 재등장 (Ch.6) "DB 연결 끊긴다" 대신 정확한 설정 키워드

키워드 연관 관계

graph LR
    LLM --> TK["Token"]
    LLM --> CW["Context Window"]
    LLM --> HL["Hallucination"]
    LLM --> PE["Prompt<br/>Engineering"]

    PE -->|"핵심 재료"| CSKW["CS 키워드"]
    CSKW -->|"프롬프트를<br/>좁힌다"| LLM

    CSKW --> SC["System Call<br/>(Ch.2)"]
    CSKW --> CPUIO["CPU/I/O Bound<br/>(Ch.3)"]
    CSKW --> RC["Race Condition<br/>(Ch.5)"]
    CSKW --> CP["Connection Pool<br/>(Ch.6)"]

    HL -->|"검증하려면"| CSKW
    TK -->|"정보 밀도"| CSKW
    CW -->|"효율적 전달"| CSKW

Ch.8 - AI에게 좋은 지시를 내리기 위한 CS 키워드 사전

키워드 분류 한 줄 설명
DNS Resolution 새 키워드 도메인 이름을 IP 주소로 변환하는 과정
Load Balancing 새 키워드 트래픽을 여러 서버에 분산하는 기법
N+1 Problem 새 키워드 ORM에서 메인 쿼리 1번 + 연관 쿼리 N번이 발생하는 패턴
Time Complexity 새 키워드 알고리즘의 입력 크기 대비 실행 시간 증가율 (Big-O)
Circuit Breaker 새 키워드 장애 서비스 호출을 차단해서 전파를 막는 패턴
CQRS 새 키워드 읽기(Query)와 쓰기(Command)를 분리하는 아키텍처 패턴
System Call 재등장 (Ch.2) OS 키워드 표에서 프롬프트 활용법 제시
CPU/I/O Bound 재등장 (Ch.3) OS 키워드 표에서 최적화 방향 결정
Race Condition 재등장 (Ch.5) OS 키워드 표에서 동시성 문제 진단
Connection Pool 재등장 (Ch.6) 네트워크 + DB 양쪽 키워드로 등장
Prompt Engineering 재등장 (Ch.7) 키워드 카테고리별 프롬프트 작성 전략

키워드 연관 관계

graph LR
    PE["Prompt Engineering<br/>(Ch.7)"] --> CAT["키워드 카테고리"]
    CAT --> OS["OS"]
    CAT --> NET["네트워크"]
    CAT --> DB["DB"]
    CAT --> DS["자료구조"]
    CAT --> ARCH["아키텍처"]

    OS --> SC["System Call<br/>(Ch.2)"]
    OS --> CPUIO["CPU/I/O Bound<br/>(Ch.3)"]
    NET --> DNS["DNS Resolution"]
    NET --> LB["Load Balancing"]
    DB --> N1["N+1 Problem"]
    DS --> TC["Time Complexity"]
    ARCH --> CBR["Circuit Breaker"]
    ARCH --> CQRS["CQRS"]

Ch.9 - AI가 만든 코드 리뷰하기

키워드 분류 한 줄 설명
Code Review (코드 리뷰) 새 키워드 작성된 코드를 동시성, 성능, 보안, 가독성 관점에서 검토하는 과정
YAGNI 새 키워드 "지금 필요하지 않은 기능을 미리 만들지 마라"는 소프트웨어 공학 원칙
Cache Stampede 새 키워드 캐시 만료 순간에 대량의 요청이 동시에 원본 저장소를 조회하는 현상
Race Condition 재등장 (Ch.5) AI가 놓치는 동시성 문제의 대표 사례
Time Complexity 재등장 (Ch.8) AI 코드의 성능 문제를 판단하는 기준
CPU Bound / I/O Bound 재등장 (Ch.3) AI가 잘못 선택하는 I/O 패턴
N+1 Problem 재등장 (Ch.8) 코드 리뷰 체크리스트 DB 항목
Hallucination 재등장 (Ch.7) AI가 자신 있게 틀리는 근본 원인
Stack Frame 재등장 (Ch.4) 재귀 코드의 Stack Overflow 위험
Prompt Engineering 재등장 (Ch.7) 체크리스트를 AI 프롬프트에 활용

키워드 연관 관계

graph LR
    CR["Code Review"] --> CHK["체크리스트"]
    CHK --> CON["동시성<br/>(Ch.5)"]
    CHK --> PERF["성능/복잡도<br/>(Ch.10)"]
    CHK --> IO["I/O 패턴<br/>(Ch.3)"]
    CHK --> DBC["DB/쿼리<br/>(Ch.13~16)"]
    CHK --> SEC["보안<br/>(Ch.23)"]
    CHK --> DES["설계 적절성<br/>(Ch.20)"]

    DES --> YAGNI
    CON --> RC["Race Condition"]
    PERF --> TC["Time Complexity"]

    CR -->|"AI에게<br/>리뷰 시킬 때도"| PE["Prompt Engineering<br/>(Ch.7)"]

    CS2["Cache Stampede"] -.->|"Ch.17"| CON

Ch.10 - contains()를 쓰지 마세요

키워드 분류 한 줄 설명
Hash Table 새 키워드 키를 Hash 함수로 변환해서 배열 인덱스로 사용하는 O(1) 검색 자료구조
Hash Function 새 키워드 임의의 입력을 고정된 크기의 숫자로 변환하는 함수
Hash Collision 새 키워드 서로 다른 키가 같은 Hash 값을 가지는 현상
Time Complexity 재등장 (Ch.8) 프롬프트 키워드에서 실측 체감으로 전환 (O(1) vs O(n) = 4,000배 차이)
Space Complexity 새 키워드 알고리즘이 사용하는 메모리의 입력 크기 대비 증가율
Linear Search 새 키워드 처음부터 끝까지 순서대로 비교하며 찾는 O(n) 탐색
Load Factor 새 키워드 Hash Table의 사용률, 높아지면 충돌 증가

키워드 연관 관계

graph LR
    HT["Hash Table"] --> HF["Hash Function"]
    HT --> HC["Hash Collision"]
    HT --> LF["Load Factor"]

    HT -->|"O(1) 검색"| TC["Time Complexity<br/>(Ch.8)"]
    LS["Linear Search"] -->|"O(n) 검색"| TC

    HT -->|"메모리 더 사용"| SC["Space Complexity"]
    TC ---|"Trade-off"| SC

    TC -.->|"Ch.11"| BS["Binary Search<br/>O(log n)"]

Ch.11 - 정렬과 검색, 그리고 인덱스의 원리

키워드 분류 한 줄 설명
Binary Search 새 키워드 정렬된 데이터에서 절반씩 범위를 줄여가며 찾는 O(log n) 탐색
B-Tree / B+Tree 새 키워드 디스크 기반 저장소에 최적화된 균형 트리, DB 인덱스의 핵심 자료구조
Index (인덱스) 새 키워드 특정 컬럼의 값을 B+Tree로 정리해서 검색 성능을 높이는 구조
Full Table Scan 새 키워드 테이블의 모든 행을 순회하는 O(n) 검색, 인덱스 없을 때 발생
Tim Sort 새 키워드 Python/Java의 기본 정렬 알고리즘, Merge Sort + Insertion Sort 하이브리드
EXPLAIN 새 키워드 쿼리 실행 계획을 확인하는 DB 명령어, 인덱스 사용 여부 진단
Time Complexity 재등장 (Ch.8) O(n log n) vs O(log n) 비교
Hash Table 재등장 (Ch.10) Hash Table과 B-Tree의 용도 차이 (같은 값 vs 범위 검색)

키워드 연관 관계

graph LR
    BS["Binary Search<br/>O(log n)"] --> BT["B-Tree / B+Tree"]
    BT --> IDX["Index"]
    IDX --> EXP["EXPLAIN"]

    LS["Linear Search<br/>(Ch.10)"] --> FTS["Full Table Scan"]
    HT["Hash Table<br/>(Ch.10)"] -->|"같은 값 찾기"| IDX
    BS -->|"범위 검색"| IDX

Ch.12 - 트리, 그래프, 그리고 실무

키워드 분류 한 줄 설명
BFS 새 키워드 Queue 기반 너비 우선 탐색, 최단 경로와 레벨 단위 처리에 적합
DFS 새 키워드 Stack/재귀 기반 깊이 우선 탐색, 경로 탐색과 사이클 감지에 적합
DAG 새 키워드 방향 비순환 그래프, 의존 관계 표현의 핵심 구조
Topological Sort 새 키워드 DAG에서 의존 순서대로 나열하는 알고리즘 (Kahn's Algorithm)
CTE (WITH RECURSIVE) 새 키워드 SQL 임시 결과 집합, 재귀 CTE로 트리 순회를 SQL 한 방으로 처리
Materialized Path 새 키워드 트리 노드에 경로 문자열을 저장해 LIKE 한 번으로 하위 조회
Trie 새 키워드 문자열 prefix 검색용 트리, 자동완성/IP 라우팅에 사용
Adjacency List / Matrix 새 키워드 그래프 표현 방식, 희소 그래프는 리스트, 밀집 그래프는 행렬
In-degree / Out-degree 새 키워드 노드로 들어오는/나가는 간선 수, Kahn's Algorithm의 핵심
Stack Frame / Stack Overflow 재등장 (Ch.4) 재귀 깊이 한계와 RecursionError
Hash Map 재등장 (Ch.10) 인접 리스트, children_map, in-degree 저장에 사용
자료구조 선택 기준 재등장 (Ch.10) list vs deque, 인접 리스트 vs 행렬
B-Tree 재등장 (Ch.11) 트리 자료구조의 DB 특화 버전

키워드 연관 관계

graph LR
    TREE["Tree"] --> BFS
    TREE --> DFS
    TREE --> TRIE["Trie"]
    TREE --> BT["B-Tree<br/>(Ch.11)"]

    BFS -->|"Queue"| DEQ["deque<br/>(Ch.10)"]
    DFS -->|"Stack"| STK["Stack<br/>(Ch.4)"]
    DFS -->|"재귀 위험"| SF["Stack Frame<br/>(Ch.4)"]

    GRAPH["Graph"] --> DAG
    GRAPH --> REP["Adjacency List/Matrix"]
    DAG --> TS["Topological Sort"]
    TS --> KAHN["Kahn's Algorithm<br/>(in-degree)"]
    DAG --> CYC["Cycle Detection"]

    TREE --> STORE["트리 저장"]
    STORE --> CTE["재귀 CTE"]
    STORE --> MP["Materialized Path"]

Ch.13 - JPA를 써서 DB를 모른다고요?

키워드 분류 한 줄 설명
ORM (Object-Relational Mapping) 새 키워드 객체와 DB 테이블을 자동 매핑하는 기술 (SQLAlchemy, JPA, Django ORM)
N+1 Problem 재등장 (Ch.8) 메인 쿼리 1번 + 연관 쿼리 N번이 발생하는 ORM의 대표적 성능 문제
Lazy Loading 새 키워드 연관 데이터를 실제로 접근할 때 쿼리하는 전략, N+1의 원인
Eager Loading 새 키워드 연관 데이터를 미리 JOIN/서브쿼리로 가져오는 전략
QEP (Query Execution Plan) 새 키워드 DB가 쿼리를 실행하는 방법을 보여주는 계획, EXPLAIN으로 확인
CBO (Cost Based Optimizer) 새 키워드 통계 기반으로 최적의 실행 계획을 선택하는 DB 옵티마이저

키워드 연관 관계

graph LR
    ORM --> LL["Lazy Loading"]
    ORM --> EL["Eager Loading"]
    LL -->|"원인"| N1["N+1 Problem"]
    EL -->|"해결"| N1
    ORM -->|"생성하는"| SQL
    SQL --> QEP
    QEP --> CBO
    QEP --> EXP["EXPLAIN<br/>(Ch.11)"]

Ch.14 - 인덱스를 안 걸어놓고 Redis를 설치했습니다

키워드 분류 한 줄 설명
Covering Index 새 키워드 쿼리에 필요한 모든 컬럼이 인덱스에 포함되어 테이블 접근이 불필요한 인덱스
Composite Index 새 키워드 여러 컬럼을 조합한 인덱스, 컬럼 순서가 중요
Cardinality 새 키워드 컬럼의 고유값 개수, 높을수록 인덱스 효율이 좋다
Hash Index 새 키워드 Hash Table 기반 인덱스, 동등 검색만 가능 (범위 검색 불가)
B-Tree Index 재등장 (Ch.11) 범위 검색과 정렬까지 지원하는 기본 인덱스 구조
EXPLAIN 재등장 (Ch.11) 인덱스 사용 여부와 쿼리 실행 계획 확인

키워드 연관 관계

graph LR
    IDX["Index<br/>(Ch.11)"] --> CI["Covering Index"]
    IDX --> COMP["Composite Index"]
    IDX --> HI["Hash Index"]
    IDX --> BT["B-Tree Index<br/>(Ch.11)"]
    COMP --> CARD["Cardinality"]
    IDX --> EXP["EXPLAIN<br/>(Ch.11)"]
    EXP --> FTS["Full Table Scan<br/>(Ch.11)"]

Ch.15 - Transaction과 Isolation Level

키워드 분류 한 줄 설명
ACID 새 키워드 Transaction의 4가지 보장: Atomicity, Consistency, Isolation, Durability
Transaction 새 키워드 하나의 논리적 작업 단위, 전부 성공하거나 전부 실패
Isolation Level 새 키워드 동시 트랜잭션 간 간섭 정도를 결정하는 4단계 설정
Dirty Read 새 키워드 커밋되지 않은 데이터를 읽는 현상
Non-repeatable Read 새 키워드 같은 쿼리를 두 번 실행했을 때 결과가 다른 현상
Phantom Read 새 키워드 같은 범위 쿼리를 두 번 실행했을 때 행의 수가 다른 현상
Pessimistic Lock 새 키워드 충돌을 가정하고 미리 잠그는 방식 (SELECT FOR UPDATE)
Optimistic Lock 새 키워드 충돌이 드물다고 가정하고 커밋 시 검증하는 방식 (version 컬럼)

키워드 연관 관계

graph LR
    TX["Transaction"] --> ACID
    TX --> IL["Isolation Level"]
    IL --> DR["Dirty Read"]
    IL --> NR["Non-repeatable Read"]
    IL --> PR["Phantom Read"]
    TX --> PL["Pessimistic Lock"]
    TX --> OL["Optimistic Lock"]
    PL --> RC["Race Condition<br/>(Ch.5)"]
    OL --> RC

Ch.16 - DB 성능 튜닝의 실무

키워드 분류 한 줄 설명
Slow Query 새 키워드 실행 시간이 임계값을 넘는 쿼리, slow_query_log로 추적
Pagination 새 키워드 대량 데이터를 페이지 단위로 나누어 조회하는 기법
Cursor-based Pagination 새 키워드 OFFSET 대신 마지막 조회 기준값으로 다음 페이지를 결정하는 방식
Partitioning 새 키워드 하나의 테이블을 물리적으로 분할하여 관리하는 기법
Sharding 새 키워드 데이터를 여러 DB 서버에 분산 저장하는 기법
Read Replica 새 키워드 읽기 전용 복제 DB, 읽기 부하 분산에 사용

키워드 연관 관계

graph LR
    SQ["Slow Query"] -->|"점유"| CP["Connection Pool<br/>(Ch.6)"]
    SQ --> EXP["EXPLAIN<br/>(Ch.11)"]
    PAG["Pagination"] --> CBP["Cursor-based<br/>Pagination"]
    PART["Partitioning"] --> SHARD["Sharding"]
    RR["Read Replica"] -->|"읽기 분산"| CP

Ch.17 - 느리니까 Redis 붙이고 생각해볼까요?

키워드 분류 한 줄 설명
Cache (캐시) 새 키워드 자주 쓰는 데이터를 빠른 저장소에 미리 보관하는 기법
Cache Hit / Miss 새 키워드 캐시에 데이터가 있으면 Hit, 없으면 Miss
Cache Stampede 재등장 (Ch.9) 캐시 만료 시 대량 요청이 동시에 원본 저장소를 조회하는 현상
TTL (Time-To-Live) 새 키워드 캐시 데이터의 유효 기간
Eviction Policy 새 키워드 캐시가 가득 찼을 때 어떤 데이터를 제거할지 결정하는 정책 (LRU, LFU 등)
Write-Through / Write-Back / Cache-Aside 새 키워드 캐시 쓰기 전략의 세 가지 패턴
Redis 새 키워드 인메모리 키-값 저장소, 캐시/세션/메시지 브로커로 활용

키워드 연관 관계

graph LR
    CACHE["Cache"] --> HM["Hit / Miss"]
    CACHE --> TTL
    CACHE --> EP["Eviction Policy"]
    CACHE --> WS["Write Strategy"]
    WS --> WT["Write-Through"]
    WS --> WB["Write-Back"]
    WS --> CA["Cache-Aside"]
    TTL -->|"만료 시"| CS["Cache Stampede<br/>(Ch.9)"]
    CACHE --> REDIS["Redis"]

Ch.18 - Local Cache vs Remote Cache

키워드 분류 한 줄 설명
Local Cache 새 키워드 애플리케이션 프로세스 메모리에 저장하는 캐시 (가장 빠르지만 서버별 불일치 위험)
Remote Cache 새 키워드 별도 캐시 서버(Redis, Memcached)에 저장하는 캐시 (일관성 있지만 네트워크 지연)
Cache Invalidation 새 키워드 원본 데이터 변경 시 캐시를 무효화하는 전략
CDN (Content Delivery Network) 새 키워드 정적 콘텐츠를 지리적으로 분산된 서버에 캐시하는 네트워크
Cache 재등장 (Ch.17) Local/Remote 계층 구조로 확장

키워드 연관 관계

graph LR
    LC["Local Cache"] --> CACHE["Cache<br/>(Ch.17)"]
    RC["Remote Cache"] --> CACHE
    CDN --> CACHE
    LC -->|"빠르지만<br/>불일치"| CI["Cache Invalidation"]
    RC -->|"일관적이지만<br/>네트워크 지연"| CI
    LC -.->|"CPU Cache 비유"| ARCH["Computer<br/>Architecture"]

Ch.19 - Replica를 200개로 늘려볼까요?

키워드 분류 한 줄 설명
Bottleneck (병목) 새 키워드 시스템 전체 성능을 제한하는 가장 느린 구간
Amdahl's Law (암달의 법칙) 새 키워드 병렬화로 개선 가능한 성능 상한을 계산하는 법칙
Scale-Up / Scale-Out 새 키워드 서버 성능 향상(Up) vs 서버 수 증가(Out)
Throughput / Latency 재등장 (Ch.2) 성능 측정의 두 축, Bottleneck 식별의 기본 지표
Connection Pool 재등장 (Ch.6) DB가 Bottleneck일 때 Pool 크기가 제한 요인

키워드 연관 관계

graph LR
    BN["Bottleneck"] --> AL["Amdahl's Law"]
    BN --> CPU["CPU Bound<br/>(Ch.3)"]
    BN --> IO["I/O Bound<br/>(Ch.3)"]
    BN --> DB["DB<br/>(Ch.16)"]
    AL -->|"한계"| SO["Scale-Out"]
    SO --> SU["Scale-Up"]
    BN -->|"측정"| TL["Throughput / Latency<br/>(Ch.2)"]

Ch.20 - 관심사의 분리

키워드 분류 한 줄 설명
SOLID 새 키워드 객체지향 설계의 5가지 원칙 (SRP, OCP, LSP, ISP, DIP)
SRP (Single Responsibility Principle) 새 키워드 하나의 클래스는 하나의 변경 이유만 가져야 한다
DIP (Dependency Inversion Principle) 새 키워드 상위 모듈이 하위 모듈에 의존하지 않고 추상에 의존해야 한다
DI (Dependency Injection) 새 키워드 의존성을 외부에서 주입하는 설계 패턴
IoC (Inversion of Control) 새 키워드 제어 흐름을 프레임워크에 위임하는 설계 원칙
Clean Architecture 새 키워드 의존성 방향을 안쪽으로만 향하게 하는 아키텍처 패턴
Layered Architecture 새 키워드 Presentation → Business → Data 계층 분리 패턴
God Class 새 키워드 너무 많은 책임을 가진 거대 클래스, SRP 위반의 대표 사례

키워드 연관 관계

graph LR
    SOLID --> SRP
    SOLID --> DIP
    DIP --> DI["DI"]
    DI --> IOC["IoC"]
    SRP -->|"위반하면"| GC["God Class"]
    SOLID --> CA["Clean<br/>Architecture"]
    CA --> LA["Layered<br/>Architecture"]

Ch.21 - 테스트를 짜라고 했더니 전부 Mocking입니다

키워드 분류 한 줄 설명
Unit Test 새 키워드 함수/메서드 단위로 격리된 동작을 검증하는 테스트
Integration Test 새 키워드 여러 모듈/시스템의 연동을 검증하는 테스트
E2E Test 새 키워드 사용자 시나리오 전체를 검증하는 테스트
Test Double 새 키워드 테스트에서 실제 객체를 대체하는 가짜 객체의 총칭
Mock 새 키워드 호출 여부와 인자를 검증하는 Test Double
Stub 새 키워드 미리 정해진 응답을 반환하는 Test Double
Test Pyramid 새 키워드 Unit > Integration > E2E 순으로 테스트 비율을 구성하는 전략

키워드 연관 관계

graph LR
    TP["Test Pyramid"] --> UT["Unit Test"]
    TP --> IT["Integration Test"]
    TP --> E2E["E2E Test"]
    TD["Test Double"] --> MOCK["Mock"]
    TD --> STUB["Stub"]
    MOCK -->|"과도하면"| ANTI["Mocking 과다"]
    IT -->|"실제 연동"| DB["DB/API"]

Ch.22 - 분산 시스템의 기초

키워드 분류 한 줄 설명
Container 새 키워드 OS 수준 가상화로 프로세스를 격리하는 기술
Docker 새 키워드 컨테이너 빌드/실행 도구의 사실상 표준
namespace 새 키워드 Linux 커널의 자원 격리 메커니즘 (PID, Network, Mount 등)
cgroup 새 키워드 Linux 커널의 자원 제한 메커니즘 (CPU, Memory 등)
Docker Image / Layer 새 키워드 읽기 전용 파일 시스템 레이어의 스택
Kubernetes (K8s) 새 키워드 컨테이너 오케스트레이션 플랫폼
Service Discovery 새 키워드 분산 시스템에서 서비스 위치를 동적으로 찾는 메커니즘
Virtual Memory 재등장 (Ch.4) Container는 VM이 아닌 프로세스 격리

키워드 연관 관계

graph LR
    CONT["Container"] --> NS["namespace"]
    CONT --> CG["cgroup"]
    CONT --> DOCKER["Docker"]
    DOCKER --> IMG["Image / Layer"]
    CONT --> K8S["Kubernetes"]
    K8S --> SD["Service Discovery"]
    CONT -->|"VM이 아니다"| VM["Virtual Memory<br/>(Ch.4)"]

Ch.23 - 보안은 남의 일이 아니다

키워드 분류 한 줄 설명
OWASP Top 10 새 키워드 웹 애플리케이션의 10대 보안 취약점 목록
XSS (Cross-Site Scripting) 새 키워드 악성 스크립트를 주입하여 사용자 브라우저에서 실행시키는 공격
SQL Injection 새 키워드 사용자 입력을 통해 악의적인 SQL을 실행시키는 공격
CSRF (Cross-Site Request Forgery) 새 키워드 인증된 사용자의 의도하지 않은 요청을 위조하는 공격
CORS (Cross-Origin Resource Sharing) 새 키워드 다른 도메인 간 자원 공유를 제어하는 HTTP 메커니즘
HTTPS / TLS 새 키워드 통신 암호화 프로토콜, 도청과 변조를 방지
JWT (JSON Web Token) 새 키워드 서명된 JSON 기반 인증 토큰
Session 새 키워드 서버에 사용자 상태를 저장하는 인증 방식

키워드 연관 관계

graph LR
    OWASP["OWASP Top 10"] --> XSS
    OWASP --> SQLI["SQL Injection"]
    OWASP --> CSRF
    CORS --> CSRF
    TLS["HTTPS / TLS"] --> TCP["TCP<br/>(Ch.6)"]
    JWT --> SESSION["Session"]
    JWT -->|"vs"| SESSION

Ch.24 - 종합

키워드 분류 한 줄 설명
전체 키워드 맵 정리 Ch.1~23의 모든 키워드를 레이어별로 매핑
AI 활용 전략 정리 CS 키워드를 기반으로 한 AI 도구 활용 가이드

전체 키워드 연관 관계

graph TB
    APP["Application Layer"] --> OS_LAYER["OS Layer"]
    APP --> NET["Network Layer"]
    APP --> DB["Database Layer"]
    APP --> CACHE["Cache Layer"]
    APP --> ARCH["Architecture"]
    APP --> SEC["Security"]
    APP --> TEST["Testing"]

    OS_LAYER --> SC["System Call"]
    OS_LAYER --> VM["Virtual Memory"]
    OS_LAYER --> PROC["Process/Thread"]
    NET --> TCP["TCP/IP"]
    NET --> CP["Connection Pool"]
    DB --> IDX["Index"]
    DB --> TX["Transaction"]
    CACHE --> REDIS["Redis"]
    CACHE --> LC["Local Cache"]
    ARCH --> SOLID
    ARCH --> CONT["Container"]
    SEC --> OWASP
    TEST --> TP["Test Pyramid"]