반응형

* 형변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main {
    public static void main(String[] args) throws Exception {
        int a = 65;
        System.out.println("Integer to Character : " + (char) a);           //A
        System.out.println("Integer to String : " + String.valueOf(a));     //65
 
        char ch = '3';
        char[] ch2 = {'a','b'};
        System.out.println("Character to Integer : " + ((int) ch - '0'));   //3
        System.out.println("Character to String : " + String.valueOf(ch));  //3
        System.out.println("Character to String : " + String.valueOf(ch2)); //ab
 
        String s = "9";
        String s2 = "123";
        System.out.println("String to Integer : " + Integer.parseInt(s));   //9
        System.out.println("String to Character : " + s.charAt(0));         //9
        System.out.println("String to Character : " + Arrays.toString(s2.toCharArray()));   // [1, 2, 3]
    }
}
cs

 

스텍

Stack<Integer> stack = new Stack<>(); //int형 스택 선언

push
pop

Queue<Integer> queue = new LinkedList<>();

add
poll

우선순위 큐

PriorityQueue<Integer> pq = new PriorityQueue<>(); 

add 
pop
peek

Array

int[] arr = new int[4];

Arrays.sort();
Arrays.sort(arr, Collections.reverseOrder());
arr.length

 

ArrayList

ArrayList<Integer> alist = new ArrayList<>();

add
remove
get
alist.size();

String[] array = arrayList.toArray(new String[arrayList.size()]);	// ArrayList -> Array
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(array));	// Array -> ArrayList

HashSet

HashSet hs = new HashSet<>();

add(key)
contains(key)


HashMap

HashMap<String, Integer> hm = new HashMap<>();

put(key, value)
get(key)
containsKey(key)

 

 

 

 

반응형
반응형
^ 문자열 시작
$ 문자열 종료
. 임의의 한 문자(단 \은 넣을 수 없음)
* 앞 문자가 없을 수도 무한정 많을 수도 있음
+ 앞 문자가 하나 이상
? 앞 문자가 없거나 하나 있음
[ ]  문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다.
{ }  횟수 또는 범위를 나타냅니다.
( ) 소괄호 안의 문자를 하나의 문자로 인식
| 패턴 안에서 or 연산을 수행할 때 사용
\ 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)
\b 단어의 경계
\B 단어가 아닌것에 대한 경계
\A 입력의 시작 부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
(?i) 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다.

 

응용

[^-_.a-z0-9] 숫자, 알파벳 소문자, -, _, . 을 제외(^)한 케이스
[.]{2,} . 이 여러번 반복되는 케이스
[.]|[.] 처음과 끝에 . 있는 케이스

 

class Solution {
    public String solution(String new_id) {
        String answer = "";
        String temp = new_id.toLowerCase();
        System.out.println(temp);   // ...!@bat#*-.--.y.abcdefghijklm
        temp = temp.replaceAll("[^-_.a-z0-9]", "");
        System.out.println(temp);   // ...bat-.--.y.abcdefghijklm
        temp = temp.replaceAll("[.]{2,}", ".");
        System.out.println(temp);   // .bat-.--.y.abcdefghijklm
        temp = temp.replaceAll("^[.]|[.]$", "");
        System.out.println(temp);   // bat-.--.y.abcdefghijklm
        if (temp.equals(""))
            temp += "a";
        if (temp.length() >= 16) {
            temp = temp.substring(0, 15);
            temp = temp.replaceAll("^[.]|[.]$", "");
        }
        System.out.println(temp);
        if (temp.length() <= 2)
            while (temp.length() < 3)
                temp += temp.charAt(temp.length() - 1);
        System.out.println(temp);

        answer = temp;
        return answer;
    }
}

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/72410

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

반응형

'∙Algorithm' 카테고리의 다른 글

[Algorithm] 백준/11657 :: 타임머신  (0) 2019.04.30
[Algorithm] 백준/1026 :: 보물  (0) 2019.04.30
[Algorithm] 백준/2504 :: 괄호의 값  (0) 2019.04.29
[Algorithm] 백준/2493 :: 탑  (0) 2019.04.27
반응형

네트워크 용어

  • 네트워크 : 컴퓨터끼리 정보를 주고 받을 수 있는 상태를 말한다.
  • 프로토콜 : 국가끼리 문제없이 교류할 수 있도록 정해진 규칙
  • TCP/IP : 네트워크 상 송수신을 원할하게 수행하기 위한 규칙으로 데이터 송수신에 관한 일련의 작업을 하나로 모은 것
  • 패킷 : 데이터 전송시 데이터를 일정 크기로 잘라서 보내는 방식으로, 보통 1 패킷 = 1024 비트이다.
  • cf) OSI 7 계층

TCP/IP 작동 방식

  1. [송신자 A] 애플리케이션 층 (HTTP, SMTP, POP3, FTP)
    • 애플리케이션간 데이터를 주고받기 위해 필요한 정보를 작성한다.
  2. [송신자 A] 트랜스포트 층 (TCP / UDP)
    • 데이터를 패킷으로 나누고 애플리케이션을 나타내는 번호와 데이터 조합하기 위한 정보를 작성한다.
  3. [송신자 A] 네트워크 층 ( IP )
    • 송수신할 컴퓨터 주소와 불명인 경우 데이터를 파기하는 표시 등을 작성한다.
  4. [송신자 A] 데이터링크 층 (Ethernet)
    • 네트워크 종류에 맞춘 형식으로 수신지 정보 등을 작성한다.
  5. [송신자 A] 물리 층
    • 비트열을 신호로 변환해 전송한다.
  6. [수신자 B] 물리 층
    • 신호를 비트열로 변환한다.
  7. [수신자 B] 데이터링크 층 (Ethernet)
    • 헤더에 적힌 정보를 확인하고 지정된 프로토콜에게 전달한다.
  8. [수신자 B] 네트워크 층 ( IP )
    • 헤더에 적힌 수신처가 맞는지 확인하고 지정된 프로토콜에게 전달한다.
  9. [수신자 B] 트랜스포트 층 (TCP / UDP)
    • 헤더를 확인하고 데이터를 순서대로 나열해 조합한다.
  10. [수신자 B] 애플리케이션 층 (HTTP, SMTP, POP3, FTP)
    • 조합된 데이터를 확인한다.

