Mission: Redux와 스케쥴링, 캐시히트, 캐시미스 질문 정리
📌 문제
1. Redux가 무엇이고, 왜 사용할까?
Redux란
Redux는 JavaScript 애플리케이션의 상태(state) 관리를 돕는 라이브러리이다. 애플리케이션의 데이터를 중앙 집중식으로 관리하고, 컴포넌트 간의 상태 공유와 업데이트를 효율적으로 관리할 수 있게 도와준다. 이를 통해 복잡한 애플리케이션에서도 상태 변화를 예측 가능한 방식으로 관리할 수 있다.
Redux 사용이유
중앙화된 상태 관리: Redux는 모든 상태를 단일 스토어(store)에 저장하고 관리한. 이로써 상태가 어디서든 일관성 있게 업데이트되며, 데이터의 흐름을 예측 가능하게 만든다.
데이터 공유: 여러 컴포넌트 간에 데이터를 쉽게 공유하고 전달할 수 있다. 부모-자식 관계가 아니더라도 데이터 접근이 용이하다.
디버깅과 추적: Redux의 개발자 도구를 사용하면 상태 변화를 디버깅하고 추적하는 것이 편리하다. 시간여행(debugging with time-travel)을 통해 과거의 상태로 되돌아가면서 문제를 찾을 수 있다.
확장성: Redux는 중앙 집중식 상태 관리 패턴을 따르기 때문에 애플리케이션 규모가 커져도 코드 구조를 유지하고 확장하기 용이하다.
테스트 용이성: 액션과 리듀서라는 단위로 코드를 작성하므로 단위 테스트를 작성하기 쉽다다. 각 부분이 독립적으로 테스트 가능하다.
2. 선점 스케쥴링과 비선점 스케쥴링의 개념을 설명해보자
선점 스케쥴링은 OS가 나서서 CPU사용권을 '선점'하고, 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 방식이다.
비선점 스케쥴링은 어떤 프로세스가 CPU를 할당받으면 그 프로세스가 종료되거나, 입출력 요구가 발생하여 자발적으로 중지될 때 까지 계속 실행되도록 보장하는 방법이다.
2-1. 스케쥴링의 동작 시점은?
스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일때 CPU를 사용하게 된다.
1. 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
2. 수행 -> 종료 (Running -> Terminate) : 프로세스를 종료시켯을때
3. 수행 -> 준비 (Running-> Ready) : 인터럽트가 발생했을때
4. 대기 -> 준비 (Waiting -> Ready) : I/O가 완료되었을때
2-2. 캐시히트와 캐시미스의 개념과 특징 대해서 설명해보자
- 캐시히트는 캐시에 원하는 데이터를 찾는 것이다. 위치도 가깝고 CPU 내부버스를 기반으로 작동하여 빠르다. 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다.
- 캐시미스는 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것으로 메모리를 가져올때 시스템 버스를 기반으로 작동하기 때문에 느리다.