💻프로세스? 스레드? 어디서 들어는 봤는데..

2026. 3. 10. 23:21·CS

Intro.

사실 프로세스는 정말 많은 뜻을 가지고 있다. 단순히 IT 관련 분야에서만 해도 굉장히 많은 뜻을 가지고 있다. 개발 팀의 방법론인 개발 프로세스, 서버에서의 백그라운드 프로세스, OS에서의 프로세스.. 등 이 외에도 과정이란 뜻을 담고 있기 때문에 다양한 곳에서 쓰이는 단어인데 이번엔 그 중에서 OS 중 컴퓨터 자원으로의 프로세스와 스레드에 대해서 알아보겠다. 여담으로 '쓰레드'가 아니라 '스레드'가 표준 표기라고 한다..

 


사전 지식

프로세스와 스레드는 여러 차이가 있다. 그 중 내가 생각하는 가장 큰 차이는 단위의 차이와 자원을 공유하는 방식의 차이이다. 프로세스는 작업의 단위이고, 스레드는 실행의 단위이다. 이렇게 말하면 뭐라는지 잘 모르겠다. 설명을 듣고 다시 알아보자.

 

메모리 구조

프로세스와 스레드에 알기 전에 컴퓨터 메모리 구조에 대해 알아볼 필요가 있다. 실제로 메모리를 만들 때 물리적으로 만든 구조가 아니고, 운영체제가 RAM을 효율적으로 쓰기 위해서 구역을 나누어 논리적인 구조를 말한다.

 

  • 정적 영역
    • TEXT(CODE): 실행할 프로그램의 명령어가 읽기 전용으로 저장되는 곳이다. (기계어로 저장됨)
    • DATA: 전역 변수 같이 정적인 데이터가 저장되는 곳이다. 프로그램 시작 시 할당되고 종료시 소멸된다.
  • 동적 영역 
    • HEAP:사용자가 직접 관리하는 메모리 영역이다. 동적할당을 통해 런타임 시 크기가 결졍된다. (낮은 곳에서 높은 곳으로)
    • STACK: 함수의 매개변수, 지역 변수, 리턴 값 등이 저장된다. 함수 호출 시 할당되고 종료 시 자동으로 해제된다. (높은 곳에서 낮은 곳으로)

동적영역은 메모리 크기가 언제든 바뀔 수 있다. 특히 HEAP 영역은 우리가 개발하면서 할당했다가 해제할 수 있는 영역이다. 서로 만나는 방향으로 메모리가 늘어나는데 만약 만나게 된다면, 메모리 부족인 Stack overflow나 Heap overflow가 발생하게 된다.

 

이렇게 4개로 나누는 이유는 뭘까?

사실 물리적 메모리가 이렇게 4구역으로 나뉘어져 있는 것은 아니다. 메모리를 효율적으로 사용하기 위해 운영체제가 4개의 구역을 정해서 메모리를 운용하는 것뿐이다. 프로그램을 실행할 때, 데이터의 성격에 따라 읽기/쓰기 권한이 다르게 설정되기 때문이다. CODE 영역은 읽기 권한만 있어도 프로그램을 실행하는 데 문제가 없다. 보안상의 이점은 덤이다. 후에 기술하겠지만, 멀티 프로세스에서 CODE 영역은 똑같으니 공유해서 쓰는 방식으로 메모리를 아끼는 것도 4개의 구역으로 나누었기 때문에 가능한 것이다. 각 구역마다 생명주기가 다른 이유도 있다.

 


프로세스에 대해

초기 컴퓨터는 하나의 작업밖에 수행하지 못했다. 즉, 입출력 작업 중에는 CPU가 아무것도 못하고 기다려야 했다. 비싼 CPU가 노는 꼴을 볼 수 없었던 사람들은 CPU에게 쉬는 시간을 주지 않고 착취하기로 한다. 그렇게 RAM이 만들어졌고, 하나의 프로그램이 어디서 어디까지 메모리를 쓸 것임을 정하기 위해 만들어진 정보 체계가 프로세스이다.

 

.exe 파일(메모장)을 실행하기 전에는 SSD 같은 보조기억장치에 정적인 상태로 저장되어있다. 우린 이것을 프로그램이라고 부르고 더블클릭하면 운영체제(윈도우)가 해당 프로그램을 실행하기 위해서 RAM의 메모리 공간으로 가져오면서 프로세스가 된다. OS는 각 프로세스에게 적절한 용량의 메모리 공간을 할당하게 된다.

할당한 공간만큼 안 쓰고 있을 때는 어떡하지? 빈 공간을 차지하고 있나?

예를 들어 메모장을 실행한다고 하자. 메모장은 OS가 1GB의 공간이 필요하다고 하면 가상 메모리로 1GB를 준다. 즉 실제로 RAM 1GB를 차지하고 있지는 않다. 넌 1GB를 쓸 수 있다고 메모장 프로세스에게 약속한 것과 같다. 메모장에 글자 몇 개만 입력하고 있다면 실제로는 RAM을 10MB 정도만 차지하고 있고 나머지 990MB는 가상 메모리로 대기하고 있는 것이다.

 

