프로그램 → 프로세스 → 스레드 : 실행 단위의 흐름
- 프로그램 : 아직 실행되지 않은 정적인 파일 (예: .exe, .jar 등)
- 프로세스 : 프로그램이 실행되어 운영체제로부터 자원을 할당받은 단위
- 스레드 : 프로세스가 할당받은 자원을 사용하여 실제로 작업을 수행하는 실행 흐름의 단위
코드 덩어리인 프로그램이 실행되면 프로세스가 되고, 그 안에서 작업을 수행하는 흐름이 스레드입니다.
프로세스(Process)란?
- 실행 중인 프로그램으로, OS로부터 독립된 메모리 공간을 할당받음
- 각 프로세스는 Code, Data, Heap, Stack 등의 메모리 공간을 독립적으로 가짐
- 하나의 프로세스는 다른 프로세스에 직접 접근할 수 없음 (보안상 격리됨)
예시: 크롬과 카카오톡을 동시에 실행하면 각각 독립적인 프로세스입니다.

스레드(Thread)란?
- 프로세스 내에서 실행 흐름을 담당하는 최소 실행 단위
- 같은 프로세스 안의 스레드들은 Code, Data, Heap 영역을 공유하고, Stack은 독립적
- 메모리 공유를 통해 스레드 간 통신이 빠르고 효율적이나, 동기화 문제가 발생할 수 있음
예시: 크롬에서 여러 개의 탭을 띄우면, 각 탭이 독립된 스레드로 동작 가능
카페를 예로 들어 프로세스와 스레드를 설명해보겠습니다.
- 프로그램 : 영업 전 조용히 닫혀 있는 카페 매장. 메뉴판(코드)은 있지만 손님을 받지 않음
- 프로세스 : 카페가 문을 열고 운영되기 시작한 상태. 바리스타와 손님이 오고감
- 스레드 : 카페 안에서 일하는 바리스타들. 메뉴를 보고 음료를 만들고 서빙하는 작업 단위
이 카페가 하루에 커피 100잔을 팔기 위해 한 명의 바리스타만 고용한다면 매우 비효율적일 겁니다. 하지만 바리스타를 3명 고용해서 동시에 커피를 만들고, 손님을 응대하게 하면 훨씬 빠르게 운영할 수 있겠죠? 여기서 바리스타가 바로 "스레드"이고, 카페라는 공간(운영과 자원이 돌아가는 공간)이 "프로세스"입니다.
그리고 모든 바리스타가 동일한 재료창고(메모리)를 공유해서 일합니다. 그래서 협업이 빠르지만, 서로 손을 잘못 맞추면(동기화 문제) 우유를 두 번 붓거나 커피가 쏟아질 수도 있습니다.
멀티프로세스와 멀티스레드
- 멀티프로세스: 여러 개의 프로세스가 동시에 동작 (예: 웹 브라우저, 백그라운드 앱 동시 실행)
- 멀티스레드: 하나의 프로세스 내에서 여러 작업을 동시에 수행 (예: 게임에서 로딩, 사운드, 키 입력 동시 처리)
- 멀티스레드의 장점
- 메모리 자원 절약 (공유 구조)
- 빠른 응답과 병렬 처리 가능
- 멀티스레드의 단점
- 하나의 스레드 오류가 전체 프로세스에 영향
- 동기화 문제로 인한 충돌 발생 가능
- 멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될 지 그 순서를 알 수 없다. 만약 A 스레드가 어떤 자원을 사용하다가 B 스레드로 제어권이 넘어간 후 B 스레드가 해당 자원을 수정했을 때, 다시 제어권을 받은 A 스레드가 해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.
결론
"프로세스는 자원을 할당받는 작업 단위이고, 스레드는 그 자원을 활용해 실행되는 흐름 단위입니다. 프로세스는 서로 메모리를 공유하지 않지만, 스레드는 같은 프로세스 내에서 메모리를 공유합니다. 그래서 스레드는 가볍고 빠르지만, 하나의 스레드 문제로 전체 프로세스가 영향을 받을 수 있다는 단점이 있습니다."
'Interview Question' 카테고리의 다른 글
[백엔드 면접 질문 준비] (7) RDB에서 페이징 쿼리의 필요성 (0) | 2025.04.15 |
---|---|
[백엔드 면접 질문 준비] (6) JVM이란 무엇인가? (0) | 2025.04.05 |
[백엔드 면접 질문 준비] (4) CI/CD란? (0) | 2025.04.03 |
[백엔드 면접 질문 준비] (3) HTTP 상태 코드에 대해 말해보세요. (0) | 2025.04.02 |
[백엔드 면접 질문 준비] (2) HTTP METHOD에 대해서 설명해 보세요. (0) | 2025.04.02 |