프로세스와 스레드란 무엇인가
개발 공부를 하다 보면 ‘프로세스’와 ‘스레드’라는 단어를 자주 마주치지만, 막상 둘의 차이를 설명하려면 말이 막히는 경우가 많습니다. 프로세스(Process)는 운영체제로부터 독립된 메모리 공간을 할당받아 실행되는 하나의 프로그램 단위입니다. 예를 들어 크롬 브라우저를 실행하면 하나의 프로세스가 생성되고, 메모장을 실행하면 또 다른 별도의 프로세스가 생성됩니다. 반면 스레드(Thread)는 프로세스 내부에서 실제로 작업을 처리하는 실행 흐름의 단위입니다. 하나의 프로세스는 최소 하나 이상의 스레드를 가지며, 여러 개의 스레드를 만들어 동시에 여러 작업을 처리할 수도 있습니다.
회사와 직원으로 이해하는 동작 원리
이해를 돕기 위해 프로세스를 ‘회사’, 스레드를 ‘그 회사에서 일하는 직원’에 비유해볼 수 있습니다. 회사(프로세스)는 사무실, 자원, 예산(메모리 공간)을 독립적으로 소유합니다. 그리고 그 회사에 소속된 직원들(스레드)은 같은 사무실과 자원을 공유하며 함께 일합니다. 옆 회사 직원이 우리 회사 자원을 마음대로 쓸 수 없듯, 서로 다른 프로세스는 원칙적으로 메모리를 공유하지 않습니다. 하지만 같은 회사 소속 직원들은 같은 파일 캐비닛(Heap 영역 등)을 함께 사용하는 것처럼, 한 프로세스 안의 스레드들은 Heap이나 전역 변수 같은 자원을 공유합니다. 다만 각 직원마다 개인 다이어리(Stack 영역)는 따로 갖고 있듯, 스레드마다 독립적인 스택 공간은 별도로 유지됩니다.
실무에서 왜 이 개념이 중요한가
이 차이는 실무에서 성능과 안정성에 직접 영향을 줍니다. 여러 프로세스를 사용하면 하나가 오류로 죽어도 다른 프로세스에 영향을 주지 않아 안정적이지만, 프로세스 간 통신(IPC)이 필요하고 메모리 자원 소모가 큽니다. 반면 멀티스레드 방식은 자원을 공유해 가볍고 빠르지만, 여러 스레드가 동시에 같은 데이터에 접근하면 Race Condition 같은 동시성 문제가 발생할 수 있습니다. 그래서 웹 서버는 요청마다 스레드를 생성해 빠르게 처리하고, Node.js처럼 단일 스레드 기반 언어는 비동기 처리로 효율을 높이는 등 서비스 특성에 맞춰 전략을 다르게 가져갑니다. 결국 프로세스와 스레드의 차이를 이해하는 것은 단순 암기가 아니라, 애플리케이션을 안정적이면서도 효율적으로 설계하기 위한 기본 소양이라 할 수 있습니다.