한마디로, 실행 중인 프로그램이다.

 


스레드에 대해

하드웨어와 소프트웨어가 발전하면서 CPU의 코어 개수가 늘어남에 따라 그리고 프로그램의 동시성이 요구됨에 따라서 프로세스 하나만으로는 프로그램을 실행하기 어려워졌다. 일단 프로세스는 서로 자원을 공유하는 과정이 쉽지 않고 프로세스는 메모리를 통째로 차지하기 때문에 프로세스의 비용이 컸다. 이러한 단점을 보완하기 위해 만들어진 개념이 바로 '스레드'다. 우리가 지금 웹 브라우저에서 파일을 다운받으면서 노래도 듣고 웹 서핑도 할 수 있는 이유다.

프로세스를 여러 개 쓰면 안돼나?

 라는 의문이 생길 수도 있다. 과거에는 정론이었고 현재도 종종 쓰이는 방법이다. 바로 '멀티-프로세스' 방식이다. 안정성 면에서는 멀티 프로세스 방식이 우수하다. 그럼에도 왜 스레드를 쓰느냐? 쉽게는 가성비 때문이다. 후에 멀티 스레드와 멀티 프로세스의 차이에 대해서 다른 게시글에서 자세히 다루도록 하겠다.

 

스레드는 하나의 프로세스 안에서 자원을 공유하면서 자신의 작업 실행 흐름은 유지하는 실행의 단위이다. 하나의 공장 안에 여러 개의 기계가 돌아가고 있는 것을 생각하면 쉽다. 프로세스는 공장, 스레드는 공장 안의 기계인 것이다.

 

한마디로, 프로세스 안의 실행의 단위이다.

 


동시성과 병렬성

얼핏 들으면 둘이 비슷해 보이지만, 서로 다른 개념이다. 하드웨어적 기반은 병렬성이지만, 우리에게 가깝게 느껴지는 소프트웨어는 실제로 동시성에 가깝다.

 

병렬성

병렬성은 실제로 동시에 수행하는 것을 의미한다. CPU의 멀티 코어를 생각하면 쉽다. 실제로 코어 수에 따라서 여러 명령어를 동시에 연산한다. 즉, 싱글 코어 환경에서는 동시성은 구현해도 병렬성을 갖지는 못한다. 

 

동시성

동시성은 '여러 개가 동시에 실행되는 것처럼' 느껴지는 것이다. 우리 컴퓨터는 효율성을 위해 여러 작업을 왔다갔다 하면서 처리한다. 작업의 단위를 엄청 작게 쪼갠 동시에 엄청 빠르게 처리한다.(고성능 ADHD) 선풍기 돌아가는 모습을 생각해보자. 선풍기의 날개는 3개지만, 빠르게 돌아갈 때는 그냥 하나의 원으로 보이지 않는가? 똑같다. 너무 빠르게 처리해서 우리는 동시에 돌아가는 것처럼 느끼는 것이다.

 

이렇게 시간을 쪼개서 빠르게 작업하여 동시에 하는 것처럼 느껴지게 하는 것을 인터리빙(Interleaving)이라고 하는데, 싱글 코어에서는 인터리빙을 통해 동시성을 구현하고 멀티코어에서는 실제로 병렬성을 갖는 동시에 인터리빙을 통해 동시성을 극대화한다. 

물리적인 기반은 병렬성인데 실제로 프로그램이 돌아가는 것은 동시성이다. 왜 그럴까?

프로세스가 코어의 수보다 압도적으로 많아서 그렇다. 스레드는 말할 것도 없다. 하나의 프로그램이 반드시 하나의 프로세스는 아니다. 뿐만 아니라 우리가 컴퓨터를 킨 순간부터 이미 수 많은 프로세스가 돌아가기 시작한다. 때문에 코어가 많아도 여러 프로그램이 실제로 동시에 수행되기는 어려운 것이다. 

 


컨텍스트 스위칭

위에서 설명한 것처럼 CPU는 한번에 하나의 프로세스밖에 실행하지 못하는데 여러 작업을 번갈아가면서 빠르게 처리하기 위해서는 CPU가 기존 프로세스에서 다른 프로세스로 전환하는 과정이 필요하다. 이 일련의 과정을 컨텍스트 스위칭이라고 한다.

 

전환할 때, 어디까지 했는지 어디서부터 하면 되는지 상태를 저장하고 불러와야 한다. 때문에 운영체제는 프로세스의 상태에 대한 정보를 담고 있는 임시 저장소인 PCB를 사용한다.

 

