데이터 : 관찰의 결과로 나타난 정량적 혹은 정성적인 실제값

정보 : 데이터에 의미를 부여한 것

지식 : 사물이나 현상에 대한 이해

 

DBMS용어 정리

스키마 : 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것[ex) 고객번호int, 이름char(10), 나이int]

인스턴스: 스키마에 따라 데이터베이스에 실제로 저장된 값

도메인 : 하나의 Attribute가 취할 수 있는 같은 타입의 원자(Atomic)값들의 집합

튜플 : 행(row)

애트리뷰트(속성) : 열(column)

 


왜 데이터 모델링을 하는가?

1. 효율성과 성능 향상

   - 얼마나 많은 데이터가 저장될 수 있는가?

   - 저장 공간은 얼마만큼 필요한가?

   - 얼마나 빠르게 처리하는 것이 가능한가?

2. 유연성

   - 새로운 요구사항에 대하여 얼마나 쉽게 시스템에 적용가능한가?

3. 유지보수

   - 중복된 데이터가 없는가?

   - 프로그램 정의로부터 데이터 정의가 얼마나 독립적인가?

데이터 모델링에 대한 잘못된 편견

  1. 오직 다이어그램을 생성하는 것이다.
  2. DB를 위해서만 존재하는 것이다.
  3. DB관리 시스템을 위해 존재하는 것이다.

데이터 모델링의 과정

  1. 개념적 모델링 :  요구사항을 수집하고 분석한 내용을 바탕으로 개체를 추출하고 개체들간의 관계를 정의한다. ER다이어그램을 만드는 과정까지를 말한다.

  2. 논리적 모델링 : 개념적 모델링에서 만든 ER다이어그램을 DBMS에 맞게 매핑하여 실제 DB로 구현하기 위한 모델을 만드는 과정. 개념적 모델링에서보다 좀 더 구체적으로 상세 속성을 모두 추출

  3. 물리적 모델링 : 실제 컴퓨터의 저장장치에 저장하기 위해 물리적인 정의를 내리는 과정을 말한다.

ER모델 - ER모델은 개체와 개체간의 관계를 나타낸다.

  1. 개체(entity) : 정보를 가지고 있는 독립적인 실체를 말한다. 개체끼리는 비슷한 속성(개체 타입)을 가지고 있으며 개체 집합으로 묶인다. 개체는 다른 개체와 최소 한 개 이상의 관계를 맺고 있다. ER다이어그램에서 개체 타입은 직사각형으로 나타낸다. 모델링을 할 때 모든 개체를 뽑아낸 후 약한 개체 타입을 찾아낸다.

    1) 강한 개체 타입 : 보통 개체 하면 강한 개체 타입으로, 독자적으로 있을 수 있음.2) 약한 개체 타입 : 어떠한 개체에 딸려서 생성되어 혼자 있을 수 없는 개체이므로 상위 개체 타입이 있어야 함

  2. 속성(attribute) : 개체가 가지고 있는 성질을 말한다. ER다이어그램에서 속성 타입은 타원형으로 나타내며 개체와 실선으로 연결된다.

    1) 단순 속성 : 더이상 분해가 불가능2) 복합 속성 : 독립적인 의미를 가진 속성으로 분해가 가능 ex)주소-시, 동3) 단일값 속성 : 하나의 값만을 가지는 속성4) 다중값 속성 : 여러개 값을 가지는 속성으로 이중타원으로 나타냄 ex)학위5) 저장 속성 : 다른 속성의 영향없이 단독으로 저장되는 속성 ex)생년월일6) 유도 속성 : 다른 저장 속성으로부터 유도된 속성으로 점선타원으로 나타냄 ex) 나이

  3. 관계(relationship): 개체 사이의 연관성을 말한다. 마름모로 나타낸다.- 강한 개체 타입과 약한개체 타입의 관계를 나타낼 때 이중마름모로 나타내며, 강한개체 타입 별 약한 개체 타입이 존재할 수도 있고 존재하지 않을 수도 있을 때 사용한다.

* 데이터 베이스에서 속성을 정의할 때 나중의 효율성을 위해 중요한 순서대로 정의한다.

* 개체 타입의 수를 차수(degree)라고 한다.

 

* 사상이란? ex) 도서(도서번호, 도서이름, 출판사, 가격)

앞으로 사용할 프로그램들에 대해 하나도 아는 것이 없어 전반적으로 알아보기 위한 간단한 정리 수준으로만 작성하였습니다.

 

1. postman이란?

  • 자신이 제작한 웹 API를 직접 테스트해 볼 수 있는 환경을 제공하는 프로그램이다.

  • get/post와 같은 방식으로 요청해볼 수 있다.

