공부내용 공유하기(57)
-
프로세스 스케줄링(Process scheduling)
Scheduler? 기본적으로 모든 프로세스는 크게 두 가지 단계로 이루어져 있다. 하나는 CPU만 사용하는 CPU burst 단계, 다른 하나는 I/O(input/output) 작업만 하는 I/O burst 단계이다. 각 프로세스는 CPU에 할당되어 작업을 하게 되고, 해당 CPU의 자원을 점유하여 하고자 하는 동작을 실행한다. 문제는 I/O busrt 단계에서는 CPU가 놀게 된다는 점이다. CPU가 노는 시간을 줄이기 위해 고안된 방법이 바로 스케줄링, 이러한 동작을 하는 모듈을 스케줄러라고 한다. 목적 프로세스 스케줄링은 다음 두 가지 목적을 위해 존재한다. CPU의 성능을 높인다 프로그램의 성능을 높인다 CPU 입장에서의 성능이란? 다음과 같이 나타낼 수 있다. CPU 이용율: 전체 시간 중 쉬..
2023.06.11 -
[디자인 패턴] 커맨드 패턴, 팩토리 메서드 패턴, 상태 패턴
커맨드 패턴 세 줄 개념 실행 기능 단위로 캡슐화 함으로써 여러 기능을 실행할 수 있는 재사용성 높은 클래스 설계 기능 자체를 캡슐화 하기 때문에 Invoker와 Reciver간의 의존성 자체를 제거(기능 자체의 세부구현 변경이 Invoker와 Reciver의 수정 없이 이뤄질 수 있음) 기능 자체를 다루는 로직이 필요할 때 사용(되돌리기, 히스토리 기록 등) 유용한 사례 실행 취소가 가능한 명령들을 다양하게 다뤄야 하는 텍스트 에디터 보상 트랜잭션 공유 리소스를 바탕으로 병렬 처리를 원할 때(ex. 커맨드 단위로 멀티 스레드에서 동작) 느낀 점 처음에 커맨드 패턴을 코드상에서 봤을 때 마치 side effect를 적극적으로 사용하는 패턴으로 보였음 excute()의 반환 타입이 실질적인 응답 데이터를 ..
2023.05.28 -
[디자인 패턴] 싱글톤, 데코레이터
싱글톤 패턴 세 줄 개념 클래스의 인스턴스화를 단일 인스턴스로 제한하여 하나의 객체 사용을 강제하는 패턴 두 개 이상의 인스턴스화를 방지하는 게 핵심 구현 방법 메모리 사용에서의 이점 + 하나의 데이터 출처를 강제하는 용도로 사용 유용한 사례 Logger 많은 곳에서 사용되며 사이드 이펙트가 없고 인스턴스를 재활용했을 때의 효용이 높음 공유 리소스에 대한 동시 엑세스 제어 리소스에 대한 엑세스를 전역에서 요구 하나의 객체만 존재해야 하는 경우 위 세 개의 조건을 모두 만족하는 경우 고려해 볼 수 있음(무조건 사용해야 하는것이 아님) 문제점 싱글톤은 SRP를 위반한다 싱글톤 객체는 자기 자신의 인스턴스를 감시하는 책임 + 스스로의 구성정보를 제공하는 책임. 두 개의 책임을 가지고 있는 객체 메모리 관리에 ..
2023.05.28 -
1년간 React 테스트를 작성하며 겪은 이슈 10가지
테스트 환경은 다음과 같습니다. - jest (27.0.6 -> 28.1.3) - jsdom (16.6.0 -> 19.0.0) - @testing-library/react (12.0.0) - @testing-library/user-event (13.5.0) 1. JSDOM 환경에서 innerText 감지 불가 Select 컴포넌트를 확장한 DropdownSelect 컴포넌트의 테스트를 하던 중, 선택된 값을 감지할 수 없는 이슈가 발생했습니다. (Select 컴포넌트는 여러 옵션 중 하나를 선택할 수 있도록 해주는 UI 컴포넌트로, Renderer 컴포넌트를 동적으로 받아 다양한 요구사항에 대응할 수 있는 컴포넌트입니다) 문제가 발생한 테스트는 DropdownSelect에서 특정 값을 선택하는 과정이 포..
2023.01.22 -
컴포넌트에 대한 횡설수설
컴포넌트란 무엇일까? 컴포넌트의 사전적 의미는 다음과 같다 a part or element of a larger whole, especially a part of a machine or vehicle. constituting part of a larger whole; constituent. 즉, 컴포넌트란 전체의 일부가 되는 구성요소이자 부분집합이다. 그렇다면 컴포넌트가 모여서 이뤄지는 그 전체란 무엇일까? 컴포넌트로 이뤄지는 완성된 전체가 무엇이냐에 따라 컴포넌트가 무엇인지도 정의될 수 있다. 컴포넌트들이 모여 만들어지는 결과물을 Application으로 정의했다면, Application의 구성요소이자 부분집합으로써의 컴포넌트는 그 자체로 작은 Application의 역할을 하게 될 것이다. 작은 Ap..
2022.11.24 -
[React] 레이아웃 훅 수정이 결제버튼 테스트에 영향을 미치는 이유
얼마 전, 회사에서 흥미로운 디버깅 이슈가 있었다. 우리 팀에서는 프로젝트 내부에서 사용하기 위해 여러 커스텀 훅을 만들어 재사용하고 있는데, 그중 레이아웃을 감지해서 특정 로직을 실행시킬 수 있는 훅이 존재한다. 이 훅은 useEffect훅을 사용하여 유사한 인터페이스를 확장한 커스텀 훅으로, window.innerWidth 감지를 통해 레이아웃을 알려주는 역할을 한다. 간소화해서 윤곽만 나타내면 대충 아래와 같은 형태로 구현되어 있다. (throttle 등은 생략) const useDisplayDetectEffect = (effect: Effect, deps: Deps) => { const callback = useCallback(effect, deps); useEffect(() => { const ..
2022.09.04