전환할 때는 기존 프로세스의 정보를 PCB에 저장하고 전환할 프로세스의 정보를 불러오는 과정을 거친다. 프로세스끼리는 완전히 독립 상태이기 때문에 완전히 갈아 끼워야 한다. 가상 메모리 기법을 가능하게 하는 TLB(Translation Lookaside Buffer)를 초기화하고 PCB를 통해 프로세스를 전환하는 과정에서 유휴 시간이 발생하는데, 이것을 컨텍스트 스위칭 오버헤드라고 한다.

 

프로세스뿐만 아니라 스레드에도 컨텍스트 스위칭이 있다. 

 

스레드에는 PCB 대신 TCB라는 저장소를 사용한다. PCB는 OS가 직접 관리하고 TCB는 해당 프로세스가 직접 관리한다. 앞서 말했듯이 스레드는 하나의 프로세스 안에서 스택 영역만 공유하기 때문에 개별 실행 상태. 즉, 레지스터 정보만 교환하면 컨텍스트 스위칭이 가능하다. 프로세스보다 더 빠르고 가벼울 수밖에 없다.

 


자원의 공유

여기서 말하는 자원은 프로그램이 실행되기 위해 필요한 모든 요소이다. 특히, 메모리의 공간이나 데이터라고 생각하면 된다.

 

프로세스는 기본적으로 독립적이어서 다른 프로세스의 정보에 접근할 수 없다. 서로 정보를 공유하는 공유 메모리를 따로 만들거나 커널을 통해 직접 메시지를 전달하는 등의 특수한 방법들(IPC)을 이용해야만 서로의 자원을 주고받을 수 있다.

 

반면, 스레드는 하나의 프로세스 안에서 Stack 외의 영역의 자원을 기본적으로 공유하고 Stack 영역을 독립적으로 나눠서 사용한다. 즉, 직접적으로 Stack 영역 외의 나머지 자원들을 서로 마음껏 이용할 수 있다.

스레드의 Stack 영역은 어디서 가져오는 걸까?

기존에 프로세스에 있는 Stack 영역을 나눠서 사용하는 것이 아니라 가상 메모리 영역에서 스레드를 위한 Stack 영역을 새로 할당해서 사용한다.

 


프로세스 vs 스레드

그래서 이제 본론으로 돌아가 위에서 말했던 프로세스와 스레드의 차이에 대해서 다시 말해보겠다. 앞서 스레드와 프로세스의 차이를 많이 설명하긴 했지만, 마지막으로 정리해서 알아보자.

 

우선 프로세스는 프로그램을 실행하기 위해 메모리 구조에 대한 할당 구역을 의미한다. 그래서 자원, 작업의 단위이고 스레드는 프로세스 안에서 작업을 또 나누어서 할당한 것이라고 보면 된다.

 

스레드는 프로세스의 자원을 나눠 쓰기 때문에 빠르게 컨텍스트 스위칭이 가능하다. 물론 이것이 무조건 장점만은 아니다. 반대로 생각하면 프로세스는 독립적으로 동작하기 때문에 하나가 죽는다고 다른 게 죽지도 않고 데이터 오염에서 비교적 자유롭다는 점 때문에 더 안정적이다. 때에 따라 적절하게 사용하기만 하면 된다.

'CS' 카테고리의 다른 글

🤗멀티 스레딩 수듄 ㅋㅋ  (0) 2026.03.14
🤯그게 그거 아닌가? 멀티 프로세스 vs 멀티 스레드  (0) 2026.03.14
😗TCP? HTTP랑 비슷한 거 아님?  (0) 2026.03.03
🤔 REST API랑 RESTful API, 뭐가 달라? (진짜 모름)  (0) 2026.02.25
API가 도대체 뭔데  (0) 2026.02.24
'CS' 카테고리의 다른 글
  • 🤗멀티 스레딩 수듄 ㅋㅋ
  • 🤯그게 그거 아닌가? 멀티 프로세스 vs 멀티 스레드
  • 😗TCP? HTTP랑 비슷한 거 아님?
  • 🤔 REST API랑 RESTful API, 뭐가 달라? (진짜 모름)
asht1124
asht1124
DEV blog
  • asht1124
    ASHT
    asht1124
  • 전체
    오늘
    어제
    • 분류 전체보기 (18)
      • 프런트엔드 (0)
      • 백엔드 (0)
        • Sping (0)
      • Dev-ops (0)
      • CS (18)
        • Web 이론 (2)
        • 보안 (1)
        • DB (4)
        • 네트워크 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    멀티 프로세스
    정규화
    rdb
    반정규화
    멀티 스레드
    RESTful API
    3-way handshake
    http
    2NF
    인터페이스
    1NF
    OAS
    BCNF
    데이터 무결성
    스레드
    프로세스
    nosql
    acid
    PCB
    REST API
    보안
    비밀키
    rest
    4-way handshake
    비대칭키
    API
    tcp
    프로토콜
    3NF
    tcb
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
asht1124
💻프로세스? 스레드? 어디서 들어는 봤는데..
상단으로

티스토리툴바