2. filezilla란?

  • 파일 질라는 오픈소스이고, FTP, SFTP, FTPS를 지원하는 FTP관리 소프트웨어이다.
  • 여기서 FTP(File Transfer Protocol)란 TCP/IP상의 컴퓨터들끼리 파일을 주고 받을 때 쓰는 파일 전송 프로토콜(서비스)이다.
  • 말 그대로 한글판 FTP프로그램이라고 할 수 있다.

3. PuTTy란?

  • 서버(서버 컴퓨터)에 접속하기 위한 가상단말기이다.

  • 서버는 단말 장비를 통해 원격으로 접속해서 작업할 필요가 있는데, 이때 서버로 접속할 수 있도록 논리적인 가상 단말기를 제공하는데 이를 PuTTy라고한다.

함수 선언식

  1. 함수명이 반드시 있어야 한다.
  2. function 키워드를 사용한다.
  3. 매개변수 타입을 적지 않는다.
  4. 호이스팅에 영향을 받는다.

함수 표현식

  1. 변수에 할당이 가능하다.
  2. 함수 이름을 사용하는 것은 선택하지만 보통은 익명함수를 사용한다.
  3. 호이스팅에 영향을 받지 않는다.
var http = require('http');

http.createServer(function (request, response) {
    
}).listen(3000,function(req,res){
    console.log("3000port");
});

 

화살표 함수

  1. 간결하다.
  2. 매개변수 하나면 소괄호로 안 묶어도 된다.
  3. return문을 줄일 수 있다.
  4. 기존의 함수를 완전히 대신할 수는 없다.
  5. 객체의 메소드를 정의할 때에는 사용하면 안된다.
const http = require('http');

const server = http.createServer((req, res) => {

}).listen(3000, (req, res) => {
    console.log("3000 포트와 연결중!");
});

 

 

- CPU스케줄러(CPU scheduler)

  CPU가 유휴상태가 될 때마다, 운영체제는 준비 완료 큐(ready queue)에 있는 프로세스들 중 하나를 선택해 실행해야 한다. 선택 절차는 short term(단기) 스케줄러에 의해 수행된다.

* short term scheduler = CPU scheduler

  CPU 스케줄러는 ready queue에 있는 어느 프로세스에게 CPU를 할당할 것인지를 결정하는 문제를 다룬다. 이에는 여러가지 알고리즘들이 존재한다.

 


 

1.     선입 선처리 스케줄링(First-Come, First-Served Scheduling)

  비선점 알고리즘이다. 가장 간단한 CPU스케줄링 알고리즘이며 FIFO라고도 한다. CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당 받는다.

FCFS 스케줄링 Gantt차트

  여기서 각각의 turnaround time은 25, 30, 33이며 평균 대기 시간은 (0+25+30)/3=18.33이다. 이때 프로세스의 순서를 P3, P2, P1순으로 바꾸어주면 (0+3+8)/3=3.66으로 크게 줄어든다.

* convoy effect(호위효과) : 모든 다른 프로세스들이 하나의 긴 프로세스가 CPU가 양도하기를 기다리는 것을 말한다. 호위효과는 작을수록 좋다.

 

2.     최단 작업 우선 스케줄링(Shortest-Job-First Scheduling)

  SJF 스케줄링은 장기 스케줄링에서 자주 사용된다. 이 스케줄링은 선점일 수도 있고 비선점일 수도 있다. CPU의 버스트 길이를 연관시켜 구현하였다.

SJF 스케줄링 - 비선점형 Gantt차트

  평균 대기 시간은 (3+0+16+9)/4=7이다. 하지만 SJF의 어려움은 다음 CPU의 길이를 파악하는 것이다. 다음 burst(프로세스)는 지수 평균한 것으로 예측한다. 아래는 선점형 SJF알고리즘을 통해 구현한 스케줄링이다.

 

SJF 스케줄링 - 선점형 Gantt차트

3.     라운드 로빈 스케줄링(Round-Robin Scheduling)

  RR알고리즘은 선점형 알고리즘으로, 시분할 시스템을 위해 설계되었다. FCFS스케줄링과 비슷하지만 시스템이 프로세스들 사이를 옮겨 다닐 수 있도록 선점이 추가된다. 시간 할당량(time quantum) 또는 time slice라는 시간의 '단위'를 정의하여 구현한다. 어떤 프로세스가 이 단위 시간을 지나면 실행을 강제로 다른 프로세스에게 선점시키는 것이다. 일반적으로 time quantum은 10에서 100밀리초 동안이다.

