뷰뷰는 일종의 테이블이다. 하지만 그 스키마와 데이터가 저장되는 것이 아니라, 뷰 정의에 따라 계산된다.따라서 이름 그대로 한 테이블에 대한 '뷰', 관점을 저장하는 것과 같다. 뷰는 다음과 같이 생성한다.CREATE VIEW YoungActiveStudents(name, grade) AS SELECT S.name, E.grade FROM Students S, Enrolled E WHERE S.sid = E.sid AND S.age > 21 AS 절 이후에 이 뷰의 정의를 SQL 형식으로 적으면 된다.그래서 어떻게보면 뷰는 일종의 함수처럼 생각하여 그때 그때 계산하는 값으로 볼 수 있다. 뷰는 기본 테이블(데이터베이스에 저장된 실제 테이블)처럼 ..
DFA지난 글에서 오토마톤에 대해 정리하면서 오토마톤은 다양한 기준으로 분류할 수 있다고 하였다.그 중에서 이번 글에는 DFA 오토마톤에 대해 정리해보려고 한다. DFA (Deterministic Finite Accepter)는 지난 내용에 따라 다음과 같이 이해할 수 있다. - 결정적이며 (Deterministic, 각 상태에서 주어진 입력에 대해 갈 수 있는 경로가 유일하다.)- 유한한 (Finite, 메모리 == 저장공간이 유한하다.)- Accepter (기계의 output 이 yes(accept) / no(reject) 로 이진적이다.) DFA는 오토마톤의 일종이지만, 특이하게 temporary storage 가 없다.그렇다고 저장공간이 없는 것은 아니고, control unit 에 마치 플립플..
오토마톤은 디지털 컴퓨터에 대한 추상적인 모델이다.디지털 컴퓨터는 기본적으로 입력이 주어지면 저장공간을 활용하여 이를 적절히 처리한 뒤 결과물을 내보낸다. 이때 입력 데이터는 수학적 편의를 위해서 '알파벳 심볼에 의해 정의된 문자열' 이라고 정의한다. (꼭 이래야만 하는 것은 아니다)그리고 인풋 파일은 무한한 길이의 테이프로부터 문자열을 읽어들일 수 있다고 생각한다.이 테이프는 여러개의 셀로 구성되어 있으며, 각 셀에는 알파벳 심볼 하나가 저장된다. 디지털 컴퓨터는 내부적으로 연속된 시간이 아니라, 이산적인 시간 체계로 동작하며,각 시간마다 인풋 파일의 왼쪽에서 오른쪽을 향해 한번에 하나의 셀(심볼)을 읽어들인다.그리고 End-Of-File (EOF) 신호를 통해 문자열의 끝을 감지할 수 있도록 기계가 ..
비트코인의 트랜잭션에는 간단한 스크립트 코드를 넣을 수 있다.그래서 비트코인은 프로그래머빌리티가 없다, static 하다, 변하지 않는다고 하면 틀린 말이다.물론 이 스크립트 코드는 turing complete 하지는 않아서 모든 기능을 자유롭게 쓸 수 있지는 않지만, 제한적인 프로그래밍이 가능하다.(참고로 이더리움은 튜링 컴플리트를 지향하는 블록체인 프로젝트이다. 기말고사 범위에서 정리할 예정) 비트코인의 스크립트는 스택 기반으로 실행되는 코드이며,트랜잭션 검증과 서명 검증을 위한 다양한 명령어를 제공한다. 대표적인 스크립트 타입은 다음과 같다.- Pay To Public Key (P2PK) :비트코인의 초창기 트랜잭션 방식, 사카시 나카모토가 고안했던 방식으로 public key hash에 지불한다...
프로세스는 단독으로 자원을 경쟁적으로 사용하면서 실행되기도 하지만 서로 통신하고 협력하면서 실행되기도 한다.프로세스 사이에 통신할 때는 크게 3가지 문제점이 있다. 1. 어떻게 하나의 프로세스에서 다른 프로세스로 정보를 넘길 것인가?2. 어떻게 각 프로세스가 중요한 동작을 하고 있을 때 서로를 방해하지 않도록 보장할 것인가?3. 프로세스와 프로세스의 동작 사이에는 의존성이 존재할 수 있는데, 어떻게 올바르게 실행되도록 순서를 조정할 것인가?(프로세스 A가 생성한 데이터를 프로세스 B가 출력한다면, 프로세스 B는 프로세스 A의 동작이 끝날 때까지 기다려야 한다.) 이 문제를 해결하는 것을 가리켜 '프로세스 동기화' 라고 한다. 우선 첫 번째 문제인 하나의 프로세스에서 다른 프로세스로 정보를 넘기는 것은 단..
이번 글에서는 개념적 데이터베이스 설계를 통해 작성한 ERD를 관계 모델(테이블)로 구현해본다. 엔티티 셋엔티티 셋은 테이블로 만든다. 그림과 같은 엔티티 셋을 테이블로 만든다면 아래와 같이 SQL을 작성할 수 있다. CREATE TABLE Employees ( ssn char(11), name char(20), lot integer, PRIMARY KEY (ssn)); 관계 집합 (relationship set)이진 관계관계 집합은 하나의 테이블로 만들 수 있다.이때 관계집합은 자신이 갖는 어트리뷰트 외에, 관계를 맺는 두 엔티티 셋의 PK 를 FK로 가져야 한다.(그리고 두 엔티티 셋의 PK 조합은 관계 집합의 슈퍼키가 된다.) 그림과 같은 ERD가 있을 때, Wo..
프로세스프로세스는 컴퓨터 메모리에 올라와있는, 실행중인 프로그램을 말한다.(실행중이지 않은 프로그램은 하드디스크나 SSD에 파일로서 존재하는 프로그램을 말한다.) 만약 여러 개의 프로그램을 실행해서 여러개의 프로세스가 생성되면 과연 정말로 여러 프로세스가 동시에 실행되고 있는 것일까?여러 개의 프로세스를 실행하는 것을 '멀티 프로그래밍' 이라고 하는데, 아래 이미지와 같이 구현된다. 그림에서 보는 것처럼 CPU가 프로세스를 하나씩 번갈아가면서 실행하는 것이 멀티 프로그래밍이다.하드웨어적으로는 (a) 와 같이 하나의 프로그램 카운터가 각 프로세스를 넘나들면서 실행하며,개념적으로는 4개의 독립된 프로그램 카운터가 존재하는 것처럼 동작한다.그래서 시간에 따른 프로세스별 실행 흐름은 (c)와 같은 모습으로 나..
지난 글에서 정리한 것까지는 데이터베이스를 개념적으로 설계하는 방법을 다루어보았다. (conceptual design)이제 이번 글부터는 ERD를 통해 개념적으로 설계한 데이터베이스를 논리적으로 설계해보고자 한다.즉, SQL을 사용하여 엔티티 셋과 관계 셋을 실제 데이터베이스 테이블로 만들어보려고 한다.그에 앞서 이번 글에서는 먼저 데이터베이스의 논리적 설계를 위한 Relational Model 의 기본 개념들을 간단하게 정리해본다. Relation관계형 데이터베이스 (relational database) 는 relation의 집합으로 이루어져 있다.(그래서 영어 이름이 relational database 라고 생각한다. 한국어로는 relationship과 따로 구분짓지 않고 관계라고 하지만..) re..
비트코인 네트워크는 p2p 네트워크이다.비트코인 네트워크를 구성하는 개체를 '노드' 라고 하며, 이 '노드'는 적절한 하드웨어 + 비트코인 프로그램이다.간단히 말하면 컴퓨터에서 돌아가는 비트코인 프로그램을 노드라고 한다고 보면 된다.그리고 대표적인 비트코인 프로그램이 사카시 나카모토가 만든 '비트코인 코어' 이다.(참고로 지금은 비트코인 코어 프로젝트에서 사카시 나카모토는 빠졌고, 20명도 안되는 개발자 그룹에 의해 유지되고 있다.우리도 다양한 이슈를 제기하는 방식으로 프로젝트에 간접적으로 참여할 수도 있다.) 노드의 종류는 다음과 같다. - Full Node비트코인을 통해서 모든 것을 다 할 수 있는 노드제네시스 블록부터 지금까지 생성된 모든 블록 체인과 트랜잭션 정보를 갖고 있는 노드이다.따라서 Fu..
시스템 콜시스템 콜은 컴퓨터 프로그램이 운영체제가 제공하는 서비스를 제공 받을 때 사용하는 인터페이스이다. 대부분의 CPU는 커널 모드(kernel mode)와 사용자 모드(user mode)를 갖고 있다.CPU 내부에는 PSW (Program Status Word) 라고 하는 레지스터가 있고, 이 레지스터의 여러가지 비트들 중 하나가 CPU의 모드를 결정한다. CPU가 커널 모드로 동작하게 되면, CPU에 정의된 instruction set 에 있는 모든 명령어를 실행할 수 있게 되고, 하드웨어의 모든 기능을 사용할 수 있게 된다.그리고 운영체제는 커널모드에서 동작한다. 따라서 운영체제는 모든 하드웨어 기능을 사용할 수 있다. 반면 우리가 흔히 사용하는 프로그램들은 사용자 모드에서 동작한다.사용자 모드..