프로세스
- 실행 중인 프로그램
프로그램은 디스크에 저장된 코드 덩어리고, 이걸 실행하면 메모리에 올라가서 프로세스가 됨
- 각 프로세스는 독립된 메모리 공간을 가짐 (코드, 데이터, 힙, 스택)
스레드
- 프로세스 안에서 실행되는 작업 단위
- 하나의 프로세스 안에 여러 스레드가 있을 수 있음
- 스레드는 프로세스의 메모리를 공유 (코드, 데이터, 힙은 공유 / 스택은 각자)
프로세스 vs 스레드 차이
프로세스
- 독립된 메모리 공간
- 다른 프로세스와 메모리 공유 안 함
- 하나 죽어도 다른 거 영향 없음
- Context Switching 비용 큼
- 예시 : Chrome 탭 하나
스레드
- 프로세스 메모리 공유
- 하나 죽으면 프로세스 전체 영향
- Context Switching 비용 적음
- 동시성 문제 발생 가능
- 예시 : Chrome 탭 안의 작업들
Context Switching
- CPU가 여러 프로세스/스레드를 번갈아 실행할 때, 현재 작업 상태를 저장하고 다음 작업 상태를 불러오는 과정
- 스레드는 메모리를 공유하니까 저장/복원할 게 적어서 Context Switching 비용이 적음
동시성 문제 (Race Condition)
- 여러 스레드가 같은 자원을 동시에 수정하면 예상치 못한 결과가 나올 수 있음
메모리
메모리 구조
| 영역 |
저장 내용 |
특징 |
| 코드 |
실행할 코드 |
읽기 전용 |
| 데이터 |
전역변수, static 변수 |
프로그램 시작 - 종료 |
| 힙(Heap) |
동적 할당 객체(new) |
개발자가 관리(GC) |
| 스택(Stack) |
지역변수, 메서드 호출 |
자동 해제, LIFO |
public class Example {
static int staticVar = 10; // 데이터 영역
public void method() {
int local = 5; // 스택 영역
User user = new User(); // 힙 영역 (객체)
}
}
GC (Garbage Collection)
- Java는 힙 영역의 사용하지 않는 객체를 자동으로 메모리에서 제거(개발자가 직접 해제 안해도 됨)
- 단점 : GC가 실행될 때 순간적으로 애플레케이션이 멈출 수 있음 (Stop-the-World)
스택 오버플로우
- 재귀 호출이 너무 깊어지면 스택이 꽉 차서 발생
HTTP(HyperText Transfer Protocol)
- 클라이언트와 서버가 데이터를 주고받는 프로토콜
- 무상태(Stateless) : 각 요청이 독립적이고 이전 요청을 기억하지 않음. 세션/쿠키/토큰으로 상태 유지
HTTP vs HTTPS
HTTP
- 암호화 없음
- 데이터 평문 전송
- 중간에 탈취 가능
- 포트번호 :
80
HTTPS
- SSL/TLS로 암호화
- 데이터 암호화 전송
- 중간 탈취해도 못 읽음
- 포트번호 :
443
SSL/TLS
- 데이터를 암호화해서 전송하는 보안 프로토콜
- SSL이 먼저 나왔고, 보안 취약점 발견 후 개선 -> TLS
HTTP 버전별 차이
| 버전 |
특징 |
| HTTP/1.1 |
요청마다 연결, Keep-Alive로 재사용 가능 |
| HTTP/2 |
하나의 연결로 여러 요청 동시 처리 (멀티플렉싱) |
| HTTP/3 |
UDP 기반, 더 빠른 연결 |
TCP/UDP
TCP
- 연결 지향(3-way handshake)
- 데이터 순서 보장
- 손실 시 재전송
- 신뢰성 높음, 속도 느림
- HTTP, 파일 전송
UDP
- 비연결 지향
- 순서 보장 안 함
- 손실 시 재전송 없음
- 신뢰성 낮음, 속도 빠름
- 영상 스트리밍, 게임
3-way handshake (TCP 연결 과정)
클라이언트 → 서버: SYN (연결 요청)
서버 → 클라이언트: SYN + ACK (요청 수락)
클라이언트 → 서버: ACK (확인)
→ 연결 완료!
DNS(Domain Name System)
google.com → DNS 조회 → 142.250.196.142 (IP)
→ 해당 IP 서버로 요청
쿠키 / 세션 / JWT
|
저장위치 |
특징 |
| 쿠키 |
클라이언트 브라우저 |
서버 부하 없음, 탈취 위험 |
| 세션 |
서버 |
안전하지만 서버 메모리 사용 |
| JWT |
클라이언트 |
서버 상태 없음, 토큰 자체에 정보 포함 |
OSI 7계층
| 계층 |
이름 |
예시 |
| 7 |
응용 (Application) |
HTTP, FTP, DNS |
| 6 |
표현 (Presentation) |
암(복)호화, 압축 |
| 5 |
세션 (Session) |
세션 연결 관리 |
| 4 |
전송 (Transport) |
TCP, UDP |
| 3 |
네트워크 (Network) |
IP, 라우터 |
| 2 |
데이터링크 (DataLink) |
MAC 주소 |
| 1 |
물리 (Physical) |
케이블, 신호 |