RR 스케줄링 Gantt차트

  평균 대기시간은 (0+5+6+9)/4=5밀리초이다. 반응 시간의 정의는 처음 반응한 시간이기 때문에 P2의 반응 시간은 3밀리초이다. RR 알고리즘의 성능은 time quantum(시간 할당량)의 크기에 매우 큰 영향을 받는다. time quantum이 너무 큰 경우에는 FCFS와 같아질 것이며 time quantum이 너무 작아진다면 context switch가 자주 일어나 프로세스의 실행이 느려질 수 있다.

 

4.     다단계 큐 스케줄링(Multilevel Queue Scheduling)

  다단계 큐 스케줄링 알고리즘은 foreground(대화형) 프로세스와 background(일괄처리) 프로세스들을 구분한다. 이들 두 유형의 프로세스는 응답시간에 대한 요구사항이 다르기 때문에, 스케줄링 요구 또한 다를 것이다. 다단계 큐 스케줄링 알고리즘은 ready queue를 다수의 별도의 큐로 구분하여 각 큐는 자신의 스케줄링 알고리즘을 가지고 있다.

각 큐는 우선순위를 가진다.

     1. 시스템 프로세스

     2. 대화형 프로세스

     3. 대화형 편집 프로세스

     4. 일괄처리 프로세스

     5. 학생 프로세스

  시스템 프로세스가 가장 높은 우선수위를 가지며 학생 프로세스가 가장 낮은 우선순위를 가진다. 높은 우선순위를 가진 프로세스를 위한 큐 들이 비어있지 않으면 다음 우선순위의 큐는 실행될 수 없다. 

  foreground queue는 자신의 프로세스들 사이에서 라운드 로빈 스케줄링을 위해 CPU시간의 80%가 주어지고, background queue는 CPU시간의 20%를 받아 자신의 프로세스들에게 선입 선처리 방식으로 줄 수 있다.

 

 

다중 프로그램 시스템은 CPU의 사용을 최대화 하기 위한 시스템이다. 다중 프로그램 운영체제의 기본은 CPU스케줄링이다. CPU를 프로세스들 간에 교환함으로써, 컴퓨터를 생산적으로 만든다. 이 다수의 프로세스들을 교환할때 필요한 것이 CPU스케줄링이다.


CPU-입출력 버스트 사이클(CPU-I/O Burst Cycle)

  • 버스트란 특정 기준에 따라 한 단위로서 취급되는 연속된 신호나 데이터의 모임을 말한다. 즉, 입출력 요청을 위해 CPU 사용을 사용했다가 쉬었다가를 반복한다.

  • 프로세스가 CPU를 사용할 때를 CPU버스트, 입/출력을 기다릴 때를 입/출력 버스트라고 한다.

  • CPU 버스트 : CPU에 해당하는 접근이 많은 것이다. running 안에 들어가 있는 시간이 많다. 프로그램 수행 중에 연속적으로 CPU를 사용하는 단절된 구간을 말한다. 즉, CPU명령을 실행하는 것을 말한다.

  • I/O 버스트 : I/O에 해당하는 접근이 많은 것이다. waiting 안에 들어가 있는 시간이 많다.

  • 프로세스의 실행은 CPU 버스트를 시작으로 뒤이어 입출력 버스트가 발생하는 식으로 두 버스트의 사이클로 구성된다. 마지막 CPU버스트는 또 다른 입출력 버스트가 뒤따르는 대신에 실행을 종료하기 위한 시스템 요청과 함께 끝난다.

  • 입출력 중심의 프로그램은 CPU 버스트 시간이 짧을 것이다. 반대로 CPU 지향 프로그램은 CPU 버스트 시간이 길 것이다.


Preemptive Scheduling(선점 스케줄링)

  • 수행되고 있는 프로세서의 권한을 가지고 올 수 있다.

  • 빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용한다.

  • 선점으로 인해 많은 오버헤드를 초래할 수 있다.

  • 선점을 위해 인터럽트 타이머 클럭이 필요하다.

  • 종류 : 선점 우선순위, RR(Round Robin), 다단계 큐, 다단계 피드백 큐 알고리즘 등

 

non-Preemptive Scheduling(비선점 스케줄링)

  • 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없다.

  • 한 프로세스가 실행 상태에서 대기 상태로 전환될 때, 프로세스가 종료할 때 비선점 스케줄링을 사용한다.

  • 응답시간 예측이 쉽다.

  • 협조적(cooperative)이며 모든 프로세스를 공정하게 처리한다.

  • 종류 : FCFS, SJF, 우선순위, HRN, 기한부 알고리즘 등