TCP/IP 4 계층 - 인터넷 모델

< 응용 계층 >

  • 컴퓨터끼리의 주고받기를 사용자가 이용할 수 있는 ‘통신 서비스’ 형태로 만드는 것(서버/클라이언트)
  • 애플리케이션 헤더 : 요청과 응답에 관한 정보가 들어있는 헤더
  • HTTP 프로토콜 : 하나의 요청에 하나의 응답을 반환하고 연결을 해제하는 방법
  • cf) HTTP 프로토콜과 Cookie/Session

< 전송 계층 >

< 인터넷 계층 >

  • 누가 누구에게 전달할 지를 결정하는 주요 역할, 적절한 루트를 사용해 전달하는 역할(Router)
  • IP 주소 : 인터넷 상의 컴퓨터들을 식별하기 위해 인터넷에 연결된 컴퓨터에 주어지는 숫자
  • IP 프로토콜 : 비커넥션형 프로토콜로 UDP와 동일하다. 신뢰성 있는 IP를 지원하기 위해 ICMP 프로토콜이 있다.
  • ICMP 프로토콜 : 수신인에게 전달되지 않는 등 문제 발생 시 송신자에게 그 사실을 알려주는 메세지를 전송한다.
  • IP 데이터그램 : 트랜스포트 층으로부터 데이터를 받아 IP 헤더를 붙인 것
  • Best Effort 방식 -> 노력은 하지만 결과는 보장하지 않는다.

< 네트워크 인터페이스 계층 >

  • 데이터 링크 안에서 데이터를 어떻게 주고받을지 결정하는 역할
  • NIC(Network Interface Card)을 통해 비트열 <-> 신호 변환
  • NIC에는 MAC 주소라는 고유 번호가 할당되어 있어 MAC 주소가 일치하는 경우에만 수신자 NIC에서 데이터를 받는다.
  • 수신인의 IP 주소만 알고 MAC 주소를 모르는 경우 ARP(Address Resolution Protocol) 프로토콜을 활용한다.
    1. MAC 주소를 알고싶은 컴퓨터의 IP 주소를 ARP 패킷에 적고 브로드캐스트 MAC 주소 앞으로 보낸다.
    2. 자신의 IP 주소가 아니라면 파기하고, 자신의 IP 주소라면 MAC 주소를 적은 ARP 패킷을 송신자에게 보낸다.

< CSMA 프로토콜 >

  • 동시에 네트워크를 사용하고자 할 때 상호충돌을 방지하고자 전송 Bus에 흐르는 신호를 감지하는 프로토콜
  • 노드 A에서 네트워크를 전송하기 전에 현재 채널을 사용 여부를 확인해 다중 접근을 방지하는 방법

< CSMA/CD >

  • 송신 전에 전송매체가 비어 있는지 확인하고(Carrier Sense), 비어 있으면 신호를 전송하고(Multiple Access), 전송 후에 충돌이 있는지 확인(Collision Detection) 하는 방식
  • 데이터 프레임 간의 충돌이 발생하는 것을 보완하기 위해 CSMA 방식에 충돌 검증 + 재전송 기능 추가
  • 모든 노드가 순서와 규칙 없이 경쟁하여 선로를 점유하는 방식으로 토큰 버스, 토큰 링은 각 노드에 차례로 점유할 기회를 주는 순차적 할당 방식
  • 전송량이 적을 때 효율적이고 버스형 LAN에 가장 일반적으로 이용
  1. 송신하기 전에 송신중인 다른 노드가 없는지 조사한다.
  2. MAC 주소 b 앞으로 데이터를 전송한다.
  3. 자기 앞으로 온 데이터일 경우 회수, 아닐 경우 파기한다.
  4. 충돌을 감지했을 때는 잠시 후 다시 전송한다.

<CSMA/CA >

  • CSMA 방식 기반에 RTS와 CTS를 사전에 주고 받음으로써 전송할 시간을 미리 예약하여 충돌을 미연에 방지하는 방식


반응형

'∙Network' 카테고리의 다른 글

[Network] TCP/UDP란?  (0) 2019.03.22
[Network] OSI 7 Layer란?  (0) 2019.03.22
[Network] HTTP와 REST API  (0) 2019.02.13
[Network] 주소창에 www.naver.com을 치면 일어나는 일  (0) 2018.12.13
반응형

기억장치 배치 전략

  • 최초 적합(First Fit) : 가능한 영역 중에서 첫 번째 분할 영역에 배치시키는 방법
  • 최적 적합(Best Fit) : 가능한 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치하는 방법
  • 최악 적합(Worst Fit) : 가능한 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치하는 방법
영역번호영역크기상태
15K공백
214K공백
310K사용중
412K공백
516K공백

배치 전략 중 10K 프로그램이 할당 받는 영역의 번호는 다음과 같다.

  • 최초 적합(First Fit) : 10K 프로그램이 들어갈 수 있는 첫 번째 영역은 2번이다.
  • 최적 적합(Best Fit) : 10K 프로그램이 들어가고 단편화를 가장 작게 남기는 영역은 4번이다.
  • 최악 적합(Worst Fit) : 10K 프로그램이 들어가고 단편화를 가장 많이 남기는 영역은 5번이다.

가상기억장치 구현

  • 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것으로 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸눈 주소 변환 작업(매핑)이 필요하다.
  • 페이징 기법 : 프로그램을 동일한 크기로 나눈 단위를 페이지라 하며 이 페이지를 블록으로 활용하는 기법
  • 세그먼테이션 기법 : 프로그램을 가변적인 크기로 나눈 단위를 세그먼트라 하며, 이 세그먼트를 블록으로 사용하는 기법

  • 내부 단변화 : 프로그램이 할당된 후 남는 빈 공간, 영역 크기 16K > 프로그램 크기 14K 인 경우 내부 단편화 2K 발생
  • 외부 단편화 : 영역 크기보다 프로그램 크기가 커서 할당되지 않아 남는 빈 공간, 영억 크기 12K < 프로그램 크기 14K 인 경우 외부 단편화 12K 발생

