본문 바로가기

기술지식6

[CS/운영체제] Race Condition, Semaphore & Mutex ✅  Race Condition공유 자원(Shared Resource)시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수경쟁 상태 (Race Condition)공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황 ⇒ 결과값에 영향임계 구역(Critical Section)각 프로세스에서 공유 데이터에 접근하는 코드 부분임계구역 문제 해결 원칙상호 배제(mutual exclusion): 한 프로세스가 임계구역에 진입했다면 다른 프로세스는 들어올 수 없다.진행(progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야한다.유한대기(bounded waiting): 한 프로세스가 임계.. 2025. 2. 26.
[CS/운영체제] Deadlock(데드락) 💡 정의두 개 이상의 프로세스가 무한정 자원을 기다리게 되는 상태💡 발생 조건⇒ 4가지 모두 만족해야함상호 배제 (Mutual exclusion): 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태점유와 대기**(Hold and wait)**: 자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다리는 상태비선점**(No preemption)**: 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못함원형 대기**(Circular wait)**: 프로세스들이 원형(순환) 형태로 자원을 대기하는 상태💡 해결 방법예방 : 발생 조건 중 하나 제거 ⇒ (-)자원 활용률 ⬇️상호 배제 X: 모든 자원을 공유 가능 하게점유와 대기 X: 특정 프로세스에 자원 모두 할당 or 아예 할당하지.. 2025. 2. 26.
[CS/운영체제]  CPU 스케줄링 💡 정의운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것CPU 이용률을 최대화하여 항상 실행 중인 프로세스를 가지게 한다.💡목표 (시스템에 따라)Batch System사용자와의 직접적인 상호작용 없이 작업을 일괄 처리하는 시스템유사한 작업들을 그룹화하여 한 번에 처리 ⇒ 대랑의 데이터 처리, 정기적인 작업에 사용목표: CPU 이용률 극대화, 처리량 극대화Interactive System (대화형 시스템)사용자와 컴퓨터 간 실시간 상호작용이 가능한 시스템사용자의 입력에 즉각적으로 응답ex. 개인용 컴퓨터의 운영체제(Windows, macOS)목표: 응답시간 최소화, 사용자 경험 향상Real-time System정해진 시간 제약 내에 작업을 완료해야하는 시스템주로 임베디드 시스템, .. 2025. 2. 26.
React Hooks Testing에 사용하는 함수들 *패키지 : @testing-library/react-hooks renderHook()커스텀 훅의 동작을 독립적으로 테스트하는 함수이다.renderHook() 함수에 커스텀 훅을 호출하는 코드를 콜백함수로 넘기면 result 속성을 담고 있는 객체를 반환한다. 이 result 객체는 current 속성을 갖는데, result.current를 통해 해당 훅의 반환값에 직접 접근할 수 있다.const { result } = renderHook(() => useCustomHook()); act() 함수와 함께 사용하여 비동기 작업을 테스트할 수 있다.act()act() 는 함수를 인자로 받는데, 이 함수를 실행시켜서 가상의 DOM에 적용하는 역할을 한다.이 함수는 상태를 변경한다. 따라서 act() 로 감싸주.. 2025. 2. 14.
TDD 방법론 🫧  TDD란 Test-Driven-Development로, '테스트 주도 개발'이라고 한다.1. 빨강 - 실패하는 테스트 코드를 작성한다.2. 초록 - 빨리 테스트가 통과하게끔, 실제 코드를 작성한다.3. 리팩토링 - 테스트의 빠른 통과를 위해 구현한 실제 코드를 리팩토링한다. (중복제거, 일반화 등) 빨강 단계 전까지 실제 코드를 작성하지 않아야하며, 이후 실패하는 테스트를 통과할 정도의 최소의 실제 코드를 작성해야한다.빨강 단계에서, 실패하는 이유를 보고(로그 분석) 다음 단계에 어떻게 진행할지 방향을 잡을 수 있다.  🫧 TDD를 하는 이유 보통의 개발 방식은 요구사항 ➡️ 분석 ➡️ 설계 ➡️ 개발 ➡️ 테스트 ➡️ 배포 형태의 개발 주기를 갖는다.하지만 이는 개발을 느리게 할 위험을 가진다.. 2024. 11. 7.
[Jest] 프레임워크 사용 방법 Jest 라이브러리 설치npm i -D jest test 스크립트 수정package.json 파일에서 test 스크립트를 jest로 수정해준다."scripts": { "test": "jest" }, 이제 Jest가 .test와 .spec이 포함된 파일을 탐지하여 실행한다. 기본 테스트 형태test("테스트 설명", () => { expect("검증 대상").toXxx("기대 결과");}); toXxx : Test MatchertoBe: 숫자나 문자와 같은, 객체가 아닌 기본형(primitive)값을 검증할 때toEqual: 객체 검증toBeTruthy: 검증 대상이 truthy (true로 간주되는 값. ex.1)이면 테스트 통과toBeFalsy: 검증 대상이 falsy (false로 간주되는 값.. 2024. 11. 4.