DB는 무결성을 보장하는 것이 중요하다.
그리고 그 무결성을 보장하기 위한 특징이 ACID(Atomicity, Consistency, Isolation, Durability)이다.
DB는 ACID가 의미하는 바와 같이 Transaction이 원자적이면서도 독립적인 수행을 하도록해야 한다.
그래서 등장하는 개념이 Locking이다.
Locking은 Transaction이 DB를 다루는 동안 다른 Transaction이 관여하지 못하게 막는다.
하지만 무조건적인 Locking으로
동시에 수행되는 많은 Transaction들을 일렬로 대기시킨다면 DB의 성능은 현저하게 떨어진다.
반대로 응답성을 높이기 위해
Locking 범위를 줄인다면 잘못된 값이 처리 될 여지가 있다.
그래서 최대한 효율적인 Locking 방법이 필요하다.
이와 관련된 Locking 방법이 Isolation Level이다.
“Not Only SQL” : 데이터를 저장하는 데에는 SQL 외에 다른 방법들도 있다.
NoSQL이라고 하는 말은 No ‘English’ 라고 하는 말과 마찬가지다.
세상에는 영어 말고도 수많은 언어가 존재한다.
MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다.
그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다.
어쨌거나 SQL이 아니기 때문이다.
또한 NoSQL이 No RDBMS를 의미하지는 않는다.
BerkleyDB같은 예외가 있기 때문이다.
Example
화장실에 일을 보러 가야 하는데
누군가가 사용하고 있다면 다른 사람은 사용할 수 가 없다.
이 때 문을 잠금다면(=Locking) 다른 사람이 들어가고 싶어도 못 들어(=Waiting) 간다.
안에 있던 사람이 문을 열고(=UnLocking) 나와야 다른 사람이 들어갈 수 있게 된다.
락킹은 내가 베타적으로 데이터를 갱신 & 사용하고 싶을 때 사용된다.
= 내가 사용하는 데이터를 그 누구도 못건드리게 하고 싶을 때 사용한다.
이런 부분을 임계 영역(Critical section)이라고 한다.
일반 유저가 사용하는 대부분의 OS는 선점형 시분할 운영체제이다.
그렇기 때문에 Chrom과 메모장을 동시에 실행시키면
각 프로그램은 일정 시간 동안만 CPU를 선점하여 사용한다.
이 때 할당되는 시간 단위를 타임 슬라이스(Time Slice)라고 한다.
이 동작 과정을 이해하기 위해선
프로세스와 쓰레드에 대해 알아야한다.
각 프로그램은 프로세스라는 단위로 움직인다.
그리고 프로세스 안에서 동작하는 실행 단위인 쓰레드가 존재한다.
Chrom으로 스포츠 영상을 보면 크롬이 프로세스가 되고
Chrom안에서 영상을 처리해주는 부분과 네트워크로 영상을 받아오는 부분이 각각 쓰레드가 된다.
그런데 프로세스 혹은 쓰레드가 Wait라는 상태가 되는 경우가 있다.
일반적으로 H/W는 CPU보다 느리다.
만약 디스크에서 데이터를 Read하는 작업을 한다면
CPU는 H/W의 Read 작업을 기다리지 않고 다른 작업을 진행하게 된다.
즉 CPU는 Read하는 명령을 요청하고 다른 작업을 진행한다. (= Context Switch)
SMT라는 명칭은 동시 멀티스레딩을 뜻하며 학계에서 주로 지칭하는 용어로 사용되고 있다.
시장에서는 인텔이 이 기술을 부르는 이름인 하이퍼쓰레딩으로 더 유명하지만
이 기술이 인텔 독점인 것은 아니며
AMD에서도 기존의 불도저에 적용한 CMT(Cluster Multi-Threading) 구조를 버리고
2017년 3월 초에 출시된 RYZEN에 이 구조를 채용하면서 사실상 거의 모든 데스크탑 CPU에 적용되는 기술이 되었다.
웹 브라우저는 3 way handshak 방식으로 서버와 연결을 맺는다.
그리고 위 작업이 수행되는 데 걸린 총 시간을 Connection Time 이라고 한다.
그런데 Connection Time을 무한으로 설정할 순 없으므로
일정 시간을 지정하게 되는데 그 시간이 초과하면 발생하는 게 Connection Timeout이다.
즉 Connection Timeout은 Connection을 구성하는데 소요되는 시간의 임계치를 의미한다.