기술 면접에서 반드시 나오는 네트워크(TCP/IP, HTTP, DNS), 운영체제(프로세스/스레드, 메모리, 동기화), 데이터베이스(인덱스, 트랜잭션, 정규화) 핵심 개념과 모범 답변을 모두 정리한다.
이번 강에서 배울 것
- 네트워크: TCP vs UDP, HTTP vs HTTPS, DNS 동작 원리
- 운영체제: 프로세스 vs 스레드, 교착상태, 메모리 관리
- 데이터베이스: 인덱스, 트랜잭션 ACID, 정규화
- 각 주제별 면접 단골 질문과 모범 답변
네트워크 — 필수 개념
TCP vs UDP
TCP (Transmission Control Protocol):
연결 지향 (3-way handshake: SYN → SYN-ACK → ACK)
신뢰성 보장: 순서, 재전송, 흐름 제어
느리지만 정확: HTTP, 이메일, 파일 전송
UDP (User Datagram Protocol):
비연결형, 순서 보장 없음
빠르지만 신뢰성 없음: DNS 조회, 스트리밍, 게임, VoIP
면접 답변:
Q: "TCP 3-way handshake를 설명하세요"
A: 클라이언트가 SYN 전송
서버가 SYN-ACK 응답 (연결 받겠다)
클라이언트가 ACK 전송 (확인)
이 3단계로 양방향 연결 수립 확인
HTTP vs HTTPS
HTTP: 평문 통신, 80포트
HTTPS: TLS/SSL 암호화, 443포트
TLS Handshake 과정:
1. 클라이언트 → 서버: 지원 가능한 암호화 방식 목록
2. 서버 → 클라이언트: 선택한 방식 + 인증서(공개키 포함)
3. 클라이언트: 인증서 검증 (CA 확인)
4. 대칭키 교환 (공개키로 암호화)
5. 이후 대칭키로 통신
HTTP 상태 코드 면접 단골:
200: OK
201: Created (POST 성공)
301: Moved Permanently (영구 리디렉션)
302: Found (임시 리디렉션)
400: Bad Request (잘못된 요청)
401: Unauthorized (인증 필요)
403: Forbidden (권한 없음)
404: Not Found
429: Too Many Requests (속도 제한)
500: Internal Server Error
503: Service Unavailable
운영체제 — 필수 개념
프로세스 vs 스레드
프로세스(Process):
독립적인 메모리 공간 (코드, 데이터, 힙, 스택)
프로세스 간 통신: IPC (파이프, 소켓, 공유 메모리)
생성 비용 높음, 격리 강함
스레드(Thread):
같은 프로세스 내 메모리 공유 (힙, 코드, 데이터)
스레드마다 독립적인 스택과 레지스터
생성 비용 낮음, 통신 빠름, 동기화 필요
면접 답변:
Q: "프로세스와 스레드의 차이는?"
A: 프로세스는 독립 메모리 공간, 스레드는 메모리 공유
스레드가 더 가볍고 통신 빠르지만, 공유 자원으로 인한
동기화 문제(경쟁 조건, 교착 상태) 발생 가능
교착 상태(Deadlock) 4가지 조건:
1. 상호 배제: 자원을 한 번에 하나만 사용
2. 점유와 대기: 자원을 가진 채 다른 자원 대기
3. 비선점: 다른 프로세스의 자원 강제 회수 불가
4. 순환 대기: 프로세스가 원형으로 서로 대기
예방: 4가지 조건 중 하나 제거
회피: 은행원 알고리즘
탐지: 주기적 교착 상태 탐지 후 해제
메모리 관리:
가상 메모리: 실제 메모리보다 큰 주소 공간 제공
페이징: 고정 크기 블록(페이지)으로 분할 관리
스와핑: 물리 메모리 부족 시 디스크에 임시 저장
페이지 폴트: 가상 주소에 실제 데이터 없을 때 OS 개입
데이터베이스 — 필수 개념
인덱스(Index)
B-Tree 인덱스 (MySQL InnoDB 기본):
균형 트리 구조, O(log n) 탐색
범위 조회, ORDER BY에 유리
Hash 인덱스:
O(1) 정확 일치 탐색
범위 조회 불가
인덱스 주의사항:
인덱스 = 별도 자료구조 유지 → 쓰기 성능 저하
과도한 인덱스: INSERT/UPDATE/DELETE 느려짐
카디널리티 낮은 컬럼(성별 등) 인덱스 효과 없음
인덱스 사용 규칙:
WHERE, JOIN, ORDER BY 절에 사용되는 컬럼
Composite Index: 왼쪽 컬럼부터 순서대로 사용
트랜잭션 ACID:
A — Atomicity (원자성): 전부 성공 또는 전부 롤백
C — Consistency (일관성): 트랜잭션 전후 제약 조건 유지
I — Isolation (격리성): 동시 실행 트랜잭션이 서로 영향 없음
D — Durability (지속성): 커밋된 데이터는 장애 후에도 유지
격리 수준 (낮을수록 빠르고 문제 많음):
READ UNCOMMITTED: Dirty Read 발생
READ COMMITTED: Oracle 기본값 (Dirty Read 방지)
REPEATABLE READ: MySQL InnoDB 기본값 (Phantom Read 가능)
SERIALIZABLE: 가장 안전, 성능 저하
면접 답변:
Q: "트랜잭션 격리 수준이 왜 필요한가요?"
A: 동시에 여러 트랜잭션이 같은 데이터에 접근할 때
Dirty Read(미커밋 데이터 읽기), Phantom Read(반복 조회 결과 다름)
같은 문제 발생. 격리 수준으로 성능과 안전성 트레이드오프 설정
정규화 (Normalization):
1NF: 원자값 (하나의 컬럼에 여러 값 금지)
2NF: 부분 함수 종속 제거 (복합 키의 일부에만 종속된 컬럼 분리)
3NF: 이행 함수 종속 제거 (A->B->C일 때 C를 별도 테이블로)
BCNF: 3NF 강화 버전
정규화 장점: 중복 제거, 데이터 일관성
정규화 단점: JOIN 증가 → 성능 저하
역정규화(Denormalization): 성능을 위해 의도적으로 중복 허용
실무: OLTP는 정규화, OLAP/분석은 역정규화 적용
강의 핵심 요약
- TCP: 연결형·신뢰성, UDP: 비연결형·빠름 / HTTP 상태 코드 200~503 암기
- 프로세스: 독립 메모리, 스레드: 공유 메모리 + 동기화 필요
- 트랜잭션 ACID + MySQL 기본 격리 수준 REPEATABLE READ 반드시 기억
- 다음 강: 프로젝트를 깊이 있게 설명하는 기술 — 면접관이 파고들 때 대처법
관련 검색어 · TCP UDP 차이, HTTP HTTPS, 프로세스 스레드 차이, 교착 상태, DB 인덱스, 트랜잭션 ACID, 데이터베이스 정규화