페이징 기법

  • 페이지 : 프로그램을 일정한 크기로 나눈 단위(일반적으로 1~4KB)
  • 프레임 : 페이지 크기로 일정하게 나누어진 주기억장치 단위
  • 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블이 필요하다.
  • 외부 단편화는 발생하지 않지만 내부 단편화는 발생할 수 있다.
  • 장점 : 여러 개의 프로그램을 동시 실행할 수 있어 다중 프로그래밍 정도가 향상된다.
  • 단점 : 주소 변환 과정에서 CPU 사용시간이 낭비되고 내부 단편화 문제가 발생한다.

paging

세그먼테이션 기법

  • 세그먼트 : 사용자 주소 공간을 논리적인 단위로 나눈 것, 각 세그먼트는 고유한 이름과 크기를 가진다.
  • 주소 변환을 위해 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.
  • 장점 : 외부단편화에 의한 기억장치 낭비를 줄일 수 있다.
  • 단점 : 세그먼트 크기가 가변적이기 때문에 세그먼트 영역이 다른 세그먼트 영역을 침범하지 않는 기억장치 보호키가 필요하다.

paging


페이지 교체 알고리즘

  • 페이지 부재가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재하는 데 어떤 프레임을 선택해 교체할 지 결정하는 기법

FIFO(First In First Out)

  • 가장 오래 있었던 페이지를 고체하는 기법이다.
  • 벨레이디의 모순 현상이 발생한다.(프레임 수가 늘어나면 페이지 부재 수가 줄어들지 않는 현상)
참조 페이지123412512345
Frame 1111444555555
Frame 2 22211111333
Frame 3  3332222244
페이지 부재OOOOOOO  OO 
  • 위 경우 페이지 부재가 총 9번 발생한다.
  • 하지만, Frame 개수가 4개로 늘어나도 페이지 부재는 10번으로 증가한다. => 벨레이디 모순 현상

LRU(Least Recently Used)

  • 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법
  • 계수기나 스택같은 별로 하드웨어가 필요하며 시간적인 오버헤드가 발생하고, 실제로 구현하기 어렵다.
참조 페이지23215235
Frame 122222222
Frame 2 3335555
Frame 3   11133
페이지 부재OO OO O 

LFU(Least Frequently Used)

  • 사용 빈도가 가장 적은 페이지를 교체하는 기법
  • 활발하게 사용되는 페이지는 사용 횟수가 많아 교체되지 않고 사용된다.
  • 초기에 많이 사용된 페이지가 그 후루도 사용되지 않을 경우 프레임을 계속 차지할 수 있다.
참조 페이지23131245
Frame 122222222
Frame 2 3333333
Frame 3  111111
Frame 4      45
페이지 부재OOO   OO

가상기억창치 관리

  1. 페이지 크기
    • 페이지 크기가 작을 경우
      • 페이지 단편화가 가모되고 볼필요한 내용이 주기억장치에 적재될 확률이 적다.
      • 페이지 정보를 가지는 페이지 맵 테이블 크기가 커지고 매핑 속도가 늦어진다.
      • 디스크 접근 횟수가 많아져 전체적인 입출력 시간이 증가한다.
    • 페이지 크기가 클 경우
      • 페이지 정보를 갖는 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다.
      • 디스크 접근 횟수가 줄어들어 전체적인 입출력 시간이 감소한다.
      • 페이지 단편화가 증가되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어난다.
  2. 구역성(Locality)
    • 어느 순간 특정 페이지만 집중적으로 참조하는 것
    • 시간 구역성
      • 하나의 페이지를 일정 시간 동안 집중적으로 엑세스하는 현상
      • 한번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높다.
    • 공간 구역성
      • 어느 하나의 페이지를 참조하면 그 근처의 페이지를 참조할 가능성이 높다.
      • 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상
  3. 워킹 셋(Working Set)
    • 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
    • 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 교체 현상이 줄어들어 사용이 안정화된다.
  4. 스레싱(Thrashing)
    • 프로세스 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
    • 어떤 프로세스가 실제로 사용하는 프레임 수만큼의 프레임을 갖지 못한 경우 발생
    • 방지 방법 : 다중 프로그래밍 정도 완화, Working Set 이용
    • cf) 다중 프로그래밍 정도 : 얼마나 많은 프로그램을 동시에 수행하는 정도

디스크 스케줄링

  • 사용할 데이터가 디스크 상의 여러 곳에 저장되어 있을 경우 디스크 헤드가 움직으는 경로를 결정하는 기법
  • 목적 : 처리량 최대화, 응답 시간 최소화, 응답 시간 편차의 최소화

FCFS(First Come First Service)

  • 디스크 대기 큐에 가장 먼저 들어온 트랙에 대한 요청을 먼저 서비스하는 기법
  • 더 높은 우선순위의 요청이 입력되어도 순사가 바뀌지 않아 공평성이 보장된다.
  • 디스크 오버헤드가 적을 때 효율적이며, 오버헤드가 커지면 응답 시간이 길어진다.
  • 디스크 대기 큐 : 53,98,183,37,122,14,124,65,67
  • 이동 순서 : 53 -> 98 -> 183 -> 37 -> 122 -> 14 -> 124 -> 65 -> 67

SSTF(Shortest Seek Time First)

  • 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법
  • 현재 헤드 위치에서 가장 가까운 거리에 있는 트랙으로 헤드를 이동한다.
  • 현재 헤드 위치에 가장 가까운 트랙에 대한 요청이 계속 발생하는 경우 먼 거리의 서비스는 무한정 기다리는 기아 상태가 발생할 수 있다.
  • 디스크 대기 큐 : 53,98,183,37,122,14,124,65,67
  • 이동 순서 : 53 -> 65 -> 67 -> 37 -> 14 -> 98 -> 122 -> 124 -> 183

