10-1. 컴퓨터과학의 핵심 개념과 용어
이 문서는 공부 노트 수준이다. 용어 정의 → 예시 → 자기 점검 질문이 따라온다. 이 문서는 단독으로 읽을 수 있다. 다른 파일을 먼저 읽지 않아도 된다.
이 문서를 왜 보는가?
컴퓨터과학(CS)에서 만나는 용어들 — “Big O”, “스택”, “프로세스”, “TCP”, “ACID”, “강화학습” — 의 정확한 정의를 모르면 IT 뉴스·기술 블로그·면접 질문이 모두 외계어처럼 느껴진다. 이 문서는 그 용어들을 자기 노트로 정리해, 어디서 만나도 즉시 의미를 잡을 수 있게 한다.
공부 노트의 기본 형식 (이 문서 전체에 적용)
용어: 한 줄 정의 (어원 + 핵심) 핵심: 개념의 본질 1~2줄 예시: 실제 작동 방식 점검: 자기 확인 질문
컴퓨터과학(Computer Science) = “계산(compute)에 관한 학문(science)”. 핵심은 컴퓨터가 아니라 계산이다 — 데이크스트라의 명언처럼 “천문학이 망원경에 관한 학문이 아니듯”.
A. 계산의 기초
A-1. 비트와 바이트
용어: Bit / Byte
정의:
비트(bit) = "binary digit"의 줄임말. 0 또는 1의 한 자리.
바이트(byte) = 8개 비트 묶음. 보통 한 글자(영문)·한 명령어 단위.
핵심: 컴퓨터의 모든 정보는 비트의 배열로 환원된다.
예시:
영문자 'A' = 0100 0001 (1바이트)
숫자 255 = 1111 1111 (1바이트)
파일 1KB = 1024바이트 = 8192비트
점검: 1) 1MB는 몇 비트인가?
2) 왜 1킬로(K)가 1024(2¹⁰)인가? (이진의 자연스러운 단위)
A-2. 이진수와 진법 변환
용어: Binary / Decimal / Hexadecimal
정의:
이진수(2진) — 0,1만 사용
십진수(10진) — 0~9 사용 (일상 숫자)
16진수(hex) — 0~9, A~F 사용 (메모리·색 코드)
변환 예시:
255(10) = 1111 1111(2) = FF(16)
10(10) = 1010(2) = A(16)
점검: HTML 색 코드 #FF5733 의 의미는?
(R=255, G=87, B=51 — 16진을 10진으로)
A-3. 추상 기계와 튜링 기계
용어: Turing Machine
정의: 1936년 앨런 튜링이 정의한 추상 계산 모델.
구성:
- 무한 길이 테이프
- 읽기·쓰기 헤드
- 상태 + 규칙
의의:
"계산 가능한 모든 것"이 무엇인지 정의 (처치-튜링 명제)
현대 모든 컴퓨터의 이론적 기반
점검: 같은 결과를 내는 컴퓨터들도 "계산 가능한 범위"는 같은가? (예: 양자컴퓨터)
처치-튜링 명제(Church-Turing Thesis) = “계산 가능”한 모든 함수는 튜링 기계로 계산할 수 있다는 가설. 컴퓨터과학의 근본 가정.
B. 알고리즘과 복잡도
B-1. 알고리즘의 정의와 좋은 알고리즘의 조건
용어: Algorithm
정의: 문제를 푸는 단계의 명세. 입력을 받아 정해진 출력을 내는 절차.
어원: 9세기 페르시아 수학자 알콰리즈미(al-Khwārizmī)의 이름.
좋은 알고리즘의 조건:
[1] 정확성 — 모든 유효 입력에 옳은 답
[2] 종료성 — 유한 시간 내 끝남
[3] 효율성 — 적은 시간·메모리 사용
[4] 명확성 — 모든 단계가 모호하지 않음
점검: "라면 끓이기" 절차가 알고리즘이 되려면 무엇을 명확히 해야 하나?
B-2. 시간 복잡도(Time Complexity) — Big O
용어: Big O Notation
정의: 입력 크기 n에 따라 알고리즘 실행 시간이 어떻게 증가하는가.
"최악의 경우"의 점근 분석.
자주 만나는 복잡도 (n = 백만 기준):
O(1) — 1번 상수
O(log n) — 약 20번 이진 탐색
O(n) — 백만 번 선형 탐색
O(n log n) — 약 2천만 번 효율적 정렬(merge, quick)
O(n²) — 1조 번 단순 비교(거품·삽입 정렬)
O(2ⁿ) — 사실상 못 끝남 지수(부분집합·일부 NP 문제)
O(n!) — 더 못 끝남 순열 전체 탐색
점검: 1) 데이터가 1만 개에서 100만 개로 늘 때 O(n²) 알고리즘은 몇 배 느려지나?
2) 자기 직장의 어떤 작업이 데이터가 늘면 갑자기 느려지는가?
B-3. 공간 복잡도(Space Complexity)
용어: Space Complexity
정의: 알고리즘이 사용하는 메모리 양.
핵심: 빠른 알고리즘이 메모리를 더 쓸 수도 있다 (시간-공간 트레이드오프).
예시:
해시 테이블 — O(1) 조회, 그러나 추가 메모리 사용
재귀 — 빠를 수 있지만 호출 스택 메모리 사용
점검: 메모리가 한정된 임베디드 시스템에서 알고리즘 선택 기준은?
B-4. P, NP, NP-완전 — 어려움의 분류
용어: P / NP / NP-Complete
정의:
P — 다항 시간(O(nᵏ)) 안에 풀 수 있는 문제
NP — 답이 주어지면 다항 시간에 검증 가능한 문제
NP-완전 — NP 중 가장 어려운 부류 (어떤 NP 문제도 이걸로 환원 가능)
대표 NP-완전 문제:
- 외판원 문제(TSP)
- 배낭 문제
- 부분집합 합 문제
- 그래프 채색
미해결: P = NP 인가? (밀레니엄 문제, 1백만 달러 상금)
점검: 자기 일상에서 "검증은 쉬운데 만드는 건 어렵다"는 패턴은?
다항 시간(Polynomial Time) = O(nᵏ) 형태. n²·n³·n¹⁰⁰ 등은 다 다항. n이 커질수록 지수보다 훨씬 느리게 자란다.
C. 자료구조 — 데이터를 담는 형식
C-1. 배열(Array) vs 연결 리스트(Linked List)
용어: Array / Linked List
정의:
배열 — 메모리에 연속된 칸. 인덱스로 즉시 접근.
연결 리스트 — 각 노드가 다음 노드를 가리킴. 칸이 연속 안 됨.
강점·약점:
배열 — 인덱스 접근 O(1), 삽입/삭제 O(n)
연결 리스트 — 삽입/삭제 O(1)*, 인덱스 접근 O(n)
점검: 데이터를 자주 중간에 삽입하는 경우 어느 게 적합한가?
C-2. 스택(Stack)과 큐(Queue)
용어: Stack / Queue
정의:
스택 — LIFO(Last In First Out). 마지막 들어온 게 먼저 나감. 접시 더미.
큐 — FIFO(First In First Out). 먼저 들어온 게 먼저 나감. 줄 서기.
응용:
스택 — 함수 호출, 실행 취소(undo), 괄호 매칭, DFS
큐 — 작업 대기열, 프린터 출력, BFS, 메시지 큐
점검: 웹 브라우저의 "뒤로 가기" 기능은 스택인가 큐인가?
C-3. 해시 테이블(Hash Table)
용어: Hash Table / Hash Map
정의: 키 → 값을 즉시 찾는 자료구조. 키를 해시 함수로 위치(인덱스)에 매핑.
조회: 평균 O(1).
충돌(Collision): 다른 키가 같은 위치 → 체이닝·개방 주소법으로 해결.
응용:
- 사전 (단어 → 정의)
- 캐시
- 데이터베이스 인덱스
- 비밀번호 저장(해싱)
점검: 100만 개 단어에서 한 단어를 찾을 때 해시와 정렬된 배열 어느 게 빠른가?
해시 함수(Hash Function) = 임의 입력 → 고정 길이 출력으로 변환하는 함수. 같은 입력 → 같은 출력. 다른 입력은 가급적 다른 출력.
C-4. 트리(Tree)
용어: Tree
정의: 계층 구조의 자료구조. 루트(root) → 자식 → 손자.
종류:
이진 트리(Binary Tree) — 자식 최대 2개
이진 검색 트리(BST) — 왼쪽은 작고, 오른쪽은 큼
균형 트리(AVL, Red-Black) — 균형 유지로 O(log n) 보장
B-tree — 데이터베이스 인덱스에 사용
응용:
- 파일 시스템(폴더)
- DOM(웹페이지 구조)
- 의사결정 트리(ML)
점검: HTML 문서가 트리인 이유는?
C-5. 그래프(Graph)
용어: Graph
정의: 노드(정점)와 그 연결(엣지)의 집합.
종류:
방향 그래프 — 화살표 있음 (트위터 팔로우)
무방향 그래프 — 화살표 없음 (페이스북 친구)
가중 그래프 — 엣지에 비용 (지도 거리)
응용:
- 소셜 네트워크
- 지도·내비게이션
- 추천 시스템
- 인터넷 라우팅
대표 알고리즘:
- BFS·DFS (탐색)
- 다익스트라(Dijkstra) — 최단 경로
- PageRank — 구글 검색 순위
점검: "친구의 친구" 추적은 어떤 그래프 알고리즘인가?
D. 추상화와 시스템
D-1. 추상화 계층
용어: Abstraction Layer
정의: 복잡함을 숨기고 단순한 인터페이스만 제공하는 설계.
컴퓨터 시스템의 계층:
응용 프로그램 ← 사용자가 직접 보는 것 (브라우저, 앱)
↓
운영체제(OS) ← 자원 관리 (메모리·파일·프로세스)
↓
드라이버 ← OS와 하드웨어 사이 통역
↓
하드웨어 ← CPU, 메모리, 디스크
의의: 각 계층은 위에 단순한 인터페이스만 제공.
점검: 자동차 운전 = 추상화의 일상 사례. 어디까지가 운전자에게 보이고 무엇이 숨겨져 있나?
D-2. 프로세스(Process)와 스레드(Thread)
용어: Process / Thread
정의:
프로세스 — 실행 중인 프로그램 인스턴스. 자기 메모리 공간을 가짐.
스레드 — 한 프로세스 안의 실행 단위. 메모리를 공유.
차이:
프로세스 간 통신 — 어렵고 비쌈
스레드 간 통신 — 쉽지만 동기화 문제(데이터 경쟁)
응용:
- 브라우저 — 탭마다 별도 프로세스
- 게임 — 그래픽·물리·AI를 별도 스레드로
점검: 여러 작업을 동시에 처리하려는데 메모리를 공유해야 한다면?
D-3. 메모리 계층(Memory Hierarchy)
용어: Memory Hierarchy
정의: 속도-용량-비용의 트레이드오프로 쌓인 메모리 계층.
CPU 레지스터 — 가장 빠름, 매우 작음 (수십 바이트)
L1/L2/L3 캐시 — 매우 빠름, 작음 (KB~MB)
RAM — 빠름, 중간 (GB)
SSD — 보통, 큼 (수백 GB)
HDD — 느림, 매우 큼 (TB)
네트워크/클라우드 — 가장 느림, 무한대
점검: 왜 캐시가 RAM보다 작아야 하나? (속도-비용 트레이드오프)
D-4. 가상화(Virtualization)와 컨테이너(Container)
용어: Virtualization / Container
정의:
가상 머신(VM) — 한 컴퓨터에 가상의 컴퓨터를 여러 개 띄움
컨테이너 — VM보다 가볍게, 응용 프로그램과 그 환경을 묶음
응용:
- 클라우드 서버 운영
- "내 컴퓨터에선 됐는데" 문제 해결 (Docker)
점검: VM과 컨테이너 중 어느 게 더 무거운가? 왜?
E. 네트워크와 보안
E-1. TCP/IP 스택
용어: TCP/IP
정의: 인터넷 통신의 표준 규약 묶음.
계층:
응용층(HTTP, HTTPS, FTP, SMTP)
↓
전송층(TCP — 신뢰성, UDP — 빠름)
↓
네트워크층(IP — 라우팅)
↓
데이터링크·물리층(이더넷, Wi-Fi)
점검: 영상 통화는 TCP를 쓸까 UDP를 쓸까? 왜?
E-2. HTTP·HTTPS·DNS
용어: HTTP / HTTPS / DNS
정의:
HTTP — 웹 페이지 전송 규약
HTTPS — HTTP + 암호화(TLS)
DNS — "이름 → IP 주소" 변환 (전화번호부)
웹페이지 한 번 여는 흐름:
1. URL → DNS 조회로 IP 얻기
2. IP로 TCP 연결
3. HTTPS 핸드셰이크(암호 키 교환)
4. HTTP 요청 → 응답
5. 브라우저가 HTML 파싱·렌더링
점검: 자기가 매일 사용하는 사이트의 IP를 직접 입력해 접속할 수 있을까? (DNS 우회)
E-3. 암호화(Encryption)
용어: Encryption
정의: 데이터를 키 없이는 읽을 수 없게 변환.
종류:
대칭키 — 같은 키로 암호화·복호화 (AES) — 빠르지만 키 공유 문제
비대칭키(공개키) — 공개키로 암호화, 개인키로 복호화 (RSA, ECC) — 키 공유 안전
실제 응용:
HTTPS — 비대칭키로 키 교환 + 대칭키로 본 통신
비트코인 — 비대칭키로 서명
암호화폐 지갑 — 개인키 = 잔고
점검: 누군가가 자기 계정 비번을 몰래 봤다면 어떤 보안이 깨진 건가?
E-4. 자주 만나는 보안 위협
- 피싱(Phishing) — 가짜 사이트로 정보 탈취
- DDoS — 트래픽 폭격으로 서비스 마비
- SQL 인젝션 — 입력란에 악성 쿼리 삽입
- XSS — 웹페이지에 악성 스크립트 주입
- 랜섬웨어 — 파일 암호화 + 비트코인 요구
- 사회 공학 — 기술 아닌 사람을 속임
점검: 자기에게 가장 위험한 보안 위협은? 대비책은?
F. 데이터베이스(Database)
F-1. 관계형 DB(RDB)와 SQL
용어: Relational Database / SQL
정의:
관계형 DB — 데이터를 표(테이블)로 저장, 표끼리 관계를 맺음
SQL — 그 데이터를 조회·수정하는 표준 언어
대표 시스템: MySQL, PostgreSQL, Oracle, SQL Server
강점:
- 데이터 무결성·일관성 보장
- 복잡한 조인(여러 표 연결) 가능
약점:
- 수평 확장 어려움
- 비정형 데이터 처리 약함
점검: 회원·주문·상품 데이터를 어떻게 표로 나눌까?
F-2. NoSQL — 다양한 비관계형 DB
용어: NoSQL ("Not Only SQL")
4종류:
문서(Document) — MongoDB. JSON 형태 저장
키-값(Key-Value) — Redis. 단순·빠름
열 저장(Columnar) — Cassandra. 빅데이터 분석
그래프(Graph) — Neo4j. 관계 중심 데이터
강점: 유연한 스키마, 수평 확장 용이
약점: 트랜잭션·일관성 약함(설정 따라 다름)
점검: 소셜 그래프(친구 관계)를 RDB로 다루기 어려운 이유는?
F-3. ACID와 CAP
용어: ACID / CAP Theorem
ACID — 트랜잭션의 4 속성:
Atomicity — 전부 성공 또는 전부 실패
Consistency — 데이터 무결성 유지
Isolation — 동시 트랜잭션 격리
Durability — 한번 커밋되면 영구 저장
CAP 정리 — 분산 시스템은 셋 중 둘만 보장 가능:
Consistency — 모든 노드가 같은 데이터
Availability — 항상 응답
Partition tolerance — 네트워크 분할에도 작동
→ 결정: CP(은행) vs AP(소셜 미디어)
점검: 은행 시스템과 SNS는 다른 우선순위를 가질까?
G. AI와 머신러닝
G-1. 학습 패러다임 — 3대 갈래
용어: Supervised / Unsupervised / Reinforcement Learning
정의:
지도학습 — 입력+정답 쌍으로 학습 (스팸 분류, 주가 예측)
비지도학습 — 정답 없이 패턴 발견 (고객 군집화)
강화학습 — 시행착오 + 보상으로 학습 (알파고, 게임 AI)
추가:
자기지도학습(Self-supervised) — 입력 자체에서 학습 신호 추출 (LLM 사전훈련)
점검: 의료 진단 AI는 어떤 학습 패러다임이 적합할까?
G-2. 신경망과 딥러닝
용어: Neural Network / Deep Learning
정의:
신경망 — 인간 뇌 뉴런을 단순 모방한 수학 모델
딥러닝 — 신경망의 층(layer)을 여러 개 쌓은 것
주요 아키텍처:
CNN(Convolutional) — 이미지 (얼굴 인식, 의료 영상)
RNN/LSTM — 순차 데이터 (예전 번역)
Transformer — 현재 LLM의 표준
훈련:
데이터 → 순전파 → 손실 계산 → 역전파 → 가중치 업데이트
점검: 같은 신경망도 데이터에 따라 결과가 천차만별인 이유는?
G-3. LLM(Large Language Model)
용어: Large Language Model
정의: 막대한 텍스트로 "다음 단어 예측"을 학습한 거대 신경망.
대표: GPT-4, Claude, Gemini, LLaMA
구성:
Transformer 아키텍처 + 수백억~수조 매개변수
훈련 단계:
1. 사전훈련(Pre-training) — 인터넷 텍스트로 다음 단어 예측
2. 파인튜닝(Fine-tuning) — 특정 작업에 맞춤
3. RLHF — 인간 피드백으로 정렬
한계:
- 환각(Hallucination)
- 학습 데이터 시점 이후 모름
- 진짜 추론 vs 통계 패턴 논쟁
점검: LLM이 "확신 있게 틀린 답"을 내는 이유와 대처법은?
G-4. 평가와 안전성
용어: Evaluation / Alignment
정의:
평가(Eval) — 모델 성능 측정. 정확도, 정밀도, 재현율, F1
정렬(Alignment) — AI 목표를 인간 가치와 맞추기
정렬 도구:
RLHF (Reinforcement Learning from Human Feedback)
Constitutional AI
레드팀(Red-teaming) — 안전 한계 테스트
점검: AI가 거짓말·해킹 도움·차별 발언 등을 거부하게 하는 게 왜 어려운가?
H. 자주 쓰는 용어 사전
| 용어 | 한 줄 정의 | 어디서 만나는가 |
|---|---|---|
| API | Application Programming Interface. 한 프로그램이 다른 프로그램과 소통하는 규약 | 웹 개발·통합 |
| REST/GraphQL | API 설계 양식. REST는 자원 중심, GraphQL은 쿼리 중심 | 백엔드 개발 |
| 클라이언트·서버 | 요청하는 쪽(클라) vs 응답하는 쪽(서버) | 모든 네트워크 |
| 프론트엔드·백엔드 | 사용자 화면 vs 서버 로직 | 웹·앱 개발 |
| 컴파일러·인터프리터 | 컴파일러는 한 번에 번역, 인터프리터는 한 줄씩 실행 | 프로그래밍 언어 |
| 버전 관리(Git) | 코드 변경 이력 추적·협업 도구 | 모든 개발 |
| CI/CD | Continuous Integration·Deployment. 자동 빌드·배포 | DevOps |
| 모놀리식·마이크로서비스 | 한 덩어리 vs 작게 쪼갠 서비스 | 시스템 설계 |
| 캐시(Cache) | 자주 쓰는 데이터를 빠른 곳에 미리 둠 | 성능 최적화 |
| 로드 밸런서 | 트래픽을 여러 서버로 분산 | 대규모 서비스 |
| CDN | Content Delivery Network. 콘텐츠를 사용자 가까운 서버에 캐싱 | 웹 성능 |
| Docker / Kubernetes | 컨테이너 도구·관리 도구 | 클라우드 운영 |
| 클라우드(AWS/GCP/Azure) | 빌려 쓰는 컴퓨팅 자원 | 대부분 현대 서비스 |
| OOP / 함수형 / 절차형 | 프로그래밍 패러다임의 3대 갈래 | 코딩 스타일 |
| 자료구조와 알고리즘 | CS 면접·기초의 표준 | 모든 공부 |
| 공개키 인프라(PKI) | 비대칭키 기반 인증 시스템 | HTTPS, 전자 서명 |
자기 점검 체크리스트
□ 비트·바이트·이진수의 관계를 안다
□ Big O 표기를 보면 알고리즘 속도를 가늠할 수 있다
□ 배열·연결리스트·스택·큐·해시·트리·그래프가 각각 언제 쓰이는지 안다
□ 추상화 계층(앱→OS→하드웨어) 모델을 이해한다
□ 프로세스와 스레드의 차이를 자기 사례로 설명할 수 있다
□ HTTP·DNS·TCP/IP의 역할을 외운다
□ 대칭키와 비대칭키 암호화의 차이를 안다
□ RDB와 NoSQL이 각각 어떤 상황에 적합한지 안다
□ ACID와 CAP 정리의 의미를 안다
□ 지도·비지도·강화·자기지도 학습의 차이를 안다
□ LLM의 한계(환각·시점·통계 패턴)를 안다
Comments
// admin login