전체 글
[OS] 1. 운영체제란? + 기본적인 컴퓨터의 구조
이화여대 반효경 교수님의 운영체제 강의를 바탕으로 작성하였습니다. 운영체제 `운영체제`란, 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층에 해당한다. `커널`은 운영체제의 핵심 부분으로, 컴퓨터가 부팅됨과 동시에 메모리 영역에 로드되어 항상 존재하는 프로그램에 해당한다. 운영 체제의 기능 운영체제는 하드웨어의 자원을 효율적으로 관리하는 기능을 한다. 또한 하드웨어를 다루는 복잡한 부분을 간단하게 추상화하여 제공하기 때문에, 사용자는 하드웨어를 어떻게 사용할지에 대해 전혀 고려하지 않고 편리하게 컴퓨터를 사용할 수 있게 된다. 컴퓨터 시스템의 기본적인 구조 컴퓨터 시스템은 기본적으로 위와 같은 구조로 되어있다. CPU는 register라는 자체 저..
[Database System] Recovery Algorithm
Crash Recovery Recovery Algorithm은 데이터베이스의 consistency, transaction atomicity, 그리고 durability를 failure 발생 시에도 보장하기 위한 방법이다. Recovery Algorithm은 크게 두 파트로 나뉘어진다. 1. 정상 트랜잭션 처리 중에 실패로부터 복구하기 위한 조치 2. 실패가 발생한 후 데이터베이스를 consistency, transaction atomicity, 그리고 deurability를 보장하는 상태로 복구하는 조치 ARIES Algorithm for Recovery and Isoliaton Exploiting Semantics의 준말로, IBM Research에서 개발된 알고리즘이다. ARIES algorithm의..
OAuth
OAuth가 정의하는 4가지 Roles Resource Owner Protected Resource로 접근할 수 있는 entity를 말한다. 즉 보호된 자원 또는 데이터에 대한 소유자 혹은 사용자를 의미한다. 현재 프로그램을 개발중이고, OAuth를 해당 프로그램에 적용하는 중이라면, Resource Owner는 프로그램을 사용하는 유저라고 생각하면된다. Resource Server Server는 protected resource 를 호스팅하며 protected resource로의 접근을 돕는 역할을 한다. 트위터 서버가 사용자의 트윗과 프로필 정보와 같은 자원을 호스팅하는 것을 그 예시로 들 수 있다. Client protected resource request를 생성하며, 사용자 혹은 자원 소유자의 ..
[Database System] Database Logging
Failure Classification DBMS에서 발생할 수 있는 failure의 타입은 다음과 같다. Type1: Transaction Failure Type2: System Failure Type3: Storage Media Failures Transaction Failures 트랜잭션 실패에는 크게 두 가지 유형이 존재한다. 1. Logical Erros 논리적 에러는 트랜잭션이 내부 오류 조건(무결성 제약 조건 위반)으로 인해 완료되지 않는 상황을 의미한다. 2. Internal State Erros 내부 상태 에러는 DBMS가 active transaction을 종료해야 하는 오류 조건(ex. Deadlock)으로 인해 발생하는 상황을 말한다. 예시로 들었던 Deadlock이 발생하면, DB..
[Database System] Join Algorithm
Join Algorithms 우리는 Relational Database에서 데이터의 중복을 방지하기 위해 정규화를 수행한다. 이후, 다시 original tuple을 복구하기 위해 사용하는 것이 join operator이다 이번 파트에서는 inner equijoin algorithm을 중심적으로 살펴볼 것이며, 사실 대부분의 다른 join 알고리즘은 이 binary inner equijoin algorithm에서 파생된 것이다. 일반적으로 우리는 join을 수행할 때 더 작은 테이블을 left table(outer table)로 설정한다. Optimizer는 실제 join plan을 세우고 수행하는 과정에서 이를 자동적으로 수행한다. Query Plan 쿼리가 입력되면, operators들은 tree 형..
NestJS란
NestJS NestJS는 Node.js기반 server-side application을 만들기 위한 framework이다. TypeScript와 JavaScript를 모두 지원하며, OOP, FP, FRP의 요소를 결합했다는 특징을 가지고 있다. 설치 방법 다음과 같은 명령어를 입력하여 NestJS를 설치할 수 있다. $ npm i -g @nestjs/cli $ nest new project-name `npm i -g @nestjs/cli`를 통해 NestJS를 설치하고, `nest new project-name`을 통해 project-name을 폴더 명으로 하는 NestJS 기반 프로젝트를 생성할 수 있다. NestJS의 구조 Controller NestJS를 활용하여 프로젝트를 만들면 Control..
[Database System] B+ Tree Index
Summay Of Last Class Hash Table은 모든 DBMS에서 이용되는 중요한 data structure로, O(n)의 공간 복잡도와 O(1)의 시간 복잡도를 가진다. B+ Tree B+Tree란 self-balancing을 진행하는 정렬된 tree data로, search, sequential access, insertions, 그리고 deletions를 모두 O(logn) 에 처리한다. 이는 좀 더 일반화된 binary search tree라고 할 수 있는데, node가 둘 이상의 children을 가질 수 있기 때문이다. B+ Tree는 large blocks of data를 대상으로 한 read-wrtie에 최적화 되어있다. B+ Tree Properties B+ Tree는 다음의 ..
[Database System] Hash Table
Design Decision Database System을 설계할 때 크게 고려해야 할 점은 `Data Organizaiton`와 `Concurrency`이다. Data Organizaiton 효율적인 접근을 위해 memory/page에 어떻게 data structure를 배치할 것인지, 그리고 어떤 정보를 저장할 것인지에 대한 문제이다. Concurrency 어던 방식으로 multiple thread가 data structure에 문제를 발생시키지 않으면서 동시에 접근하게 할 수 있는지를 고려하는 문제이다. Hash Table Hash Table은 key와 value를 mapping하는 unordered associative array를 implements한다. `Hash function`을 사용해서 ..