SCAN

  • SSTF가 갖는 탐색 시간의 편차를 해소하기 위한 기법
  • 현재 헤드 위치에서 진행 방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스 후 역방향의 요청 사항을 서비스한다.
  • 오버헤드가 적을 경우 가장 효율적인 기법이다.
  • 디스크 대기 큐 : 53,98,183,37,122,14,124,65,67
  • 이동 순서 : 53 -> 65 -> 67 -> 98 -> 122 -> 124 -> 183 -> 199 -> 37 -> 14

C-SCAN(Circular SCAN)

  • 항상 바깥쪽에서 안쪽으로 한 방향으로만 움직이며 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법
  • 처음가 마지막을 인접시킨 것과 같은 원형 형태로 디스크를 처리한다.
  • 디스크 대기 큐 : 53,98,183,37,122,14,124,65,67
  • 이동 순서 : 53 -> 37 -> 14 -> 0 -> 199 -> 183 -> 124 -> 122 -> 98 -> 67 -> 65


반응형
반응형

프로세스 동기화 배경

  • 프로세스가 병행 또는 병렬로 실행될 때 여러 프로세스가 공유하는 데이터의 무결성이 유지되어야 한다.
  • 병행 프로세스는 다중 처리 시스템이나 분산 처리 시스템에서 중요 개념으로 사용

임계 구역

  • 임계구역 안에서는 공유 변수를 변경, 테이블 갱신, 파일 쓰기 등의 작업을 수행한다.
  • 임계구역에는 하나의 프로세스만 접근할 수 있으며, 해당 프로세스가 자원을 반납해야 다른 프로세스가 자원 및 데이터를 사용할 수 있다.
  • 한 프로세스가 자신의 임계구역에서 수행하는 동안에는 다른 프로세스들은 그들의 임계구역에 들어갈 수 없다.

임계구역 문제 해결 방법

  1. 상호 배제 기법
    • 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법
    • 두 개의 프로세스 기준 : 피터슨 알고리즘(두 프로세스가 두 개의 데이터 항목을 공유하여 자원을 사용하는 방법)
    • 여러 개의 프로세스 기준 : Lamport의 빵집 알고리즘(각 프로세스에 번호를 부여하여 자원을 사용하도록 하는 방볍)
  2. 진행
    • 자신의 임계구역에서 실행되는 프로세스가 없고 자신의 임계구역으로 진입하려는 프로세스가 있다면 잔류 구역에서 실행 중이지 않은 프로세스들만 임계영역에 진입 대상이 되고, 이 선택은 무한정 연기되지 않음!
  3. 한계 대기
    • 프로세스가 자기의 임계구역에 진입하려는 요청을 한 후로부터 요청이 허용될 때까지 다른 프로세스들이 임계영역에 그들 자신의 임계구역에 진입을 허용하는 횟수의 한계가 필요하다.

Mutex Lock(상호 배재)

mutex

  • Mutex가 지켜주는 덕에 화장실을 한명만 사용할 수 있다.
  • 즉, Mutex는 임계구역을 보호하고 프로세스간 경쟁을 방지하기 위해 사용
  • boolean available 변수를 사용 => 락의 가용 여부 표시
1
2
3
4
5
6
do {
    //Lock 획득
    임계구역
    //Lock 반환
    나머지 구역
} while(true);

세마포어(Semaphore)

  • Mutex와 유사하게 동작하지만 프로세스들이 자신들의 행동을 더 정교하게 동기화 할 수 있는 방법 제공
  • 각 프로세스에 제어신호를 전달하여 순차적으로 진행하기 위한 동기화 구현
  • 세마포 S = 정수 변수, wait(s)와 signal(s)로만 접근이 가능하다. S = 0인 경우 모든 자원이 사용 중을 의미
1
2
3
4
5
6
//wait(S) => 상호배재 보장
//임계구역에 진입하기 전에 확인
if (S <= 0) //누군가 사용하고 있다면
    S 양수가  때까지 현재 프로세스를 list에서 기다림
else    //임계 구역에 진입이 가능하다면
    S = S - 1;
1
2
3
4
5
6
//Signal(S) => 진행 보장
//임계구역을 떠날 때 실행
if (자원 반환전에 list에서 기다리는 프로세스가 있다면)
      한개 프로세스를 임계 구역 진입
else     //list에서 기다리는 프로세스가 없다면
    S = S + 1;

Mutex와 세마포어의 차이

Mutex(상호 배재)

  • Critical Section을 가진 쓰레드들의 Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술
  • Mutex 객체를 두 쓰레드가 동시에 사용할 수 없다. (1개의 쓰레드만 Critical Section에 접근 가능하도록 하는 기술)
  • cf) Critical Section : 각 프로세스에서 공유데이터를 엑세스하는 프로그램 코드부분

세마포어(Semaphore)

  • 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것
  • 만약, 화장실 칸이 4개라면 4개의 프로세스는 사용 가능하고, 나머지 프로세스는 대기해야 한다.

고전적인 동기화 문제

  1. 생산자-소비자 문제
    • 생산자가 데이터를 생산하여 입력된 경우에만 접근하도록 구성하는 방식
    • 생산자는 꽉찬 버퍼를 생산하고 소비자는 비어있는 버퍼를 생산한다.
  2. 읽기-쓰기 문제
    • 두 Reader가 동시에 공유 데이터를 접근하는 것은 허용하나, 동시에 Writer를 허용하지 않는 방식
    • Writer보다 Reader 요청이 많은 경우 병행성을 높일 수 있다.
  3. 식사하는 철학자 문제
    • 5명의 철학자들은 생각하고 먹는 일을 수행(철학자 : 프로세스, 젓가락 : 자원)
    1. 철학자는 양쪽의 젓가락을 사용하여 식사를 하고, 식사를 마친 철학자는 젓가락을 내려놓고 다시 생각한다.
    2. 철학자는 2개의 젓가락을 손에 쥐어야 식사를 할 수 있고, 한 번에 하나씩 잡을 수 있다.
    3. 옆 사람이 식사중이면 젓가락 잡는 것을 대기한다.

5명의 철학자가 동시에 식사를 하게 되면 모두 왼쪽 포크만을 가지게 되고 오른쪽 포크를 대기하는 교착 상태(Deadlock)이 발생한다.

