단일 프로세스 시스템에 대해서 알아보자 !
단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행한다. 또 다른 프로그램을 실행하려면, 먼저 실행 중이던 프로그램을 종료시키고 그 다음 프로그램을 실행해야 한다.
단일 프로세스 시스템의 단점
❌ 1. 병렬 처리 불가
한 번에 하나의 작업만 처리 가능해서 여러 작업을 동시에 수행할 수 없어.
예: 사용자가 작업 중에 파일 다운로드나 음악 재생을 동시에 할 수 없음.
❌ 2. 응답성 저하
하나의 작업이 오래 걸리면 전체 시스템이 멈춘 것처럼 느껴질 수 있어.
예: 무한 루프나 I/O 대기 중이면 시스템 전체가 반응이 없음.
❌ 3. 확장성 한계
다중 CPU나 멀티코어 환경을 활용할 수 없음.
현대 시스템에서는 CPU 코어가 많아도 하나만 쓰는 비효율 발생.
❌ 4. 에러의 영향 범위가 큼
하나의 프로세스에서 에러가 발생하면 전체 시스템이 영향을 받아.
예: 메모리 누수나 예외 상황 발생 시 시스템 전체가 다운됨.
❌ 5. 모듈화 및 유지보수 어려움
모든 기능이 하나의 프로세스에 집중되므로, 코드가 커질수록 복잡하고 유지보수 어려움.
개선 방법
✅ 1. 멀티프로세스(Multi-Process) 구조로 전환
여러 개의 프로세스를 생성해서 병렬로 작업 처리 가능하게 함.
각 프로세스가 독립적으로 실행되므로 하나의 프로세스가 죽어도 전체 시스템에는 영향이 적음.
예: 웹 서버에서 요청마다 프로세스를 분기해서 처리.
✅ 2. 멀티스레드(Multi-Thread) 도입
하나의 프로세스 내에서 여러 스레드를 만들어 동시에 여러 작업 수행.
메모리를 공유하기 때문에 통신 속도는 빠름.
예: UI 응답은 메인 스레드, 데이터 로딩은 백그라운드 스레드로 처리.
✅ 3. 이벤트 기반 구조(Event-driven Architecture) 적용
비동기 방식으로 이벤트를 큐에 쌓고, 하나씩 처리하는 구조.
Node.js나 JavaScript에서 주로 사용함.
CPU 리소스를 효율적으로 사용 가능.
✅ 4. 비동기 I/O 사용
I/O 작업(예: 파일 읽기, 네트워크 요청 등)을 동기 방식 대신 비동기 처리로 전환.
기다리지 않고 다른 작업을 먼저 처리함으로써 응답성을 높일 수 있음.
✅ 5. 프로세스 분산 (Microservices / Modularization)
시스템 기능을 여러 서비스(또는 모듈)로 나누고, 필요 시 독립적으로 배포·확장 가능하게 함.
유지보수성과 확장성이 좋아짐.
✅ 6. 로드 밸런싱 도입
여러 프로세스나 서버에 작업을 균등하게 분산시켜서 처리 속도 향상과 시스템 안정성 확보.
멀티 프로그래밍과 멀티 태스킹의 차이
💡 멀티프로그래밍 (Multiprogramming)
정의: 하나의 CPU가 여러 프로그램을 번갈아가며 실행하는 방식
목적: CPU의 유휴 시간(Memory I/O 등)을 줄이기 위해 CPU를 최대한 활용하는 것
방식: CPU가 한 프로그램을 실행하다가 I/O 작업 등으로 대기 상태가 되면,
다른 프로그램으로 전환해서 실행함
예시:
A 프로그램이 디스크에서 데이터를 읽는 동안, B 프로그램이 CPU를 사용해서 계산함
특징:
병렬 처리 아님! 실제로는 CPU가 한 번에 하나의 작업만 수행
사용자 입장에서 동시에 여러 작업이 돌아가는 것처럼 보임
💡 멀티태스킹 (Multitasking)
정의: 사용자가 동시에 여러 작업을 처리할 수 있게 해주는 기능
목적: 사용자 경험 향상 (여러 앱을 동시에 실행 가능하게 함)
방식:
CPU 시간을 쪼개서 각 작업(프로세스나 스레드)에 아주 짧은 시간씩 번갈아 배분 (타임 슬라이싱)
현대 OS는 이걸 매우 빠르게 반복해서, 사용자에겐 동시에 동작하는 것처럼 보임
예시:
음악을 들으면서 웹 서핑을 하면서 파일 다운로드도 진행 중인 상황
특징:
멀티프로그래밍보다 좀 더 사용자 중심이고 실시간 반응을 중요시함
멀티프로그래밍이 기술적 자원 관리 중심이라면, 멀티태스킹은 사용자 경험 중심
끝!
'개발 > ETC' 카테고리의 다른 글
이진 트리 공부 (73) | 2025.04.30 |
---|---|
페이지 교체 알고리즘 공부 (189) | 2025.04.28 |
무중단 배포 알아보기 (90) | 2025.03.25 |
CORS 알아보기 (59) | 2025.01.10 |
git 브랜치 생성, 전환하기 (40) | 2025.01.08 |