프로세스와 스레드의 차이점은 무엇인가요?
한 줄 답변
프로세스는 운영체제로부터 독립된 메모리 공간을 할당받는 실행 단위이며, 스레드는 프로세스 내에서 코드/데이터/힙 영역을 공유하면서 독립적인 스택만 가지는 실행 단위입니다.
핵심 개념 정리
프로세스(Process)는 운영체제가 프로그램을 실행할 때 생성하는 독립적인 실행 단위입니다. 각 프로세스는 자신만의 코드, 데이터, 힙, 스택 영역을 가집니다.
스레드(Thread)는 프로세스 안에서 실행되는 흐름의 단위입니다. 같은 프로세스의 스레드들은 코드, 데이터, 힙 영역을 공유하고, 각자의 스택과 레지스터만 독립적으로 가집니다.
메모리 공유 덕분에 스레드 간 통신은 빠르지만, 공유 자원에 대한 동기화(Synchronization) 문제가 발생합니다. Race Condition, Deadlock 같은 문제를 Mutex, Semaphore 등으로 해결해야 합니다.
비교 정리
| 항목 | 프로세스 | 스레드 |
|---|---|---|
| 메모리 공간 | 독립적 (격리) | 코드/데이터/힙 공유 |
| 생성 비용 | 높음 | 낮음 |
| 컨텍스트 스위칭 | 비용 높음 (TLB 플러시) | 비용 낮음 |
| 안정성 | 하나가 죽어도 다른 프로세스 영향 없음 | 하나가 죽으면 전체 프로세스 종료 |
| 통신 | IPC (파이프, 소켓, 공유 메모리) | 변수 직접 공유 (빠름) |
| 동기화 | 불필요 (독립적) | 필요 (Mutex, Semaphore) |
면접에서 이렇게 답하세요
Chrome이 멀티프로세스(탭마다 프로세스), Nginx가 멀티프로세스, Node.js가 싱글스레드 + 이벤트루프인 이유를 설명할 수 있으면 실무 감각이 돋보입니다. '왜 그 아키텍처를 선택했는가'까지 답하면 시니어급 답변입니다.
자주 묻는 추가 질문
Q. 멀티프로세스와 멀티스레드 중 어느 것을 써야 하나요?
안정성이 중요하면 멀티프로세스(한 프로세스가 죽어도 다른 것에 영향 없음), 성능과 자원 효율이 중요하면 멀티스레드(메모리 공유로 통신 빠름)를 선택합니다. 웹 브라우저는 보안/안정성 때문에 멀티프로세스, 게임 엔진은 성능 때문에 멀티스레드를 주로 사용합니다.
Q. 코루틴(Coroutine)은 스레드와 어떻게 다른가요?
스레드는 OS가 스케줄링하는 선점형(Preemptive) 방식이고, 코루틴은 프로그래머가 직접 제어하는 비선점형(Cooperative) 방식입니다. 코루틴은 컨텍스트 스위칭 비용이 거의 없어 수만 개를 동시에 실행할 수 있습니다. Kotlin의 coroutine, Go의 goroutine이 대표적입니다.
Q. Deadlock은 어떻게 방지하나요?
교착 상태의 4가지 조건(상호 배제, 점유 대기, 비선점, 순환 대기) 중 하나를 깨면 됩니다. 실무에서는 락 순서 고정(Lock Ordering), 타임아웃, try-lock 패턴을 주로 사용합니다.
커뮤니티 하이라이트
“면접관이 '프로세스와 스레드 차이' 물어보고 나서 바로 'GIL이 뭔지 아세요?' 하더라구요. Python/Java 면접이면 GIL까지 준비하세요.”
“Spring에서 @Async 쓸 때 스레드 풀 개수 설정하는 이유, 왜 코어 수보다 많이 설정하는지 설명하면 실무 경험 어필 됩니다.”
56명의 개발자가 이 질문에 참여했습니다
관련 면접 질문
앱에서 직접 답변해보세요
매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.