Dispatcher(디스패처)

  • CPU의 제어를 단기 스케줄러가 선택한 프로세스에게 주는 모듈이다. 즉, ready에서 running으로 넘어갈 때 스케줄러에 의해 선택되는 것을 말한다.

    • context switch가 일어나는 일

    • 사용자 모드로 전환하는 일

    • 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동하는 일

  • 디스패처가 하나의 프로세스를 정지하고 다른 프로세스의 수행을 시작하는 데까지 소요되는 시간을 dispatch latency(디스패치 지연)라고 한다. 이는 ready queue에서 running queue로 넘어갈 때 PCB에 복사해 주는 시간을 말하며, 시스템 효율을 결정한다.


 

CPU스케줄링 알고리즘은 다양한 특성을 가지고 있다. 그에 따라 다섯 가지로 기준을 나눌 수 있다.

<기억합시다>

① utilization(CPU 이용률) : CPU를 최대한 바쁘게 유지하는 것이 좋다.

② throughput(처리량) : 단위 시간 당 완료된 프로세스의 개수를 말한다.

③ turnaround time(총 처리 시간) : 프로세스를 실행하는 데 소요된 시간을 말한다. 프로세스의 제출 시간과 완료 시간의 간격을 말한다.

④ waiting time(대기시간) : 프로세스가 ready/waiting queue에서 대기하는 시간을 말한다.

⑤ response time(응답시간) : 응답이 시작되는 데까지 걸리는 시간을 말한다. 처음 반응한 시간을 말한다.

** turnaround time(총 처리 시간) - running에 있는 시간 = waiting time(대기 시간)

 

Crypto 모듈 사용하기

Crypto 모듈은 단방향 암호화 방식을 사용한다. 단방향 암호화 방식은 원래의 문자열로 돌려놓는 복호화가 불가능하다. 그래서 알고리즘을 사용하여 암호화하는데, MD5나 SHA1방식은 이미 뚫렸기 때문에 사용하면 안된다. 복호화가 안된다면 왜 사용하나 싶었는데, 홈페이지의 비밀번호는 다시 복호화 할 필요가 없다. 암호화가 된 사용자의 비밀번호를 저장하여 로그인 할 때마다 같은 알고리즘으로 암호화를 하여 DB에 저장된 비밀번호를 확인하면 된다.

crypto.createHash('sha512').update('1234').digest('base64');

위와 같이 Crypto 모듈을 통해 createHash 메소드를 사용하면 되는데, createHash메소드에는 사용할 알고리즘 명을, update 메소드에는 암호화 할 문자열을, digest 메소드에는 암호화된 문자열 표시 방법을 결정한다.

 

Crypto+salt 사용하기

같은 알고리즘을 사용할 때, 같은 문자열에 대한 것은 같은 암호화 결과를 반환한다. 그렇기 때문에 암호화 결과를 통해서도 원래의 암호를 유추해낼 수 있다. 이러한 데이터 베이스를 레인보우 테이블이라고 한다. 그렇기 때문에 해커가 레인보우 테이블을 사용하지 못하도록 소금을 뿌려준다. 랜덤으로 생성된 Salt를 통해 암호화하여 얻은 결과를 다시 변형할 수 있다.

crypto.randomBytes(32,(err,buf)=>{
        crypto.pbkdf2('1234',buf.toString('base64'),100000,64,'sha512',(err,key)=>{
            console.log(key.toString('base64'));
        });
    });

위 코드와 같이 먼저 randomBytes 메소드로 32바이트(또는 64바이트) 길이의 salt를 생성해준다. buf는 버퍼 형식이기 때문에 buf.toString(‘base64’)으로 base64 문자열 salt로 변경해준다. 그 다음 pbkdf2 메소드를 사용하여 단방향 암호화를 해준다. 매개변수는 차례대로 비밀번호, salt, 반복횟수, 비밀번호 길이, 해시 알고리즘이다.

 

Key stretching이란

hashing함수를 반복하여 해싱하는 것을 말한다. 동일한 횟수만큼 해시해야 일치여부를 확인할 수 있다. salt값을 알더라도 반복횟수가 일치하지 않으면 digest를 찾을 수 없다.

 


 

Request 모듈

내부 서버에서 다른 서버로 요청을 보낼 때 사용하는 모듈이다. 또한 다른 서버에서 요청을 보내서 데이터를 받아온다. request()가 리턴하는 것은 request(url)에서 보내는 http 요청에 대한 정보를 담고 있다.

'_정리&복습_' 카테고리의 다른 글

[OS] CPU스케줄링 - 스케줄링 알고리즘  (0) 2019.04.29
[OS] CPU스케줄링 - 기본 개념  (0) 2019.04.19
[솝트] 2차 세미나 (Node js란?)  (0) 2019.04.18
OAuth2.0 flow  (0) 2019.02.27
OAuth 2.0  (0) 2019.02.18

+ Recent posts