이를 방지하기 위한 방법은 대표적으로 3가지이다.

  1. 최대 4명의 철학자들만이 테이블에 앉을 수 있도록 한다. => 젓가락이 하나 남기 때문에 어떤 철학자는 식사가 가능하다.
  2. 한 철학자가 동시에 두개의 젓가락을 모두 집을 수 있을 때만 젓가락을 집도록 허용한다.(즉, 임계구역 안에서만 젓가락을 집어야 한다)
  3. 비대칭 해결안을 사용한다.(홀수 번 철학자는 왼쪽, 짝수 번 철학자는 오른쪽 젓가락부터 집는다)

교착상태(DeadLock)

  • 상호 배제에 의해 나타나는 문제점으로 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상

예방 기법

  • 상호 배재 부정 : 한 번에 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
  • 점유 및 대기 부정 : 프로세스가 실행되기 전 필요한 모든 자원을 할당해 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.
  • 비선점 부정 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구 자원을 사용하기 위해 기다리게 한다.
  • 환형 대기 부정 : 자원을 선형 순서로 분류해 고유 번호를 할당하고, 각 프로세스는 현재 점유한 고유 번호보다 앞이나 뒤 한쪽 방향으로만 자원을 요구하도록 한다.

회피 기법(Dijkstra 제안한 은행원 알고리즘)

  • 안정 상태 : 모든 프로세스가 교착상태를 일으키지 않으면서 각 프로세스가 요구한 최대 요구량만큼 필요한 자원을 할당해 줄 수 있는 상태
  • 불안정 상태 : 교착상태의 필수 조건으로 교착상태가 발생할 수 있는 상태

은행원 알고리즘 : 안전상태를 유지할 수 있는 요구만을 수락하고 불안전 상태를 초래할 사용자의 요구는 나중에 만족될 수 있을 때까지 계속 거절하는 알고리즘

  1. 각 프로세스마다 할당할 수 있는 최대 자원을 계산한다.
  2. 각 프로세스마다 자원을 할당한 후에도 안전 상태를 유지할 수 있는지 확인하고 자원을 할당한다.
  3. 추가적인 자원을 할당해도 안전 상태를 유지할 수 있다면 자원을 할당할 수 있다. 하지만 불안전상태가 된다면 교착상태가 되므로 거절한다.
  • Available : 각 종류별로 가용한 자원의 개수, Available[i] = k 라면 R[i] 를 K개 사용할 수 있다는 뜻
  • Max : 각 프로세스가 최대로 필요로 하는 자원의 개수, Max[i,j] = k 라면 Process[i]가 R[j]를 K개까지 요청할 수 있다는 뜻
  • Allocation : 각 프로세스에게 현재 나가있는 자원의 개수, Allocation[i,j] = k 라면 현재 Process[i]가 R[j]를 K개 사용 중이라는 뜻
  • Need : 각 프로세스가 향후 요청할 수 있는 자원의 개수, Need[i,j] = k라면 Process[i]가 향후 R[j]를 K개 요청할 수 있다는 뜻
    • Need = Max - Allocation

자원 요청 알고리즘

  1. 만약 Request[i] <= Need[i] 이면 2단계로 이동, 아니면 시스템에 있는 개수보다 더 많이 요청했기 때문에 오류로 처리
  2. 만약 Request[i] <= Available[i] 이면 3단꼐로 이동, 아니면 요청한 자원이 지금 없으므로 Process[i]는 기다려야 한다.
  3. Process[i]에게 할당한 것처럼 시스템 상태정보를 바꿔 본다.
    • Available = Available - Request[i]
    • Allocation[i] = Allocation[i] + Request[i]
    • Need[i] = Need[i] - Request[i]
  4. 만약, 이렇게 바뀐 상태가 안전하다면 Process[i]에게 자원을 할당한다. 그렇지 않다면 상태를 원상태로 되돌리고 Request[i]가 만족될 때까지 기다린다.

예를 통해 알아보자. 프로세스 P와 A 자원 10개, B 자원 5개, C 자원 7개가 있을 때 다음과 같은 예시가 있다고 가정하자.

Process Allocation  Max  Need 
TypeABCABCABC
P[0]010753743
P[1]200322122
P[2]302902600
P[3]211222011
P[4]002433431

Need 값은 Max - Allocation 으로 구할 수 있으며 이 경우 남은 자원 수는 다음과 같다.

 Available 
ABC
10 - (0+2+3+2+0) = 35 - (1+0+0+1+0) = 37 - (0+0+2+1+2) = 2

여기서 P[1]이 A 자원 1개와 C 자원 2개를 추가로 요청한다고 가정해보자. 이 때의 Request[1] = (1,0,2) 가 된다.

  1. Request[i] <= Need[i]를 검사한다. (1,0,2) <= (1,2,2)이므로 조건을 만족한다.
  2. Request[i] <= Available[i]를 검사한다. (1,0,2) <= (3,3,2) 이므로 조건을 만족한다.
  3. Process[i]에게 할당한 것처럼 시스템 상태정보를 바꿔 본다.
    • Available[1] = Available[1] (3,3,2) - Request[1] (1,0,2) = (2,3,0)
    • Allocation[1] = Allocation[1] (2,0,0) + Request[1] (1,0,2) = (3,0,2)
    • Need[1] = Need[1] (1,2,2) - Request[1] (1,0,2) = (0,2,0)
  4. 위 상태는 안정 상태이므로 Process[1] 의 요청을 즉시 들어줄 수 있다.

위 예시에서는 <P[1], P[3], P[4], P[2], P[0]> 순서로 진행하면 안정 순서열이 된다.

반응형
반응형

운영체제란?

  • 제한된 컴퓨터 각종 자원을 효율적으로 관리하여 사용자에게 편리한 환경을 제공하는 소프트웨어

운영체제 목적

  • 처리 능력 : 일정 시간 내에 시스템이 처리하는 일의 양
  • 반환 시간 : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 소요되는 시간
  • 사용 가능도 : 시스템 사용할 필요가 있을 때 즉시 가용 가능한 정도
  • 신뢰도 : 시스템이 주어진 문제를 정확하게 해결하는 정도

