일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 결정 알고리즘
- RTK Query
- 타입 좁히기
- 인터섹션
- SSR
- 이분 검색
- 태그된 유니온
- Cypress
- app router
- recoil
- Jest
- 무한 스크롤
- map
- 리터럴 타입
- Promise
- TS
- 호이스팅
- React
- useAppDispatch
- 투포인터
- webpack
- CI/CD
- dfs
- 공변성
- ESlint
- CORS
- async/await
- autosize
- tailwind
- 반공변성
- Today
- Total
목록CS (25)
짧은코딩
커널 커널은 운영체제의 핵심 기능을 모아놓은 것이다. 커널은 복잡하게 얽혀 있으며 단일형, 계층형, 마이크로 구조 커널로 구분된다. 커널이 하는 일 1. 프로세스 관리: 프로세스에 CPU를 배분하고 작업에 필요한 환경을 제공 2. 메모리 관리: 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공 3. 파일 시스템 관리: 데이터를 저장하고 접근할 수 있는 인터페이스 제공 4. 입출력 관리: 필요한 입력과 출력 서비스를 제공 5. 프로세스 간 통신 관리: 공동 작업을 위한 프로세스 간 통신 환경을 지원 단일형 구조 커널(monolithic architecture) 단일형 구조 커널은 초창기 OS 구조이다. 그리고 초기에는 기능 구현에 바빠서 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하..
조인(join) 조인은 2개 이상의 테이블을 묶어 하나의 테이블로 만드는 것을 의미한다. MySQL에서는 JOIN, MongoDB에서는 lookup으로 처리한다. 조인은 내부, 왼쪽, 오른쪽, 합집합 조인이 있다. 1. 내부 조인(inner join) 왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 표시한다. 즉, 내부 조인은 두 테이블 간 교집합을 나타낸다. 2. 왼쪽 조인(left outer join) 왼쪽 테이블의 모든 행이 결과 테이블에 표시된다. 즉, 왼쪽 테이블을 기준으로 오른쪽 테이블과 일치하는 레코드와 함께 집합을 생성한다. 만약 일치하는 항목이 없으면 null이 된다. 3. 오른쪽 조인(right outer join) 오른쪽 테이블의 모든 행이 결과 테이블에 표시된..
CPU 스케줄러는 CPU 스케줄링 알고리즘으로 프로세스에게 일을 스레드 단위로 할당한다. 즉, 어떤 프로그램이 CPU 소유권을 가질 것인지 결정한다. CPU 스케줄링 알고리즘 방식으로는 크게 비선점형과 선점형 방식이 있다. -CPU 스케줄러의 목표 1. CPU 이용률을 최대치로 사용 2. 주어진 시간에 최대한 많은 일을 하도록 함 3. ready queue에 프로세스가 적도록 함 4. 응답 시간을 짧게 설정함 비선점형 방식(non-preemptive) 프로세스가 스스로 CPU 소유원을 포기할 수 있고 강제로 프로세스를 종료할 수 없다. 그렇기에 컨텍스트 스위칭으로 인한 부하가 적다. 비선점형 방식에는 FCFS, SJF, 우선순위가 있다. FCFS(First Come, First Served) 가장 먼저 ..
공유 자원(shared resource) 공유 자원은 프로세스, 스레드가 같이 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 같은 자원을 의미한다. 경쟁 상태(race condition)는 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 사용하는 상황을 말한다. ex) 공유 자원 item = 1이 있고 A 프로세스가 item에 2를 더하고 B 프로세스는 3을 더했다. 만약 여기서 A와 B가 같이 item을 읽고 A가 먼저 2를 더해주고 늦게 B가 3을 더하면 item은 4가된다. 옳바른 답은 6(1+2+3)이 나와야하는데 타이밍이 꼬여서 잘못된 값이 나온 것이다. 임계 영역(critical section) 임계 영역은 공유 자원에 접근하는 순서 같은 이유로 결과가 달라지는 영역을 말한다. ..
인덱스 인덱스의 필요성 인덱스는 데이터를 빠르게 찾을 수 있는 장치이다. ex) 인덱스를 활용해 책 안에 찾고자 하는 항목을 빠르게 찾을 수 있다. B-트리 인덱스는 보통 B-트리 자료구조로 이루어져 있다. 트리 탐색은 노드 -> 브랜치 노드 -> 리프 노드를 거쳐서 내려온다. 찾는 값인 57보다 같어나 클 때까지를 기반으로 탐색하다가 리프 노드에 도착해서 57이 가리키는 데이터 포인트를 통해 값을 반환한다. 인덱스가 효율적인 이유와 대수확장성 인덱스가 효율적인 이유는 균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문이다. -대수 확장성 대수확장성은 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 의미한다. 트리의 깊이가 1개씩 증가하면 최대 인덱스 항목의 수는 4배씩 증가한다. 이 말은 ..
멀티 프로세싱 멀티 프로세싱은 여러 개의 프로세스를 통해 동시에 두 가지 이상의 일을 수행하는 것을 말한다. 장점으로는 병렬 처리가 가능하며 특정 프로세스의 메모리, 프로세스에 문제가 생겨도 다른 프로세스를 이용할 수 있어서 신뢰성이 높다. 웹 브라우저 웹 브라우저는 멀티 프로세스 구조를 가지고 있다. 1. 브라우저 프로세스: 주소 표시줄, 북마크 막대, 뒤로 가기, 앞으로 가기 버튼 등 + 네트워크 요청, 파일 접근 등 권한을 담당한다. 2. 렌더러 프로세스: 웹 사이트에서 보이는 모든 부분을 제어한다. 3. 플러그인 프로세스: 웹 사이트의 플러그인을 제어한다. 4. GPU 프로세스: GPU를 사용하여 화면을 그리는 부분을 제어한다. -플러그인이란? 웹 브라우저의 일부 기능들을 쉽게 설치하여 사용하게 ..
HTTP/2 HTTP/2는 HPPT/1.x보다 지연 시간은 줄고 응답 시간을 더 빠르게 할 수 있다. 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다. 멀티플렉싱 멀티플렉싱은 여러 개의 스트림을 사용해 송수신한다. 만약 특정 스트림의 패킷이 손실되어도 해당 스트림에만 영향을 미치고 다른 스트림은 잘 동작한다. 사진처럼 병렬적인 스트림을 사용하여 데이터를 송수신한다. 또한 스트림 안의 데이터들도 쪼개져있어서 독립된 프레임으로 조각되어 송수신하고 다시 조립하며 데이터를 주고받는다. -스트림(stream) 시간이 지남에 따라 사용할 수 있는 데이터 흐름 -HOL Blocking 해결 HTTP/1.x에서는 앞에 큰 데이터가 오래 걸리면 HOL Blocking이 발생한다. 하지만..
HTTP/1.0 HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다. 이로인해 RTT가 증가한다. 서버에서 파일을 가져올 때마다 TCP의 3-way handshake를 열어야해서 RTT가 증가한다. RTT: 패킷이 목적지까지 갔다가 돌아오는 시간, 즉 패킷 왕복 시간 RTT 증가 해결 방법 연결할 때마다 RTT가 증가하면 서버에 부담이 많아지고 응답 시간이 길어진다. 이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩을 사용했다. -이미지 스플리팅 이미지를 많이 다운 받으면 과부하가 걸려서 많은 이미지가 합쳐져 있는 하나의 이미지를 받고 이를 기반으로 background-image의 position을 이용해 이미지를 표기하는 법이다. -코드 압축 코드 압축..
데이터베이스의 종류 관계형 데이터베이스(RDBMS) 관계형 DB는 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 DB를 말하고 SQL로 조작한다. 관계형 DB는 표준 SQL은 지키지만 각 제품을 특화시킨 SQL을 사용한다. 종류: MySQL, PostgreSQL, 오라클, Server, MSSQL 등이 있다. -MySQL MySQL은 대부분의 OS와 호환되고 현재 가장 많이 사용되는 DB이다. 메타, 트위터 등이 MySQL을 사용하고 있다. C, C++로 만들어졌고 MyISAM 인덱스 압축 기술, B-트리 기반의 인덱스, 스레드 기반의 메로리 할당 시스템, 빠른 조인, 최대 64개의 인덱스를 제공한다. 그리고 대용량 DB를 위해 설계되었고 롤백, 커밋, 이중 암호 지원 보안 등의 기능을 제공한다. ..
프로세스의 메모리 구조 스택, 힙, 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)로 나눠진다. 그리고 스택은 위에서 부터 할당되고 힙은 아래 주소부터 할당된다. 스택(stack) 스택은 지역변수, 매개변수, 함수가 저장되고 컴파일시에 크기가 결정되는 동적인 특징을 갖는다. 스택은 함수가 함수를 재귀적으로 호출하기 때문에 동적으로 크기가 늘어난다. 이렇기에 힙과 겹치면 안돼서 스택과 힙을 반대부터 할당한다. 힙(heap) 힙도 동적으로 할당되며 런타임 시 크기가 결정된다. ex) 백터 같은 동적 배열은 힙에 할당된다. 데이터 영역 데이터 영역은 전역변수, 정적변수가 저장되고 정적인 프로그램을 종료하면 사라지는 변수가 들어 있는 영역이다. -BSS 영역 초..