프로세스와 스레드의 동작 방식을 실습하고 탐구하는 Java 기반 학습 프로젝트
본 프로젝트는 운영체제의 핵심 개념인 프로세스와 스레드를 Java 환경에서 실제로 구현하고 실험해보는 것을 목표로 합니다. 이론적 개념을 코드로 구현하여 프로세스와 스레드의 생명주기, 상태 전이, 동기화, 스케줄링 등을 직접 관찰하고 분석할 수 있습니다.
- JVM 프로세스의 생성과 종료
- 프로세스 간 통신 (IPC) 메커니즘 구현
- 프로세스 격리와 독립성 확인
- 프로세스 모니터링 및 리소스 사용량 측정
- 스레드 생명주기 및 상태 전이 관찰
- 스레드 풀과 스케줄링 메커니즘 구현
- 동기화 기법 (mutex, semaphore, monitor) 실습
- 데드락과 경쟁 조건 시뮬레이션
- 프로세스 vs 스레드 성능 비교
- 컨텍스트 스위칭 오버헤드 측정
- 메모리 사용량 및 리소스 효율성 분석
- 동시성과 병렬성 차이 실증
- Language: Java 21 (LTS)
- Build Tool: Gradle 8.5
- Testing: JUnit 5, AssertJ
- Monitoring: JMX, MXBean, JFR (Java Flight Recorder)
- Visualization: JFreeChart (선택사항)
- Benchmarking: JMH (Java Microbenchmark Harness)
process_thread/
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── study/
│ │ │ ├── process/
│ │ │ │ ├── creation/
│ │ │ │ │ ├── ProcessCreator.java # ProcessBuilder를 사용한 프로세스 생성
│ │ │ │ │ ├── ProcessFactory.java # 다양한 타입의 프로세스 생성 팩토리
│ │ │ │ │ ├── ChildProcess.java # 자식 프로세스로 실행될 메인 클래스
│ │ │ │ │ └── ProcessSpawner.java # 병렬 프로세스 생성 및 관리
│ │ │ │ ├── communication/
│ │ │ │ │ ├── SocketIPC.java # 소켓 기반 IPC 구현
│ │ │ │ │ ├── PipeIPC.java # 파이프 기반 IPC 구현
│ │ │ │ │ ├── SharedMemoryIPC.java # 메모리 맵 파일을 통한 IPC
│ │ │ │ │ ├── MessageQueue.java # 메시지 큐 시뮬레이션
│ │ │ │ │ └── IPCBenchmark.java # IPC 성능 측정
│ │ │ │ ├── monitoring/
│ │ │ │ │ ├── ProcessMonitor.java # 프로세스 상태 모니터링
│ │ │ │ │ ├── ProcessResourceTracker.java # CPU, 메모리 사용량 추적
│ │ │ │ │ ├── ProcessLifecycleTracker.java # 프로세스 생명주기 추적
│ │ │ │ │ └── ProcessMetrics.java # 프로세스 메트릭 수집 및 분석
│ │ │ │ └── management/
│ │ │ │ ├── ProcessManager.java # 프로세스 생성/종료 관리
│ │ │ │ ├── ProcessPool.java # 프로세스 풀 구현
│ │ │ │ ├── ProcessSchedulerSimulator.java # 프로세스 스케줄링 시뮬레이션
│ │ │ │ └── ProcessOrchestrator.java # 복잡한 프로세스 워크플로우 관리
│ │ │ ├── thread/
│ │ │ │ ├── lifecycle/
│ │ │ │ │ ├── ThreadStateDemo.java # 스레드 상태 전이 데모
│ │ │ │ │ ├── ThreadLifecycleObserver.java # 스레드 생명주기 관찰
│ │ │ │ │ ├── PlatformThreadDemo.java # Platform Thread 실습
│ │ │ │ │ ├── VirtualThreadDemo.java # Virtual Thread 실습
│ │ │ │ │ └── ThreadCreationComparison.java # 스레드 생성 방식 비교
│ │ │ │ ├── synchronization/
│ │ │ │ │ ├── MutexDemo.java # Mutex(상호배제) 구현
│ │ │ │ │ ├── SemaphoreDemo.java # Semaphore 구현 및 실습
│ │ │ │ │ ├── MonitorDemo.java # Monitor 패턴 구현
│ │ │ │ │ ├── ReentrantLockDemo.java # ReentrantLock 실습
│ │ │ │ │ ├── ReadWriteLockDemo.java # ReadWriteLock 실습
│ │ │ │ │ ├── StampedLockDemo.java # StampedLock 실습
│ │ │ │ │ ├── ProducerConsumer.java # 생산자-소비자 문제
│ │ │ │ │ ├── DiningPhilosophers.java # 철학자들의 만찬 문제
│ │ │ │ │ ├── DeadlockSimulator.java # 데드락 시뮬레이션
│ │ │ │ │ └── DeadlockDetector.java # 데드락 탐지 및 해결
│ │ │ │ ├── pool/
│ │ │ │ │ ├── CustomThreadPool.java # 커스텀 스레드 풀 구현
│ │ │ │ │ ├── FixedThreadPoolDemo.java # FixedThreadPool 실습
│ │ │ │ │ ├── CachedThreadPoolDemo.java # CachedThreadPool 실습
│ │ │ │ │ ├── ScheduledThreadPoolDemo.java # ScheduledThreadPool 실습
│ │ │ │ │ ├── WorkStealingPoolDemo.java # Work-Stealing Pool 실습
│ │ │ │ │ ├── VirtualThreadExecutor.java # Virtual Thread 전용 Executor
│ │ │ │ │ └── ThreadPoolMonitor.java # 스레드 풀 모니터링
│ │ │ │ ├── scheduling/
│ │ │ │ │ ├── FCFSScheduler.java # First-Come First-Served 구현
│ │ │ │ │ ├── SJFScheduler.java # Shortest Job First 구현
│ │ │ │ │ ├── RoundRobinScheduler.java # Round Robin 구현
│ │ │ │ │ ├── PriorityScheduler.java # Priority 스케줄링 구현
│ │ │ │ │ ├── MLFQScheduler.java # Multi-Level Feedback Queue 구현
│ │ │ │ │ └── SchedulerComparison.java # 스케줄러 성능 비교
│ │ │ │ └── structured/
│ │ │ │ ├── StructuredTaskScope.java # Java 21 Structured Concurrency
│ │ │ │ ├── ScopedValueDemo.java # Scoped Values 실습
│ │ │ │ └── StructuredPatterns.java # 구조화된 동시성 패턴
│ │ │ ├── comparison/
│ │ │ │ ├── performance/
│ │ │ │ │ ├── CreationBenchmark.java # 생성 시간 벤치마크
│ │ │ │ │ ├── ContextSwitchBenchmark.java # 컨텍스트 스위칭 벤치마크
│ │ │ │ │ ├── IOBenchmark.java # I/O 작업 벤치마크
│ │ │ │ │ ├── CPUBenchmark.java # CPU 집약 작업 벤치마크
│ │ │ │ │ ├── ScalabilityTest.java # 확장성 테스트
│ │ │ │ │ └── ThroughputAnalyzer.java # 처리량 분석
│ │ │ │ ├── resource/
│ │ │ │ │ ├── MemoryUsageAnalyzer.java # 메모리 사용량 분석
│ │ │ │ │ ├── CPUUsageAnalyzer.java # CPU 사용률 분석
│ │ │ │ │ ├── ResourceProfiler.java # 리소스 프로파일링
│ │ │ │ │ └── ResourceComparison.java # 리소스 사용량 비교
│ │ │ │ └── concurrency/
│ │ │ │ ├── ConcurrentTaskExecutor.java # 동시 작업 실행 비교
│ │ │ │ ├── ParallelismAnalyzer.java # 병렬성 분석
│ │ │ │ ├── RaceConditionDetector.java # 경쟁 조건 탐지
│ │ │ │ └── ConcurrencyPatterns.java # 동시성 패턴 비교
│ │ │ ├── common/
│ │ │ │ ├── util/
│ │ │ │ │ ├── SystemInfo.java # 시스템 정보 조회
│ │ │ │ │ ├── TimeUtils.java # 시간 측정 유틸리티
│ │ │ │ │ ├── RandomDataGenerator.java # 테스트 데이터 생성
│ │ │ │ │ ├── FileUtils.java # 파일 작업 유틸리티
│ │ │ │ │ └── ReportGenerator.java # 보고서 생성
│ │ │ │ └── monitor/
│ │ │ │ ├── BaseMonitor.java # 모니터링 기본 클래스
│ │ │ │ ├── MetricsCollector.java # 메트릭 수집기
│ │ │ │ ├── PerformanceMonitor.java # 성능 모니터
│ │ │ │ ├── JFRRecorder.java # Java Flight Recorder 래퍼
│ │ │ │ └── DashboardServer.java # 모니터링 대시보드 서버
│ │ │ ├── Main.java # 메인 애플리케이션 진입점
│ │ │ └── DemoRunner.java # 데모 실행 관리자
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── logback.xml
│ │ ├── benchmark.properties # 벤치마크 설정
│ │ └── demo-scripts/ # 데모 실행 스크립트
│ │ ├── process-demo.txt
│ │ └── thread-demo.txt
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── study/
│ │ ├── process/
│ │ │ ├── creation/
│ │ │ │ ├── ProcessCreatorTest.java # 프로세스 생성 테스트
│ │ │ │ ├── ProcessFactoryTest.java # 팩토리 패턴 테스트
│ │ │ │ └── ProcessSpawnerTest.java # 병렬 프로세스 생성 테스트
│ │ │ ├── communication/
│ │ │ │ ├── SocketIPCTest.java # 소켓 IPC 통신 테스트
│ │ │ │ ├── PipeIPCTest.java # 파이프 IPC 테스트
│ │ │ │ ├── SharedMemoryIPCTest.java # 공유 메모리 테스트
│ │ │ │ └── MessageQueueTest.java # 메시지 큐 테스트
│ │ │ ├── monitoring/
│ │ │ │ ├── ProcessMonitorTest.java # 프로세스 모니터링 테스트
│ │ │ │ └── ProcessResourceTrackerTest.java # 리소스 추적 테스트
│ │ │ └── management/
│ │ │ ├── ProcessManagerTest.java # 프로세스 관리 테스트
│ │ │ └── ProcessPoolTest.java # 프로세스 풀 테스트
│ │ ├── thread/
│ │ │ ├── lifecycle/
│ │ │ │ ├── ThreadStateDemoTest.java # 스레드 상태 테스트
│ │ │ │ ├── PlatformThreadTest.java # Platform Thread 테스트
│ │ │ │ └── VirtualThreadTest.java # Virtual Thread 테스트
│ │ │ ├── synchronization/
│ │ │ │ ├── MutexDemoTest.java # Mutex 동작 테스트
│ │ │ │ ├── SemaphoreDemoTest.java # Semaphore 테스트
│ │ │ │ ├── ProducerConsumerTest.java # 생산자-소비자 테스트
│ │ │ │ ├── DeadlockSimulatorTest.java # 데드락 발생 테스트
│ │ │ │ └── DeadlockDetectorTest.java # 데드락 탐지 테스트
│ │ │ ├── pool/
│ │ │ │ ├── CustomThreadPoolTest.java # 커스텀 풀 테스트
│ │ │ │ ├── ThreadPoolPerformanceTest.java # 스레드 풀 성능 테스트
│ │ │ │ └── VirtualThreadExecutorTest.java # Virtual Thread Executor 테스트
│ │ │ └── scheduling/
│ │ │ ├── FCFSSchedulerTest.java # FCFS 알고리즘 테스트
│ │ │ ├── SJFSchedulerTest.java # SJF 알고리즘 테스트
│ │ │ ├── RoundRobinSchedulerTest.java # Round Robin 테스트
│ │ │ └── SchedulerComparisonTest.java # 스케줄러 비교 테스트
│ │ └── comparison/
│ │ ├── performance/
│ │ │ ├── CreationBenchmarkTest.java # 생성 벤치마크 검증
│ │ │ └── ScalabilityTestTest.java # 확장성 테스트 검증
│ │ ├── resource/
│ │ │ └── ResourceAnalyzerTest.java # 리소스 분석기 테스트
│ │ └── concurrency/
│ │ └── RaceConditionDetectorTest.java # 경쟁 조건 탐지 테스트
│ └── resources/
│ ├── test-application.properties # 테스트 설정
│ └── test-data/ # 테스트 데이터
│ ├── process-test-data.json
│ └── thread-test-data.json
├── docs/
│ ├── architecture/
│ │ ├── system-design.md # 시스템 설계 문서
│ │ ├── class-diagrams.puml # UML 클래스 다이어그램
│ │ └── sequence-diagrams.puml # UML 시퀀스 다이어그램
│ ├── experiments/
│ │ ├── experiment-01-process-isolation.md # 프로세스 격리 실험
│ │ ├── experiment-02-thread-sharing.md # 스레드 메모리 공유 실험
│ │ ├── experiment-03-virtual-thread-scale.md # Virtual Thread 확장성 실험
│ │ ├── experiment-04-deadlock-scenarios.md # 데드락 시나리오 실험
│ │ └── experiment-05-performance-comparison.md # 성능 비교 실험
│ └── results/
│ ├── benchmark-results.md # 벤치마크 결과
│ ├── performance-analysis.md # 성능 분석 보고서
│ └── charts/ # 결과 차트
│ ├── creation-time-comparison.png
│ ├── memory-usage-comparison.png
│ └── throughput-analysis.png
├── scripts/
│ ├── run-process-demo.sh # 프로세스 데모 실행
│ ├── run-thread-demo.sh # 스레드 데모 실행
│ ├── run-virtual-thread-demo.sh # Virtual Thread 데모 실행
│ ├── run-all-benchmarks.sh # 모든 벤치마크 실행
│ ├── generate-report.sh # 보고서 생성
│ └── setup-environment.sh # 환경 설정
├── logs/ # 로그 디렉토리
├── build.gradle
├── settings.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── README.md
└── LICENSEprocess_thread/
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── study/
│ │ │ ├── process/
│ │ │ │ ├── creation/
│ │ │ │ │ ├── ProcessCreator.java # ProcessBuilder를 사용한 프로세스 생성
│ │ │ │ │ ├── ProcessFactory.java # 다양한 타입의 프로세스 생성 팩토리
│ │ │ │ │ ├── ChildProcess.java # 자식 프로세스로 실행될 메인 클래스
│ │ │ │ │ └── ProcessSpawner.java # 병렬 프로세스 생성 및 관리
│ │ │ │ ├── communication/
│ │ │ │ │ ├── SocketIPC.java # 소켓 기반 IPC 구현
│ │ │ │ │ ├── PipeIPC.java # 파이프 기반 IPC 구현
│ │ │ │ │ ├── SharedMemoryIPC.java # 메모리 맵 파일을 통한 IPC
│ │ │ │ │ ├── MessageQueue.java # 메시지 큐 시뮬레이션
│ │ │ │ │ └── IPCBenchmark.java # IPC 성능 측정
│ │ │ │ ├── monitoring/
│ │ │ │ │ ├── ProcessMonitor.java # 프로세스 상태 모니터링
│ │ │ │ │ ├── ProcessResourceTracker.java # CPU, 메모리 사용량 추적
│ │ │ │ │ ├── ProcessLifecycleTracker.java # 프로세스 생명주기 추적
│ │ │ │ │ └── ProcessMetrics.java # 프로세스 메트릭 수집 및 분석
│ │ │ │ └── management/
│ │ │ │ ├── ProcessManager.java # 프로세스 생성/종료 관리
│ │ │ │ ├── ProcessPool.java # 프로세스 풀 구현
│ │ │ │ ├── ProcessSchedulerSimulator.java # 프로세스 스케줄링 시뮬레이션
│ │ │ │ └── ProcessOrchestrator.java # 복잡한 프로세스 워크플로우 관리
│ │ │ ├── thread/
│ │ │ │ ├── lifecycle/
│ │ │ │ │ ├── ThreadStateDemo.java # 스레드 상태 전이 데모
│ │ │ │ │ ├── ThreadLifecycleObserver.java # 스레드 생명주기 관찰
│ │ │ │ │ ├── PlatformThreadDemo.java # Platform Thread 실습
│ │ │ │ │ ├── VirtualThreadDemo.java # Virtual Thread 실습
│ │ │ │ │ └── ThreadCreationComparison.java # 스레드 생성 방식 비교
│ │ │ │ ├── synchronization/
│ │ │ │ │ ├── MutexDemo.java # Mutex(상호배제) 구현
│ │ │ │ │ ├── SemaphoreDemo.java # Semaphore 구현 및 실습
│ │ │ │ │ ├── MonitorDemo.java # Monitor 패턴 구현
│ │ │ │ │ ├── ReentrantLockDemo.java # ReentrantLock 실습
│ │ │ │ │ ├── ReadWriteLockDemo.java # ReadWriteLock 실습
│ │ │ │ │ ├── StampedLockDemo.java # StampedLock 실습
│ │ │ │ │ ├── ProducerConsumer.java # 생산자-소비자 문제
│ │ │ │ │ ├── DiningPhilosophers.java # 철학자들의 만찬 문제
│ │ │ │ │ ├── DeadlockSimulator.java # 데드락 시뮬레이션
│ │ │ │ │ └── DeadlockDetector.java # 데드락 탐지 및 해결
│ │ │ │ ├── pool/
│ │ │ │ │ ├── CustomThreadPool.java # 커스텀 스레드 풀 구현
│ │ │ │ │ ├── FixedThreadPoolDemo.java # FixedThreadPool 실습
│ │ │ │ │ ├── CachedThreadPoolDemo.java # CachedThreadPool 실습
│ │ │ │ │ ├── ScheduledThreadPoolDemo.java # ScheduledThreadPool 실습
│ │ │ │ │ ├── WorkStealingPoolDemo.java # Work-Stealing Pool 실습
│ │ │ │ │ ├── VirtualThreadExecutor.java # Virtual Thread 전용 Executor
│ │ │ │ │ └── ThreadPoolMonitor.java # 스레드 풀 모니터링
│ │ │ │ ├── scheduling/
│ │ │ │ │ ├── FCFSScheduler.java # First-Come First-Served 구현
│ │ │ │ │ ├── SJFScheduler.java # Shortest Job First 구현
│ │ │ │ │ ├── RoundRobinScheduler.java # Round Robin 구현
│ │ │ │ │ ├── PriorityScheduler.java # Priority 스케줄링 구현
│ │ │ │ │ ├── MLFQScheduler.java # Multi-Level Feedback Queue 구현
│ │ │ │ │ └── SchedulerComparison.java # 스케줄러 성능 비교
│ │ │ │ └── structured/
│ │ │ │ ├── StructuredTaskScope.java # Java 21 Structured Concurrency
│ │ │ │ ├── ScopedValueDemo.java # Scoped Values 실습
│ │ │ │ └── StructuredPatterns.java # 구조화된 동시성 패턴
│ │ │ ├── comparison/
│ │ │ │ ├── performance/
│ │ │ │ │ ├── CreationBenchmark.java # 생성 시간 벤치마크
│ │ │ │ │ ├── ContextSwitchBenchmark.java # 컨텍스트 스위칭 벤치마크
│ │ │ │ │ ├── IOBenchmark.java # I/O 작업 벤치마크
│ │ │ │ │ ├── CPUBenchmark.java # CPU 집약 작업 벤치마크
│ │ │ │ │ ├── ScalabilityTest.java # 확장성 테스트
│ │ │ │ │ └── ThroughputAnalyzer.java # 처리량 분석
│ │ │ │ ├── resource/
│ │ │ │ │ ├── MemoryUsageAnalyzer.java # 메모리 사용량 분석
│ │ │ │ │ ├── CPUUsageAnalyzer.java # CPU 사용률 분석
│ │ │ │ │ ├── ResourceProfiler.java # 리소스 프로파일링
│ │ │ │ │ └── ResourceComparison.java # 리소스 사용량 비교
│ │ │ │ └── concurrency/
│ │ │ │ ├── ConcurrentTaskExecutor.java # 동시 작업 실행 비교
│ │ │ │ ├── ParallelismAnalyzer.java # 병렬성 분석
│ │ │ │ ├── RaceConditionDetector.java # 경쟁 조건 탐지
│ │ │ │ └── ConcurrencyPatterns.java # 동시성 패턴 비교
│ │ │ ├── common/
│ │ │ │ ├── util/
│ │ │ │ │ ├── SystemInfo.java # 시스템 정보 조회
│ │ │ │ │ ├── TimeUtils.java # 시간 측정 유틸리티
│ │ │ │ │ ├── RandomDataGenerator.java # 테스트 데이터 생성
│ │ │ │ │ ├── FileUtils.java # 파일 작업 유틸리티
│ │ │ │ │ └── ReportGenerator.java # 보고서 생성
│ │ │ │ └── monitor/
│ │ │ │ ├── BaseMonitor.java # 모니터링 기본 클래스
│ │ │ │ ├── MetricsCollector.java # 메트릭 수집기
│ │ │ │ ├── PerformanceMonitor.java # 성능 모니터
│ │ │ │ ├── JFRRecorder.java # Java Flight Recorder 래퍼
│ │ │ │ └── DashboardServer.java # 모니터링 대시보드 서버
│ │ │ ├── Main.java # 메인 애플리케이션 진입점
│ │ │ └── DemoRunner.java # 데모 실행 관리자
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── logback.xml
│ │ ├── benchmark.properties # 벤치마크 설정
│ │ └── demo-scripts/ # 데모 실행 스크립트
│ │ ├── process-demo.txt
│ │ └── thread-demo.txt
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── study/
│ │ ├── process/
│ │ │ ├── creation/
│ │ │ │ ├── ProcessCreatorTest.java # 프로세스 생성 테스트
│ │ │ │ ├── ProcessFactoryTest.java # 팩토리 패턴 테스트
│ │ │ │ └── ProcessSpawnerTest.java # 병렬 프로세스 생성 테스트
│ │ │ ├── communication/
│ │ │ │ ├── SocketIPCTest.java # 소켓 IPC 통신 테스트
│ │ │ │ ├── PipeIPCTest.java # 파이프 IPC 테스트
│ │ │ │ ├── SharedMemoryIPCTest.java # 공유 메모리 테스트
│ │ │ │ └── MessageQueueTest.java # 메시지 큐 테스트
│ │ │ ├── monitoring/
│ │ │ │ ├── ProcessMonitorTest.java # 프로세스 모니터링 테스트
│ │ │ │ └── ProcessResourceTrackerTest.java # 리소스 추적 테스트
│ │ │ └── management/
│ │ │ ├── ProcessManagerTest.java # 프로세스 관리 테스트
│ │ │ └── ProcessPoolTest.java # 프로세스 풀 테스트
│ │ ├── thread/
│ │ │ ├── lifecycle/
│ │ │ │ ├── ThreadStateDemoTest.java # 스레드 상태 테스트
│ │ │ │ ├── PlatformThreadTest.java # Platform Thread 테스트
│ │ │ │ └── VirtualThreadTest.java # Virtual Thread 테스트
│ │ │ ├── synchronization/
│ │ │ │ ├── MutexDemoTest.java # Mutex 동작 테스트
│ │ │ │ ├── SemaphoreDemoTest.java # Semaphore 테스트
│ │ │ │ ├── ProducerConsumerTest.java # 생산자-소비자 테스트
│ │ │ │ ├── DeadlockSimulatorTest.java # 데드락 발생 테스트
│ │ │ │ └── DeadlockDetectorTest.java # 데드락 탐지 테스트
│ │ │ ├── pool/
│ │ │ │ ├── CustomThreadPoolTest.java # 커스텀 풀 테스트
│ │ │ │ ├── ThreadPoolPerformanceTest.java # 스레드 풀 성능 테스트
│ │ │ │ └── VirtualThreadExecutorTest.java # Virtual Thread Executor 테스트
│ │ │ └── scheduling/
│ │ │ ├── FCFSSchedulerTest.java # FCFS 알고리즘 테스트
│ │ │ ├── SJFSchedulerTest.java # SJF 알고리즘 테스트
│ │ │ ├── RoundRobinSchedulerTest.java # Round Robin 테스트
│ │ │ └── SchedulerComparisonTest.java # 스케줄러 비교 테스트
│ │ └── comparison/
│ │ ├── performance/
│ │ │ ├── CreationBenchmarkTest.java # 생성 벤치마크 검증
│ │ │ └── ScalabilityTestTest.java # 확장성 테스트 검증
│ │ ├── resource/
│ │ │ └── ResourceAnalyzerTest.java # 리소스 분석기 테스트
│ │ └── concurrency/
│ │ └── RaceConditionDetectorTest.java # 경쟁 조건 탐지 테스트
│ └── resources/
│ ├── test-application.properties # 테스트 설정
│ └── test-data/ # 테스트 데이터
│ ├── process-test-data.json
│ └── thread-test-data.json
├── docs/
│ ├── architecture/
│ │ ├── system-design.md # 시스템 설계 문서
│ │ ├── class-diagrams.puml # UML 클래스 다이어그램
│ │ └── sequence-diagrams.puml # UML 시퀀스 다이어그램
│ ├── experiments/
│ │ ├── experiment-01-process-isolation.md # 프로세스 격리 실험
│ │ ├── experiment-02-thread-sharing.md # 스레드 메모리 공유 실험
│ │ ├── experiment-03-virtual-thread-scale.md # Virtual Thread 확장성 실험
│ │ ├── experiment-04-deadlock-scenarios.md # 데드락 시나리오 실험
│ │ └── experiment-05-performance-comparison.md # 성능 비교 실험
│ └── results/
│ ├── benchmark-results.md # 벤치마크 결과
│ ├── performance-analysis.md # 성능 분석 보고서
│ └── charts/ # 결과 차트
│ ├── creation-time-comparison.png
│ ├── memory-usage-comparison.png
│ └── throughput-analysis.png
├── scripts/
│ ├── run-process-demo.sh # 프로세스 데모 실행
│ ├── run-thread-demo.sh # 스레드 데모 실행
│ ├── run-virtual-thread-demo.sh # Virtual Thread 데모 실행
│ ├── run-all-benchmarks.sh # 모든 벤치마크 실행
│ ├── generate-report.sh # 보고서 생성
│ └── setup-environment.sh # 환경 설정
├── logs/ # 로그 디렉토리
├── build.gradle
├── settings.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── README.md
└── LICENSE
프로세스의 생성, 관리, 통신을 담당하는 모듈
ProcessCreator: ProcessBuilder를 사용한 프로세스 생성ProcessCommunicator: Socket, Pipe, SharedMemory를 통한 IPCProcessMonitor: 프로세스 상태 및 리소스 모니터링ProcessScheduler: 프로세스 스케줄링 시뮬레이션
Process 모듈 파일 설명 creation/ 디렉토리
ProcessCreator.java: ProcessBuilder API를 활용한 기본 프로세스 생성 클래스 ProcessFactory.java: 다양한 유형의 프로세스를 생성하는 팩토리 패턴 구현 ChildProcess.java: 자식 프로세스로 실행될 독립적인 Java 애플리케이션 ProcessSpawner.java: 여러 프로세스를 동시에 생성하고 관리하는 클래스
communication/ 디렉토리
SocketIPC.java: TCP/UDP 소켓을 사용한 프로세스 간 통신 구현 PipeIPC.java: Named Pipe를 사용한 단방향/양방향 통신 구현 SharedMemoryIPC.java: MappedByteBuffer를 사용한 공유 메모리 통신 MessageQueue.java: 메시지 큐 패턴을 시뮬레이션한 IPC IPCBenchmark.java: 각 IPC 방식의 성능을 측정하고 비교
monitoring/ 디렉토리
ProcessMonitor.java: 프로세스의 실행 상태, PID, 생존 여부 모니터링 ProcessResourceTracker.java: CPU, 메모리, I/O 사용량 실시간 추적 ProcessLifecycleTracker.java: 프로세스의 생성부터 종료까지 생명주기 추적 ProcessMetrics.java: 수집된 메트릭을 분석하고 리포트 생성
management/ 디렉토리
ProcessManager.java: 프로세스의 생성, 종료, 재시작 등 전체 생명주기 관리 ProcessPool.java: 재사용 가능한 프로세스 풀 구현 ProcessSchedulerSimulator.java: FCFS, SJF 등 프로세스 스케줄링 알고리즘 시뮬레이션 ProcessOrchestrator.java: 복잡한 프로세스 의존성 및 워크플로우 관리
스레드의 생명주기와 동기화를 다루는 모듈 (Platform Thread + Virtual Thread)
ThreadLifecycle: 스레드 상태 전이 실습VirtualThreadDemo: Java 21 Virtual Thread 실습ThreadSynchronizer: synchronized, Lock, Semaphore 구현ThreadPoolManager: ExecutorService 기반 스레드 풀StructuredConcurrency: Java 21 Structured Concurrency 실습DeadlockSimulator: 교착상태 재현 및 해결
Thread 모듈 파일 설명 lifecycle/ 디렉토리
ThreadStateDemo.java: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED 상태 전이 실습 ThreadLifecycleObserver.java: 스레드 상태 변화를 실시간으로 관찰하고 기록 PlatformThreadDemo.java: 전통적인 OS 스레드 생성 및 관리 VirtualThreadDemo.java: Java 21 Virtual Thread 생성 및 특성 실습 ThreadCreationComparison.java: 다양한 스레드 생성 방식의 성능 비교
synchronization/ 디렉토리
MutexDemo.java: synchronized 키워드와 Lock 인터페이스를 사용한 상호배제 SemaphoreDemo.java: 카운팅 세마포어를 사용한 동시 접근 제어 MonitorDemo.java: wait/notify를 사용한 모니터 패턴 구현 ReentrantLockDemo.java: 재진입 가능 락과 조건 변수 사용 ReadWriteLockDemo.java: 읽기/쓰기 락을 사용한 동시성 향상 StampedLockDemo.java: 낙관적 읽기를 지원하는 StampedLock 사용 ProducerConsumer.java: BlockingQueue를 사용한 생산자-소비자 패턴 DiningPhilosophers.java: 철학자들의 만찬 문제로 데드락 이해 DeadlockSimulator.java: 의도적인 데드락 생성 및 분석 DeadlockDetector.java: ThreadMXBean을 사용한 데드락 탐지 및 해결
pool/ 디렉토리
CustomThreadPool.java: BlockingQueue를 사용한 커스텀 스레드 풀 구현 FixedThreadPoolDemo.java: 고정 크기 스레드 풀의 특성 실습 CachedThreadPoolDemo.java: 동적으로 크기가 변하는 스레드 풀 실습 ScheduledThreadPoolDemo.java: 주기적 작업 실행을 위한 스케줄드 풀 WorkStealingPoolDemo.java: ForkJoinPool 기반 work-stealing 실습 VirtualThreadExecutor.java: Virtual Thread를 위한 커스텀 Executor ThreadPoolMonitor.java: 스레드 풀의 상태와 성능 실시간 모니터링
프로세스, Platform Thread, Virtual Thread의 성능 및 특성을 비교하는 모듈
PerformanceBenchmark: JMH를 활용한 성능 측정VirtualThreadBenchmark: Platform Thread vs Virtual Thread 비교ResourceAnalyzer: 메모리, CPU 사용량 분석ContextSwitchMeasurer: 컨텍스트 스위칭 오버헤드 측정
scheduling/ 디렉토리
FCFSScheduler.java: First-Come First-Served 스케줄링 구현 SJFScheduler.java: Shortest Job First 스케줄링 구현 RoundRobinScheduler.java: 타임 슬라이스 기반 라운드 로빈 구현 PriorityScheduler.java: 우선순위 기반 스케줄링 구현 MLFQScheduler.java: Multi-Level Feedback Queue 구현 SchedulerComparison.java: 각 스케줄링 알고리즘의 성능 비교
structured/ 디렉토리
StructuredTaskScope.java: Java 21 Structured Concurrency API 실습 ScopedValueDemo.java: 스레드 로컬의 대안인 Scoped Values 사용 StructuredPatterns.java: 구조화된 동시성 디자인 패턴
Comparison 모듈 파일 설명 performance/ 디렉토리
CreationBenchmark.java: 프로세스, Platform Thread, Virtual Thread 생성 시간 측정 ContextSwitchBenchmark.java: 컨텍스트 스위칭 오버헤드 측정 IOBenchmark.java: I/O 집약적 작업에서의 성능 비교 CPUBenchmark.java: CPU 집약적 작업에서의 성능 비교 ScalabilityTest.java: 부하 증가에 따른 확장성 테스트 ThroughputAnalyzer.java: 단위 시간당 처리량 분석
resource/ 디렉토리
MemoryUsageAnalyzer.java: 힙, 비힙, 네이티브 메모리 사용량 분석 CPUUsageAnalyzer.java: CPU 사용률 및 코어별 활용도 분석 ResourceProfiler.java: JFR을 사용한 상세 리소스 프로파일링 ResourceComparison.java: 리소스 사용량 종합 비교 분석
concurrency/ 디렉토리
ConcurrentTaskExecutor.java: 동시 작업 실행 성능 비교 ParallelismAnalyzer.java: 실제 병렬 실행 정도 분석 RaceConditionDetector.java: 경쟁 조건 발생 감지 및 분석 ConcurrencyPatterns.java: 다양한 동시성 패턴 성능 비교
Common 모듈 파일 설명 util/ 디렉토리
SystemInfo.java: OS, JVM, 하드웨어 정보 조회 TimeUtils.java: 나노초 단위 정밀 시간 측정 RandomDataGenerator.java: 테스트용 랜덤 데이터 생성 FileUtils.java: 파일 읽기/쓰기 유틸리티 ReportGenerator.java: HTML/Markdown 형식 보고서 생성
monitor/ 디렉토리
BaseMonitor.java: 모든 모니터의 기본 추상 클래스 MetricsCollector.java: 다양한 메트릭 수집 및 집계 PerformanceMonitor.java: 성능 지표 실시간 모니터링 JFRRecorder.java: Java Flight Recorder 래퍼 클래스 DashboardServer.java: 웹 기반 모니터링 대시보드 서버
- JDK 21 이상 (LTS)
- Gradle 8.5 이상 (또는 gradlew 사용)
java --version
# openjdk 21 2023-09-19 LTS 출력 확인./gradlew clean build./gradlew test./gradlew run# 프로세스 데모
./gradlew run --args="process"
# Platform Thread 데모
./gradlew run --args="platform-thread"
# Virtual Thread 데모
./gradlew run --args="virtual-thread"
# 비교 분석
./gradlew run --args="compare"여러 JVM 프로세스를 생성하고 각각의 메모리 공간이 격리되어 있음을 확인
같은 프로세스 내 Platform Thread들이 메모리를 공유하는 것을 실습
100만 개의 Virtual Thread 생성 및 실행 (Platform Thread로는 불가능한 규모)
Java 21의 구조화된 동시성을 활용한 작업 관리
Platform Thread와 Virtual Thread 각각으로 구현 및 비교
FCFS, SJF, Round Robin 등 스케줄링 알고리즘 구현 및 비교
- 프로세스 생성 vs Platform Thread 생성 vs Virtual Thread 생성
- I/O 집약적 작업에서의 성능 비교
- CPU 집약적 작업에서의 성능 비교
- 프로세스/스레드 생성 시간
- 컨텍스트 스위칭 시간
- 메모리 사용량 (Heap, Non-Heap, Native)
- CPU 사용률
- 처리량 (Throughput)
- 응답 시간 (Response Time)
각 실습 후 다음 내용을 포함한 보고서 작성:
- 실험 목적 및 가설
- 실험 방법 및 환경
- 측정 결과 및 그래프
- 결과 분석 및 인사이트
- 이론과 실제의 차이점
- 경량 스레드로 수백만 개 생성 가능
- I/O 집약적 작업에서 뛰어난 성능
- Platform Thread와의 성능 비교 실습
- 구조화된 방식으로 동시 작업 관리
- 작업 그룹의 생명주기 관리
- 에러 전파 및 취소 메커니즘
- switch 표현식과 패턴 매칭
- Record 패턴을 활용한 데이터 처리
- 더 간결한 코드 작성
- 순서가 있는 컬렉션 인터페이스
- 스레드 안전 컬렉션 활용
- Virtual Thread와 Platform Thread 혼합 사용 패턴
- Foreign Function & Memory API (Preview) 활용
- Vector API를 활용한 병렬 처리
- 분산 시스템 시뮬레이션
- 실시간 모니터링 대시보드 (JFR 활용)
- 다양한 IPC 메커니즘 구현
- 커스텀 스케줄러 구현
- 운영체제 이론
- JVM 내부 구조
- 동시성 프로그래밍
- 시스템 프로그래밍
- "Operating System Concepts" - Silberschatz, Galvin, Gagne
- "Java Concurrency in Practice" - Brian Goetz
- "Modern Operating Systems" - Andrew S. Tanenbaum
MIT License