0️⃣ 5줄 요약

  • **프로세스(Process)**는 서로 독립된 메모리 공간을 가진 실행 단위입니다.
  • **스레드(Thread)**는 같은 프로세스 안에서 메모리를 공유하는 실행 흐름입니다.
  • 프로세스는 격리(안전성)가 강점, 스레드는 속도와 자원 효율이 강점입니다.
  • 실무에선 보통 “프로세스 여러 개 + 스레드”를 혼합합니다.
  • 장애/성능/자원 관점에서 이해하면 튜닝 포인트가 보입니다.

1️⃣ 먼저 상황부터: “왜 갑자기 서버가 전체로 죽었지?”

운영하다 보면 이런 순간이 옵니다.

  • 특정 서비스 하나만 느린 게 아니라 전체가 버벅임
  • 워커 하나가 죽었는데 전체 서비스가 영향을 받음
  • CPU는 널널한데 응답이 밀림

이럴 때 원인을 좁히려면
“이게 프로세스 문제인가? 스레드 문제인가?”를 구분할 줄 알아야 합니다.


2️⃣ 핵심 정의 3개 (딱 필요한 만큼만)

  • 프로세스: 운영체제가 관리하는 독립 실행 단위 (주소 공간 분리)
  • 스레드: 하나의 프로세스 안에서 실행되는 경량 실행 단위 (메모리 공유)
  • 컨텍스트 스위칭: 실행 대상을 바꿀 때 드는 전환 비용 (프로세스가 더 큼)

3️⃣ 한 장으로 보는 차이

구분프로세스스레드
메모리서로 완전 분리같은 공간 공유
안정성하나 죽어도 영향 적음한 스레드 문제 → 전체 영향 가능
생성 비용비교적 큼비교적 작음
통신IPC 필요공유 메모리
장점격리, 안정성속도, 효율

4️⃣ 실무에서 가장 많이 보는 구조

예시 A) 웹서버 구조

보통 구조는 이렇습니다.

프로세스 여러 개(워커) + 각 워커 내부 스레드

이유:

  • CPU 코어 활용을 위해 프로세스를 여러 개 띄움
  • 각 프로세스 안에서 스레드로 동시 요청 처리

예:

  • Nginx → 마스터 + 워커 프로세스 구조
  • Java 서버 → 프로세스 1개 + 스레드풀 다수
  • PHP-FPM → 여러 워커 프로세스

실무 포인트:

  • 워커 하나 죽어도 전체는 유지 → 프로세스 격리 효과
  • 워커 내부는 스레드로 효율 확보

예시 B) 배치/크롤러

CPU 집중 작업:

  • 이미지 처리
  • 암호화
  • 압축

→ 프로세스가 유리한 경우 많음 (코어 분산 + 격리)

I/O 중심 작업:

  • HTTP 요청
  • DB 조회
  • 파일 읽기

→ 스레드/비동기가 효율적

이 차이를 모르고 구조를 설계하면 CPU를 못 쓰거나, 메모리 폭주가 발생합니다.


예시 C) 워드프레스 + DB 장애

디스크가 꽉 찼던 사례를 보면:

  • mysqld → 별도 프로세스
  • PHP-FPM → 여러 프로세스
  • 웹서버 → 별도 프로세스

그런데 디스크가 100% 차니 전부 오류.

여기서 중요한 교훈:

프로세스 격리는 메모리 관점이고,
디스크/CPU는 공용 자원이다.

프로세스 구조만 믿으면 안 됩니다.
자원 모니터링이 핵심입니다.


예시 D) Docker는 프로세스인가?

Docker는 VM이 아닙니다.

  • 호스트 커널 공유
  • 내부에서 일반 프로세스/스레드 실행

컨테이너가 죽는다는 건 보통
“그 안의 메인 프로세스가 죽었다”는 뜻입니다.

그래서 PID 1 관리가 중요합니다.


5️⃣ 리눅스에서 바로 확인하는 법

프로세스 보기

ps aux | head

스레드까지 보기

ps -eLf | head

특정 PID 스레드 수

ps -o nlwp= -p <PID>

nlwp = 스레드 수

top에서 스레드 모드

top -H

실무에서는 nlwp가 갑자기 늘어나면
스레드 폭주를 의심합니다.


6️⃣ 선택 기준 (운영 관점)

✔ 안정성이 더 중요하다 → 프로세스 비중 ↑
✔ 처리량/공유 데이터가 중요하다 → 스레드 비중 ↑
✔ 대부분은 “혼합 구조”가 정답

튜닝할 때는 이렇게 봅니다:

  • 워커 수 = CPU 코어 활용
  • 스레드풀 크기 = 동시성 제한
  • 메모리 한계 = 프로세스 수와 직결

7️⃣ 자주 하는 오해

❌ 스레드는 무조건 빠르다
→ 동기화/락 경쟁 심하면 오히려 느려짐

❌ 프로세스면 무조건 안전하다
→ 디스크/CPU는 공유 자원

❌ 컨테이너면 완전 격리다
→ 커널은 공유


8️⃣ 장애 대응 체크리스트

  • 특정 프로세스만 죽었나, 전체인가?
  • 스레드 수(NLWP)가 비정상적으로 늘었나?
  • CPU 코어 대비 워커 수 적절한가?
  • 스레드풀 제한 설정했는가?
  • 디스크/메모리 같은 공용 자원 병목은 아닌가?

9️⃣ 실무에서 얻은 교훈

프로세스 vs 스레드는 시험 문제가 아니라
“격리와 효율의 균형” 문제입니다.

장애가 났을 때:

  • 메모리 격리 문제인가?
  • 동기화 문제인가?
  • 공용 자원 병목인가?

이 질문이 바로 나오면, 대응 속도가 훨씬 빨라집니다.


FAQ

Q1. 프로세스가 무조건 더 안전한가요?
메모리 격리는 강하지만, 디스크/CPU 병목은 같이 영향을 받습니다.

Q2. 스레드는 왜 위험하다고 하나요?
메모리를 공유하기 때문에 동기화 실수나 메모리 오염이 전체 장애로 번질 수 있습니다.

Q3. 요즘은 비동기가 대세 아닌가요?
맞습니다. 하지만 내부적으로는 여전히 스레드/이벤트 루프 구조 이해가 필요합니다.

이 글이 도움이 되었나요?좋아요/추천은 다시 누르면 취소됩니다.
hong
발행: 2026.02.16 최종 검토: 2026.02.21

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다