운영체제 기능

  • 프로세서 관리
  • 기억장치 관리
  • 프로세스 관리
  • 주변장치 관리
  • 파일 및 데이터 관리

프로세스

  • 현재 실행중이거나 곧 실행 가능한 PCB를 가진 프로그램
  • PCB(Process Control Block) : OS가 프로세스의 대한 중요한 정보를 저장하는 곳으로 각 프로세스가 생성될 때 고유 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.

memory

스레드(Thread)

  • 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위
  • 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스 역할 담당
  • 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.
  • 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.

CPU 스케줄링

  • 프로세스가 생성되어 실행될 때 필요한 시스템의 자원을 해당 프로세스에 할당하는 것
    • cf) 문맥 교환(Context Switching) : 하나의 프로세스에서 다른 프로세스로 전환할 때 실행하던 프로세스의 상태를 보관하고 새로운 프로세스 정보를 적재하여 실행을 준비하는 것
    • cf) 준비상태 큐(Ready Queue) : 주기억장치에 적재되어 있으면서 CPU에 의해 실행되기를 준비하는 프로세스들로 구성된 리스트

비선점 스케쥴링

  • 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케쥴링 기법
  • 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용한다.
  • 프로세스의 요구를 공정하게 처리할 수 있지만 중요한 작업이 중요하지 않은 작업을 기다리는 경우가 발생한다.

FCFS(First Come First Service)

  • 준비상태 큐에 먼저 도착한 순서대로 CPU에 할당하는 기법
  • 공평성은 유지되지만 중요한 작업이 중요하지 않은 작업을 기다리게 된다.

SJF(Short Job First)

  • 준비상태 큐에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 기법
  • 실행 시간이 긴 프로세스는 실행 시간이 짧은 프로세스에 할당 순위가 밀려 무한 연기(기아) 상태가 발생할 수 있다.

HRN(Hightest Response-ratio Next)

  • SJF 기법을 보완한 것으로 대기 중인 프로세스들의 대기시간과 실행시간을 고려하여 우선순위를 결정한다.
  • 우선순위 계산식 : (대기시간 + 수행시간) / 수행시간

선점 스케쥴링

  • 하나의 프로세스가 CPU를 할당받아 실행중일 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케쥴링 기법
  • 우선순위가 높은 프로세스를 빠르게 처리할 수 있지만 많은 Overhead를 초래한다.

Round Robin

  • 각 프로세스느 시간 할당량(Time Slice)만큼 CPU를 점유하고 실행이 완료되지 않으면 CPU를 반환하고 준비상태 큐의 가장 뒤로 배치
  • 문맥 교환(Context Switching) 효과를 고려하여 시간 할당량을 정한다.
  • 시간 할당량이 클수록 FCFS와 같아지고, 시간 할당량이 작을 수록 문맥 교환 및 오버헤드가 자주발생

SRT(Shortest Remaining Time)

  • SJF 기법을 선점 형태로 변경한 기법으로 프로세스들 중 남아있는 실행시간이 가장 짧은 프로세스를 다음 프로세스로 선택

다단계 큐 스케쥴링

  • 준비완료 큐를 다수의 별도의 큐로 분리하여 각 큐의 독자적인 스케쥴링에 따라 CPU를 할당받는 기법
  • 각각의 서로 다른 작업들이 다른 묶음으로 분리될 수 있을 때 사용한다.
  • 이전 작업이 실행 중이더라도 우선 순위가 높은 큐에 작업이 들어오면 CPU를 반환해야 한다.
    • cf) 우선순위 : 시스템 프로세스 > 대화형 프로세스 > 일괄처리 프로세스

다단계 피드백 큐 스케쥴링

  • 프로세스가 큐들 사이를 이동하는 것을 허용하는 기법이다.
  • 프로세스를 CPU 성격에 따라 구분하고 어떤 프로세스가 CPU 시간을 너무 많이 사용하면 한 단계 낮은 우선순위 준비큐로 강등된다.
  • 즉, 짧은 프로세스의 경우 FCFS 방식으로 신속하게 실행되고, 긴 프로세스는 낮은 단계의 준비단계 큐로 밀린다.
  • 낮은 우선순위 큐에서 너무 오래 대기하는 프로세스는 높은 우선순위 큐로 이동한다. (Aging 기법) -> 기아 상태 예방


반응형
반응형

트랜잭션

< 트랜잭션 정의 >

  • 한꺼번에 모두 수행되어야 할 일련의 연산들
  • 병행 제어 및 회복 작업시 처리되는 작업의 논리적 단위
  • 하나의 트랜잭션은 Commit / RollBack된다

< 트랜잭션 특징(ACID) >

  • 원자성(Automicity) : Do or Nothing, 트랜잭션 내의 모든 명령은 완벽히 수행되거나 전부가 취소되어야 한다.
  • 일관성(Consistency) : 트랜잭션 실행이 성공적으로 완료되면 일관성 있는 데이터베이스의 상태는 일관되어야 한다.
  • 독립성(Isolation) : 어느 하나의 트랜잭션 실행중에 다른 트랜잭션 연산이 끼어들 수 없다.
  • 지속성(Durability) : 완료된 트랜잭션은 시스템의 고장나도 영구적으로 반영되어야 한다.

  • Commit 연산 : 한개의 트랜잭션에 대한 작업이 성공적으로 끝났고, 데이터베이스가 일관된 상태에 있을 때 이 트랜잭션이 수행한 연산이 완료됨을 알려주는 연산
  • Rollback 연산 : 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 수행한 모든 연산을 Undo하는 연산이다.
    • Redo : 고장 발생 전, 트랜잭션이 완료 명령을 수행했다면 로그를 이용해 복원하고 Check Point 이후부터 다시 수행하는 방식
    • Undo : 고장 발생 전, 트랜잭션이 완료 명령을 수행하지 못했다면 DB에 반영된 갱신 사항을 처음까지 취소

병행제어 기법

< 병행제어의 목적 >

  • 데이터베이스 공유를 최대화한다.
  • 시스템 활용도를 최대화한다.
  • 데이터베이스 일관성을 유지한다.
  • 사용자 응답 시간을 최소화한다.

< 로킹(Locking) 기법 >

  • 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락되야 그 로킹 단위를 액세스 하는 기법
  • 로킹 단위 : 병행제어에서 한꺼번에 로킹할 수 있는 객체의 크기를 의미하며 로킹의 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아진다.
    • 로킹 단위가 크면 lock 개수가 적어 관리하기 쉽지만 병행성 수준이 낮아진다.
    • 로킹 단위가 작으면 lock 개수가 많아 관리하기는 복잡하지만 병행성 수준이 높아진다.
  • 데이터를 갱신할 때 잠금(Lock) → 실행(Execute) → 해제(Unlock)
  • 교착상태(Deadlock) : Lock상태가 오래 유지되어 다른 Transaction들이 더이상 진행하지 못하고 무한정 대기상태를 뜻한다

  • 공유 잠금(Shared-Lock) : 한 트랜잭션이 데이터 x에 lock-S 를 걸면 다른 트랜잭션은 데이터 x에 대해 read 가능 / write 불가능
  • 배타 잠금(Exclusive-Lock) : 한 트랜잭션이 데이터 x에 lock-X 를 걸면 다른 트랜잭션은 데이터 x에 대해 read 불가능 / write 불가능
 공유 잠금베타 잠금
공유 잠금접근 허용대기
배타 잠금대기대기

< 2-단계 잠금 규약(Two-Phase Lock Protocol) 기법 >

  • 트랜잭션 스케쥴의 직렬성을 보장하는 대표적인 기법
  • 확장 단계(Growing Phase)
    • Lock을 설정하는 단계, 해제 불가
    • 새로운 lock 연산만 수행할 수 있고 unlock 연산은 수행할 수 없는 단계
  • 축소 단계(Shirinking Phase)
    • Lock을 해제하는 단계, 잠금 불가
    • unlock 연산만 실행할 수 있고 일단 unlock 연산을 실행하면 lock 연산은 실행할 수 없는 단계
  • 장점 : 직렬성 보장 / 단점 : 교착 상태 예방 불가능

< 타임 스탬프(Time Stamp Ordering) 기법 >

  • 시스템에 도착한 순서대로 타임 스탬프를 부여하여, 순서대로 실행하도록 한다.
  • 교착 상태가 발생하지 않는다.

< 로킹 규약 >

  1. 트랜잭션 T가 read(x)나 write(x) 연산을 하려면 반드시 먼저 lock(x) 연산을 실행해야 한다.
  2. 트랜잭션 T가 실행한 lock(x)에 대해서는 T가 모든 실행을 종료하기 전에 반드시 unlock(x)을 실행시켜야 한다.
  3. 다른 트랜잭션에 의해 이미 x에 lock이 걸려있다면 다시 lock(x)를 실행할 수 없다.
  4. 트랜잭션 T가 lock(x)를 실행하지 않았다면 T가 unlock(x)를 실행할 수 없다.

무결성

  • 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것
    • 고유 무결성 : 릴레이션의 특정 속성에 대해서 각 튜플이 갖는 값들이 서로 달라야 한다.
    • 개체 무결성 : 릴레이션에서 기본키를 구성하는 속성은 NULL 값이나 중복값을 가질 수 없다.
    • 참조 무결성 : 외래키 값은 NULL 이거나 참조 릴레이션의 기본키 값과 동일해야 한다.
  • cf) 정확성 : 데이터베이스의 저장된 데이터 값과 현실 세계의 실제값이 일치하는 정도

보안

  • 데이터베이스의 일부분 또는 전체에 대해서 권한이 없는 사용자가 엑세스하는 것을 금지하기 위한 기술
  • 데이터베이스 사용자들은 일반적으로 서로 다른 객체에 대해 다른 접근 권리/권한을 갖게 된다.

< 암호화 기법 >

< 개인키 암호 방식 = 대칭형 암호 알고리즘 >

  • 동일한 키로 데이터 암호화/복호화 진행
  1. 수신자에게 키를 전달하는 방법
    • Key를 비대칭형 암호 알고리즘을 이용하여 암호화 시킨 후 전송
  2. 실제 Key를 전송하지 않고도 A와 B가 동일한 Key를 생성할 수 있도록 하는 Diffie-Hellman 알고리즘 사용

< 공개키 암호 방식 = 비대칭형 암호 알고리즘 >

  1. A는 공개키(public key)와 개인키(private key) 를 생성한다.
    • A의 공개키를 이용하여 암호화된 데이터는 A의 개인키로만 복호화가 가능하다.
    • A의 개인키를 이용하여 암호화된 데이터는 A의 공개키로만 복호화가 가능하다.
  2. A와 B는 각자의 공개키를 서로에게 알려준다.
    • A : 공개A키, 개인A키, 공개B키
    • B : 공개B키, 개인B키, 공개A키
  3. A는 B에게 데이터를 전송하기 위해 B의 공개B키를 이용하여 데이터를 암호화한 후 전송한다
  4. 암호화된 데이터는 개인B키를 가지고 있는 B만 해독할 수 있다.

< 권한 부여 기법 >

  • GRANT : 권한 부여 명령
    • GRANT 사용자 등급 TO 사용자 ID 리스트
  • REVOKE : 권한 취소 명령
    • REVOKE 사용자 등급 FROM 사용자 ID 리스트

분산 데이터베이스

< 분산 데이터베이스 정의 >

  • 논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 여러 개의 사이트에 분산되어 있는 데이터베이스
  • 장점 : 자료의 공유성 향상, 시스템 성능 향상, 신뢰성 및 가용성이 높다
  • 단점 : DBMS가 수행할 기능이 복잡, DB설계가 복잡, 소프트웨어 개발 비용이 증가


반응형
반응형

관계형 데이터페이스 구조

  • 릴레이션(Relation): 데이터베이스 테이블
  • 튜플(Tuple) : 릴레이션을 구성하는 각각의 행, 튜플의 수를 카디널리티라 부른다.
  • 속성(Attribute) : 데이터베이스를 구성하는 가장 작은 논리적 단위
  • 도메인(Domain) : 도메인은 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자들의 집합

< 릴레이션의 특징 >

  • 한 릴레이션에 포함된 튜플은 모두 다르다.
  • 튜플 사이의 순서가 없고 삽입/삭제 등으로 인해 시간에 따라 변한다.
  • 속성 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장한다.

관계형 데이터베이스 제약 조건

  • 후보키 : 기본키로 사용할 수 있는 속성, 모든 튜플에 대해서 유일성과 최소성을 만족한다.
    • 유일성 : 하나의 키 값으로 하나의 튜플을 유일하게 식별 가능해야 한다.
    • 최소성 : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성만으로만 구성되어야 한다.
  • 기본키 : 후보키중 선택한 주 키로 NULL 값을 가질 수 없다.
  • 대체키 : 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키를 말한다.
  • 외래키 : 관계를 맺고 있는 두 실레이션에서 한 릴레이션이 참조하고 있는 다른 릴레이션의 기본키와 같은 릴레이션의 속성을 말한다.
  • 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것
    • 개체 무결성 : 릴레이션에서 기본키를 구성하는 속성은 NULL 값이나 중복값을 가질 수 없다.
    • 참조 무결성 : 외래키 값은 NULL 이거나 참조 릴레이션의 기본키 값과 동일해야 한다.

관계 대수 및 관계 해석

< 관계 대수 >

  • 관계형 데이터베이스에서 원하는 정보와 어떻게 유도하는지 기술하는 절차적인 언어11st_result

< 관계 해석 >

  • 관계 데이터의 연산을 표현하는 방법으로 원하는 정보를 정의할 때는 계산 수식을 사용한다.
  • 원하는 정보가 무엇인지만 정의하는 비절차적 특징을 지닌다.
  • 튜플 관계해석과 도메인 관계해석이 있다.

정규화

< 정규화 목적 >

  • 종속성 이론을 이용하여 잘못 설계된 관계셩 스키마를 더 작은 속성의 세트로 쪼개 바람직한 스키마로 만들어 가는 과정
  • 데이터 구조의 안정성을 최대화해 중복성 및 종속성을 배제시키는 방법으로 사용한다.
  • 효과적인 검색 알고리즘을 생성하고 중복을 배제해 삽입/삭제/갱신 이상의 발생을 방지한다.
    • 삽입 이상 : 릴레이션에 데이터를 삽입할 때 의도와는 상관없는 원하지 않는 값들도 함께 삽입되는 현상
    • 삭제 이상 : 릴레이션에 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
    • 갱신 이상 : 릴레이션에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상

< 정규화 과정 >

  • 제 1정규형 : 다치가 존재하지 않는 릴레이션
  • 제 2정규형 : 부분 함수적 종속성 x (기본키가 기본키가 아닌 속성에 종속 관계를 가짐)
    • R(AB, C, D), A->C 일때 R1(A, C), R2(AB, D)
  • 제 3정규형 : 이행적 종속 관계 x (기본키가 아닌 속성이 다른 속성에 종속 관계를 가짐)
    • R(A,B, C, D), C->D 일때 R1(C, D), R2(AB, D)
  • BCNF : 3 정규형에서 결정자이며 후보키가 아닌것 제거
  • cf) 종속 관계 : ‘학번’에 따라 ‘이름’이 결정될 때 ‘이름’을 ‘학번’에 함수 종속적이라 하며 ‘학번->이름’으로 표기한다.

데이터베이스 언어

  • DDL(Data Definition Language)
    • DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용되는 언어
    • 외부 스키마 명세를 정의하고 논리적/물리적 데이터 구조 정의
    • CREATE, ALTER, DROP, RENAME 등의 명령어를 사용한다.
      • CREATE SCHEMA/DOMAIN/TABLE/INDEX 이름
      • ALTER TABLE 테이블이름 ADD/ALTER/DROP 속성이름
      • DROP SCHEMA/DOMAIN/TABLE/VIEW [CASCADE/RESCTRICTED]
  • DML(Data Manipulation Language)
    • 사용자가 데이터를 처리할 수 있게하는 도구로 사용자와 DBMS간의 인터페이스를 제공한다.
    • SELECT, INSERT, DELETE, UPDATE 등의 명령어를 사용한다.
    • SELCT ~ FROM ~ WHERE ~ GROUP BY ~ HAVING ~
    • INSERT ~ INTO ~ VALUES ~
    • DELETE ~ FROM ~ WHERE ~
    • UPDATE ~ SET ~ WHERE ~
  • DCL(Data Control Language)
    • 무결성, 보안 및 권한 제어, 회복 등을 하기 위한 언어다.
    • GRANT(권한 생성), REVOKE(권한 삭제)

뷰(VIEW)

  • 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 유도된 가상 테이블이다.
  • 물리적으로 저장장치에 존재하지 않지만 있는 것처럼 간주한다.
  • 기본 테이블과 같은 구조를 가지며 조작도 기본 테이블과 거의 같다.
  • 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
  • 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블을 기초로 정의된 다른 뷰도 삭제된다.

  • 장점 : 접근 제어를 통한 자동 보안과 사용자 데이터를 간단하게 해준다.
  • 단점 : ALTER VIEW로 정의를 변경할 수 없다. 삽입/삭제/갱신 연산에 제약이 따른다.

시스템 카탈로그 (=데이터 사전)

  • 시스템 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스이다.
  • 데이터 객체에 대한 정의나 명세에 관한 정보를 유지/관리하는 시스템 테이블이다.
  • 데이터 정의어의 결과로 구성되는 기본 테이블, 뷰, 인덱스, 접근 권한 등의 데이터베이스 구조 및 통계 정보를 저장한다.
  • 카탈로그는 DBMS가 스스로 생성하고 유지한다.
  • 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용을 검색할 수 있다.
  • INSERT/DELETE/UPDATE 문으로 카탈로그를 갱신하는 것은 허용되지 않는다.


반응형