"소프트웨어 세상을 여는 컴퓨터 과학" 책 - by 영진닷컴
- 이 책은 추천을 받아서 학습한 책이며
- 이후 공유하고자 핵심 내용들을 정리해보았습니다.
- 아래 내용들을 "이미" 알고 계시는 분들은 이번 내용으로 복습한다 생각하시고 훑고나서 다른 책을 읽는 것을 추천드립니다.
TABLE OF CONTENTS 목차
- 1장 컴퓨터 과학 소개
- 2장 데이터 표현과 디지털 논리
- 3장 컴퓨터 구조
- 4장 운영체제
- 5장 프로그래밍 언어
- 6장 자료구조
- 7장 알고리즘
- 8장 데이터베이스
- 9장 네트워크와 인터넷
- 10장 보안과 암호화
CHAPTER 1 컴퓨터 과학 소개
section 1 컴퓨터의 개요
컴퓨터의 기능과 구성
- 입력 기능 : 처리할 데이터를 컴퓨터로 입력한다.
- 기억 기능 : 입력 데이터, 처리 결과 프로그램 등을 기억한다
- 연산 기능 : 사칙 연산, 논리 연산 등을 수행한다.
- 제어기능 : 명령을 해독하고 각 장치를 통제한다.
- 출력기능 : 프린터, 모니터 등...
- 컴퓨터는 하드웨어와 소프트웨어 로 구성된다.
하드웨어
하드웨어의 구성
- 중앙처리장치
- 기억장치
- 주기억장치 : 램
- 보조기억장치 : 하드디스크 SSD USB 메모리
- 광디스크
- 입력장치
- 출력장치
입력장치를 통해 외부 데이터를 입력받아 중앙처리장치에서 명령을 실행하고 기억장치에서 필요한 데이터를 저장한다. 그리고 출력장치에서 출력된다.
중앙처리장치 = Central Processing Unit
- CPU는 명령어를 해독하고 실행하는 장치로 사람의 두뇌 에 해당한다.
- 하나의 칩으로 된 중앙처리장치를 마이크로프로세서라 하는데 대표적인 제품으로 인텔사의 코어가 있다.
- 구성
- 제어장치
- CPU 에서 발생하는 모든 작업을 통제하고 관리.
- 프로그램 명ㅇ령을 해석하고, 해섣ㄱ된 명령에 따라 다른장치의 동작을 제어한다.
- 연산장치
- 제어장치의 신호에 따라 산술연산과 논리연산 등을 수행한다.
- 레지스터 집합으로
- CPU에서 명령어를 실행하는 동안 피룡한 정보를 저장하는 기억장치이다. 구성된다.
- 제어장치
기억장치
- 기억장치는 실행 중인 프로그램과 프로그램에 필요한 데이터를 저장하는 장치다.
- 우수한 기억장치는 가격으 ㄴ최소이면서 용량은 크고 접근 시간은 빠른 것이다.
- 하지만 이런 조건을 모두 만족하기란 쉽지 않다.
- 빠른 속도와 큰 용량을 만족하려면 비용이 많이들고, 비용을 최소화하려면 속도와 용량이 만족스럽지 못하다.
만족스러운 기억장치 조건
- 낮은 비용 + 큰 용량 + 빠른 속도
- 이러한 조건을 모두 만족시킬 방법은
- 용량은 작고 비싸지만 속도가빠른 기억장치와 느리지만 용량이 큰 값 싼 기억장치를 함께 사용하는 것이다.
- 즉, 기억장치를 계층화하여
- 중앙처리장치가 당장 필요로 하는 프로그램과 데이터는 빠른 속도의 레지스터, 캐시 기억장치, 주기억장치에 저장해놓고 이용하고,
- 중앙처리장치가 현재 필요로 하지 않는 많은 양의 프로그램과 데이터는 보조기억장치에 저장해놓고 이용하는 것이다.
기억장치의 계층구조
- 레지스터 > 캐시기억장치 > 주 기억장치 > 보조기억장치
보조기억장치
- 프로그램과 데이터를 영구적으로 저장하는 장치다.
- 중앙처리장치에서 요청이 오면 저장하고 있던 프로그램과 데이터를 주기억장치로 전송한다.
- 대표적인 보조기억장치로 하드디스크, SSD, USB 메모리, 광 디스크 등이 있다.
주기억장치
- 실행 중인 프로그램과 실행에 필요한 데이터를 저장하는 장치로 램과 롬이 있다.
- RAM : Random access moemry
- 실행중인 프로그램과 실행에 필요한 데이터를 일시적으로 저장한다.
- 전원을 차단하면 기억된 내용이 모두 지워지는 휘발성 메모리다.
- ROM : Read Only Memory
- 부팅할 때 동작하는 바이오스 프로그램을 저장한다.
- 전원을 차단해도 기억된 내용이 지워지지 않는 비휘발성 메모리다.
캐시 기억장치
- 주기억장치의 접근시관과 중앙처리장치와의 속도 차이를 줄이기 위해 사용되는 기억장치다.
- 중앙처리 장치가 자주 필요로 하는 프로그램의 일부와 데이터를 저장한다.
- 캐시기억장치를 이용하면 중앙ㅇ처리 장치가 주기억장치까지 접근하지 않아도 되므로 명령어 처리 속도가 향상된다.
- 캐시기억장치는 램과 마찬가지로 휘발성 메모리다.
입출력장치
- 입력장치는 문자, 그림, 소리, 동영상 등과 같은 외부의 데이터를 컴퓨터로 읽어들이는 일을 한다.
- 대표적인 입력장치로 키보드, 마우스, 태블릿, 스캐너, 조이스틱 등이 있다. 출력장치는 컴퓨터에서 처리한 결과를 사람이 이해할 수 있는 형태로 변환하는 일을한다.
- 대표적인 출력장치로 모니터 프린터 스피커 등이 있다.
소프트웨어
- 소프트웨어는 시스템 소프트웨어와 응용 소프트웨어로 분류된다.
- 시스템 소프트웨어 하드웨어 자원을 효율적으로 관리하고 사용자가 컴퓨터를 보다 쉽게 사용할 수 있도록 도와주는 역할을 한다.
- 대표적인 시스템 소프트웨어로 운영체제, 언어 번역 프로그램, 유틸리티 프로그램이 있다.
운영체제
- 윈도우, 리눅스, 유닉스, 모바일 운영체제(iOS, 안드로이드)
언어 번역 프로그램
- 어셈블러 : 어셈블리 언어로 작성된 프로그램을 번역
- 컴파일러 : 고급 언어로 작성된 프로그램을 한꺼번에 번역 후 실행
- 인터프리터 : 고급언어로 작성된 프로그램을 한 줄씩 번역하여 즉시 실행
유틸리티 프로그램
- 운영체제의 기능을 보완해서 사용자가 컴퓨터를 편리하게 사용할 수 있도록 도와준다.
- 시스템 관리 프로그램, 텍스트 편집기, 백신 프로그램 등이 있다.
응용 소프트웨어
- 워드프로세서 : 문서 작성, 편집, 인쇄 등의 기능을 수행하는 프로그램으로 한글, 워드 등이 있다.
- 스프레드시트 : 수식을 쉽게 계산해주고 통계 처리 등의 기능을 수행하는 프로그램으로 엑셀, 구글 스프레드시트 등이 있다.
- 프레젠테이션 : 도표, 도형, 애니메이션 효과 등을 이용하여 발표 자료를 쉽게 만드는 프로그램.
section 2 컴퓨터 과학
- 컴퓨터 과학은 컴퓨터를 개발하고 사용하는 데 기반이 되는 이론, 실험, 기술 등을 연구하는 학문 분야다.
- 컴퓨터 과학기술은 이러한 컴퓨터 과학을 실생활에 적용한 모든 응용 기술을 말한다. 컴퓨터 과학 기술의 발달로 다양한 컴퓨팅 기기 및 서비스들이 개발되고 있다.
요약
- 컴퓨터의 기능
- 입력 기능 : 처리할 데이터를 컴퓨터로 입력
- 기억 기능 : 입력 데이터, 처리결과 프로그램등을 기억
- 연산 기능 : 사칙 연산, 논리연산 등을 수행한다.
- 제어 기능 : 명령을 해독하고 각 장치를 통제한다.
- 출력 기능 : 처리 결과를 사람이 원하는 형태로 출력한다.
- 컴퓨터의 구성
- 하드웨어 : 컴퓨터를 구성하는 기계 장치로 소프트웨어가 지시한 일을 수행한다.
- 소프트웨어 : 하드웨어의 동작을 지시하고 제어하는 역할을 하는 프로그램과 프로그램에 필요한 데이터를 말한다.
- 하드웨어의 구성
- 하드웨어는 중앙처리장치, 기억장치, 입력장치, 출력장치로 구서오딘다.
- 입력장치를 통해 외부의 데이터를 입력 받아 중앙처리장치에서 명령을 실행하고 기억장치에서 필요한 데이터를 저장한다.
- 이렇게 처리된 결과는 출력장치를 통해 출력된다.
- 소프트웨어의 분류
- 소프트웨어는 시스템 소포트웨어와 응용 소프트웨어로 나뉜다.
- 시스템 소프트웨어는 하드웨어 자원을 효율적으로 관리하고 사용자가 컴퓨터를 보다 쉽게 사용할 수 있도록 도와주고,
- 응용 소프트웨어는 사용자가 필요로 하는 특정 업무를 수행할 수 있도록 도와준다.
- 컴퓨터 과학
- 컴퓨터 과학은 컴퓨터를 개발하고 사용하는 데 기반이 되는 이론, 실험, 기술 등을 연구하는 학문 분야다.
- 컴퓨터 구조, 운영체제, 네트워크, 데이터베이스, 알고리즘, 자료구조, 프로그래밍 등의 분야가 있고 각 분야별로 이론적 토대를 갖추며 발전하고 있다.
CHAPTER 2 데이터 표현과 디지털 논리
컴퓨터의 정보 표현 방식
- 컴퓨터는 모든 정보를 2진수 형식으로 표현한다.
- 2진수의 개념은 모든 전기적인 장치의 on/off 와 맞는 개념이다.
- 하나의 0 또는 1을 비트 라고 하고 8비트는 1바이트가 된다.
- 문자표현 문자, 숫자, 구두점 특수문자 등의 문자들을 컴퓨터 내부에서 표현할 때는 미리 약속한 코드 체계를 사용 대표적인 것이 아스키 코드와 유니코드가 있다
- 아스키 코드 각 문자를 7 비트로 표현 최대 표현할 수 있는 문자 수는 128개다. 유니코드 다양한 나라의 언어를 표현하기 위한 코드 체계
CHAPTER 3 컴퓨터의 구조
section 1 컴퓨터 시스템의 구성
컴퓨터 시스템의 구성 요소
- 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성된다.
- 하드웨어는 컴퓨터 시스템을 구성하는 기계 장치로, 소프트웨어가 명령을 내리면 작업을 수행한다.
- 소프트웨어는 하드웨어에 동작을 지시하고 제어하는 역할을 하는 프로그램과 프로그램에 필요한 데이터를 말한다.
하드웨어의 구성
- 중앙처리장치 : 프로그램을 실행하고 입력된 데이터를 처리한다.
- 주기억장치 : 실행 중인 프로그램과 프로그램 실행에 필요한 데이터를 일시적으로 저장한다.
- 보조기억장치 : 프로그램과 데이터를 영구히 저장한다.
- 입출력장치 : 중앙처리장치나 주기억장치에 데이터를 입력하거나 출력한다.
프로그램을 실행했을 때 하드웨어의 역할
- 보조기억장치에서 프로그램을 주기억장치에 전송한다.
- 주기억장치에서 중앙처리장치로 하나씩 전송하며 실행한다.
중앙처리장치
- 프로그램 명령어를 해독하여 실행하는 일을 한다.
- 크게 제어장치, 연산장치, 레지스터 집합의 세 부분으로 구성 되는데,
- 주기억장치를 비롯한 다른 장치들과는 버스로 연결된다.
- 제어장치
- 프로그램 명령어를 해독하고, 의미에 따라 연산 장치, 주기억장치, 입출력장치 등에 동작을 지시.
- 연산장치
- 제어장치에 지시에 따라 연산을 수행한다.
- 산술연과 논리연산을 수행한다.
- 레지스터
- 중앙처리장치에서 명령어를 실행하는 동안 필요한 정보를 저장하는 기억장소로, 다양한 종류의 레지스터가 있다.
- 레지스터의 갯수와 크기는 중앙처리장치의 종류에 따라 차이가 있다.
- 중앙처리장치는 다음과 같은 세 단계로 구성된 일련의 동작을 반복함으로써 명령어를 실행한다.
- 한 명령어의 실행이 끝나면 다음 명령어에 대한 인출 단계를 시작한다.
주기억장치
- 현재 실행중인 프로그램과 프로그램 실행에 필요한 데이터를 일시적으로 저장한다.
- 전체 기억 공간은 바이트 단위로 분할되어 있으며 분할 공간마다 주소가 할당되어있다.
- 주기억장치의 동작은 크게 읽기와 쓰기로 나눌 수 있다.
- '쓰기'는 중앙처리장치가 주기억장치에 데이터를 저장하는 것이고,
- '읽기'는 주기억장치에 저장된 데이터를 중앙처리장치가 읽는 것이다.
- 두 동작에 대해 살펴보기 전에 버스의 종류부터 살펴보자.
- 제어버스
- 주소버스
- 데이터버스
section 2 컴터 시스템의 동작 과정
부팅
- 전원을 켜서 사용가능하도록 준비하는 과정
부팅 순서
- 바이오스 실행
- 그래픽 카드를 초기화 하고
- 주기억장치, 디스크 드라이브, 키보드 등의 하드웨어 장치의 상태를 검사한다.
- 검사 결과에 이상이있으면 오류메시지 출력 후 동작을 멈추고
- 이상이 없스면 보조기억장치의 부트섹터에 저장된 부팅 프로그램을 주기억장치로 이동시킨다.
- 부팅 프로그램 실행
- 부팅 프로그램이 주기억장치에 올라오면 바이오스는 종료되고
- 중앙처리장치가 부팅, 프로그램을 실행한다.
- 시스템 제어권을 넘겨받은 부팅 프로그램은 보조기억장치에서 운영체제를 찾아 주기억장치로 이동시킨다.
- 운영체제실행
- 중앙처리장치가 운영체제의 첫 번째 명령어를 읽어와서 실행한다.
- 그 이후부터는 운영체제가 컴퓨터 시스템의 동작을 제어한다.
section 3 프로그램 명령어
명령어의 기본 형식과 종류
- 중앙처리장치는 프로그램을 구성하고 있는 명령어를 하나씩 읽어와 실행한다.
- 중앙처리장치가 인식할 수 있는 명령어의 형식과 종류는 중앙처리장치에 따라 차이가 있다.
- 그러므로 프로그램은 해당 중앙처리장치가 인식할 수 있는 명령어로 작성되어야 한다.
- 일반적으로 프로그램 명령어는 연산 코드와 피연산자로 이루어진다.
연산코드
- 중앙처리장치가 실행해야 할 동작을 나타내는 부분이다.
- 더하기 곱하기 AND OR 등의 내용이 온다.
피연산자
- 동작에 필요한 값 또는 저장 공간을 나타내는 부분이다.
- 피연산자의 갯수는 중앙처리장치에 따라 차이가 있다.
중앙처리장치가 제공하는 명령어
- 데이터 전송 명령어
- 레지스터 또는 주기억장치의 데이터를 레지스터 또는 주기억장치로 이동한다.
- 연산 명령어
- 더하기, 빼기, 곱하기, 나누기 등의 산술 연산
- AND, OR, NOT, XOR 등의 논리 연산, 레지스터에 저장된 비트를 이동시키는 시프트를 수행한다.
- 분기 명령어
- 다음에 실행될 명령어를 지정한다.
요약
- 하드웨어의 구성
- 중앙처리장치 : 프로그램을 실행하고 입력된 데이터를 처리한다.
- 주기억장치 : 실행중인 프로그램과 프로그램 실행에 필요한 데이터를 일시적으로 저장한다.
- 보조기억장치 : 프로그램과 데이터를 영구히 저장한다.
- 입출력장치 : 중앙처리장치나 주기억장치에 데이터를 입력하거나 출력한다.
- 시스템 버스의 종류
- 제어버스 : 쓰기 또는 읽기 동작을 결정하는 제어 정보가 전송된다.
- 주소 버스 : 주기억장치의 주소가 전송된다.
- 데이터 버스 : 데이터가 전송된다.
- 명령어 처리 단계
- 인출단계 : 주기억장치에 저장된 명령어 하나를 읽어온다.
- 해독 단계 : 읽어 온 명령어를 제어 정보로 해독한다.
- 실행 단계 : 해독된 명령을 실행한다.
- 명령어의 형식
- 프로그램 명령어는 연산코드와 피연산자로 이루어진다.
- 연산 코드는 중앙처리장치가 실행해야 할 동작을 나타내고
- 피연산자는 동작에 필요한 값 또는 저장 공간(레지스터 또는 주기억장치의 주소)을 나타낸다.
- 명령어의 분류
- 데이터 전송 명령어 : 레지스터 또는 주 기억장치의 데이터를 레지스터 또는 주기억장치로 이동한다.
- 연산 명령어 :
- 더하기 빼기, 곱하기, 나누기 등의 산술 연산과
- AND, OR, NOT, XOR 등의 논리 연산,
- 레지스터에 저장된 비트를 이동시키는 시프트를 수행한다.
- 분기 명령어 : 다음에 실행될 명령어를 실행한다.
CHAPTER 4 운영체제
section 1 운영체제의 개요
1 운영체제의 개념
- 운영체제는 하드위어의 각 장치를 관리하고 사용자가 컴퓨터를 편리하게 사용할 수 잇는 환경을 제공하는 시스템 소프트웨어다.
- 보통 컴퓨터를 켜면 자동으로 실행되는데 윈도우, 리눅스 맥OS 등이 있다.
2 운영체제의 기능
- 사용자 인터페이스
- 사용자와 컴퓨터 간의 상호작용
- 컴퓨터 시스템 자원 관리
- 중앙처리 장치, 주기억장치 보조기억장치, 프로그램, 파일 등의 자원을 관리한다.
- 예를들어
- 보조기억장치에 저장된 프로그램을 실행하려면 먼저 주기억장치의 빈 영역에 프로그램을 저장해야 한다.
- 중앙처리장치는 주기억장치에 저장된 프로그램과 데이터만 처리할 수 있기 때문이다.
- 운영체제는 주기억장치의 어느 영역이 비어 있는지 확인한 후 보조기억장치에 저장된 프로그램을 주기억장치의 빈곳에 저장한다.
- 즉, 주기억장치라는 자원을 관리한다.
- 운영체제는 중앙처리장치도 관리한다.
- 중앙처리장치는 한 순간에 하나의 프로그램만 실행할 수 있으므로 이때 운영체제가 어떤 프로그램을 실행할지 결정한다.
section 2 프로세스 관리
1 프로세스의 개념
- 대부분의 프로그램은 보조기억장치에 저장되어 있다가 실행 명령을 받으면 주기억장치로 올라가 중앙처리장치에 의해 실행된다.
- 프로세스란 실행되기 위해 주기억장치로 올라간 프로그램을 말한다.
- 즉, 실행중인 프로그램이라고 정의할 수 있다.
- 프로그램이 보조기억장치에 저장되어 아무런 일도 못하는 수동적인 존재라면 프로세스는 주기억장치에 있으면서 하드웨어를 동작시키는 능동적인 존재다.
- 프로세스에는 프로그램 코드뿐만 아니라 실행에 필요한 다양한 정보가 포함되어 있다.
2 프로세스 제어 블록
- 프로세스에 대한 정보를 저장하는 장소
- 임의의 프로세스가 생성되면 프로세스의 정보를 저장하는 새로운 프로세스 제어 블록이 생성되고, 프로세스가 종료될때 같이 사라진다.
- 운영체제는 프로세스 제어 블록에 저장된 내용을 통해 프로세스르 관리한다.
- 프로세스 제어 블록은 다음과 같은 정보를 담고있다.
- 프로세스 상태 : 실행상태, 준비상태 등의 현재 상태를 나타낸다.
- 주소 레지스터값 : 중앙처리장치의 '주소 레지스터'라는 레지스터에 저장된 값 다음에 실행될 명령어의 주기억장치 주소를 저장한다.
- 스케줄링 정보 : 다음에 실행될 프로세스를 결정하는 데 필요한 정보로 프로세스 스케줄링 정책, 우선순위 등을 저장한다.
- 주기억장치 정보 : 해당 프로세스가 주 기억장치의 어느 영역에 위치해 있는지를 나타낸다.
3 프로세스 상태
- 생성 / 준비 / 실행 / 대기 /종료
- 하나의 프로세스가 오랫동안 실행될 경우 운영체제가 실행중인 프로세스를 대기상태로 변경하고 다음 프로세스를 실행시킨다.
4 프로세스 스케줄링
- 한 번에 여러개의 프로세스를 실행하여 중앙처리장치의 이용률을 최대화 하는 개념을 다중 프로그래밍이라고 한다.
- 다중프로그래밍 환경
- 실행 상태에 있던 프로세스가 종료되거나
- 다른 이벤트가 발생하기를 기다리기 위해 대기 상태가 될 경우
- 다음에 실행할 새로운 프로세스를 선정해 실행 상태로 바꾼다.
- 다중 프로그래밍 환경에서 다음에 어떤 프로세스를 실행할지 결정하는 것.
- 운영체제가 사용하는 기법에 따라 달라진다.
프로세스 스케줄링의 대표적인 기법
4-1 FCFS 스케줄링 First come first serve
- 가장 간단한 스케줄링 기법으로, 단어의 뜻에서 알 수 있듯이 먼저 도착한 프로세스를 먼저 서비스(실행)한다.
4-2 라운드 로빈 스케줄링 Round Robin
- 임의의 프로세스가 종료될 때까지 중앙처리장치를 차지하는 것이 아니라 여러 프로세스들이 CPU 중앙처리장치를 조금씩 돌아가면서 차지하는 방식
- 리눅스를 포함한 대부분의 시스템이 이 방식을 사용하고 있다.
- 라운드 로빈에서 프로세스들은 시간 할당량 time quantum 동안 중앙처리장치를 할당받아 실행된다.
- 만약 이 시간 동안 실행을 종료하지 못하면 운영체제에 의해 준비 상태로 쫓겨나고, 준비 큐의 다음 프로세스가 중앙처리장치를 할당받아 실행된다.
- 예를들어 프로세스 1이 실행되다 시간 할당량이 끝나 준비상태로 쫓겨나고 프로세스 2가 CPU를 할당받아 실행된다.
- 여기에서 중앙처리장치를 할당받는 프로세스가 1에서 2로 전환하는 과정에서 문맥전환이 이루어지는데, context switching이 진행되는 동안에는 중앙처리장치가 아무런 일을 하지 못한다.
- 따라서 잦은 문맥 전환은 중앙처리장치의 이용률을 저하시킨다.
4-2 우선순위 스케줄링
- 말 그대로 가장 높은 우선순위의 프로세스에 먼저 중앙처리장치를 할당하는 방식이다.
- 프로세스 간의 우선순위가 같은 경우 FCFS 스케줄링 기법을 적용한다.
- 프로세스의 우선순위는 프로세스 실행자의 권한 또는 프로세스의 종요성에 의해 결정되며 PCB에 저장된다.
- 문제점 우선순위 스케줄링은 프로세스가 오랬동안 실행되지 않는다는 뜻의 에이징이 발생할 수 있다.
- 이에 대한 해결책으로 일정 시간이 지나면 프로세스의 우선순위를 한 단계씩 높이는 방법이다.
- 결국 아무리 낮은 우선순위의 프로세스라도 어느 정도 시간이 지나면 적절한 우선순위를 갖게 되어 실행된다.
section 3 주기억장치 관리
- 주기억장치는 현재 실행 중인 프로그램과 이 프로그램이 필요로 하는 데이터를 일시적으로 저장하는 장치다.
- 운영체제
- 현재 사용되고 있는 주 기억장치 영역과 사용되지 않고 있는 영역에 대한 정보를 유지하면서
- 주기억장치가 필요한 프로세스에 주기억장치를 할당하고,
- 프로세스가 종료되면 사용했던 주기억장치 영역을 회수하는 방식으로 주기억장치를 관리한다.
1 단순한 구조의 주기억장치
- 단순한 구조의 주기억장치 관리기법으로 단일 연속 주기억장치 관리 기법과 분할 기억장치 관리 기법이 있다.
1.1. 단일 연속 주기억장치 관리
- 운영체제외의 하나의 사용자 프로그램만 저장한다.
- 이를 단일 프로그래밍 방식이라고 한다.
1.2. 분할 주기억장치 관리
- 현재 컴퓨터 시스템은 단일 프로그래밍 방식이 아니라 다중 프로그래밍 방식으로, 여러 개의 프로세스를 주기억장치에 저장한 후 실행시킨다.
- 분할 주기억장치 관리 기법에서 프로세스 할당 방식
- 최초적합 : 가장 먼저 할당 가능한 곳에 할당
- 최적적합 : 프로세스와 가장 근사한 크기를 가진 영역에 할당
- 최악적합 : 프로세스보다 가장 큰영역에 할당
2 가상메모리
2-1 가상 메모리의 개념
- 가상메모리라는 메모리의 물리적 주소를 매핑한 주소를 만드는 방법.
- 실제 크기보다 큰 영역을 점유할 수 있게 한다.
2-2 페이징
- 프로그램을 일정한 크기 페이지로 나누고 페이지 단위로 주기억장치에 올리며 동작하는 것을 페이징 이라고 한다.
- 페이징은 가상 메모리를 구현하는 한 방법으로, 가상 메모리 공간을 일정한 크기의 페이지로 나누어 관리한다.
- 이때 실제 주기억장치의 페이지에 해당하는 부분을 페이지 프레임이라고 한다.
- 페이지 테이블 운영체제는 프로세스마다 각 페이지가 주 기억장치의 어느 프레임에 저장되는지 나타내는 테이블을 관리하는데, 이를 페이지 테이블이라고 한다.
2-3 페이지 교체 알고리즘
- 새로운 페이지를 주기억장치에 저장할 때 비어 있는 페이지 프레임이 없으면 새로운 페이지를 저장하기 위해 주기억장치에서 제거할 페이지를 결정해야하고 이를 페이지 교체라고 한다.
- 알고리즘
- FIFO first in first out
- LRU least recently used
- LFU least frequently used
section 4 파일 관리
1 파일 시스템의 이해
- 프로그램은 파일 읽기와 쓰기를 운영체제에 요청하고 운영체제가 읽기 쓰기를 담당한다.
- 파일을 관리하는 운영체제 부분을 파일 시스템이라고 한다.
- 종류는 FAT, NTFS, UFS, ext2 등 다양한 종류가 있다.
2 윈도우 파일시스템
3 유닉스 파일시스템
3-1 유닉스 파일 시스템의 구조
유닉스 시스템의 디스크의 논리적 구성
- 부트 블록 : 운영체제를 주기억장치에 올리는 역할을 하는 프로그램이 저장된 영역, 윈도우의 부트레코드와 유사하다.
- 수퍼블록 : 디스크에 대한 다양한 정보를 저장하는 곳
- 전체 블록 수
- 블록의 크기
- 사용 중인 블록의 수
- 사용할 수 있는 블록의 번호
- inode 리스트의 크기
- 사용할 수 있는 inode의 번호 등의 정보를 저장한다.
- inode list : inode들을 모아놓는 곳 한 블록에 여러 개의 inode를 저장하고 있다.
- 데이터 블록 : 일반적인 파일과 디렉토리 그리고 간접블록을 저장
3-2 유닉스(리눅스) 파일
- 시스템의 동작 과정 유닉스에서 파일 정보를 디렉토리에 저장하는 과정을 윈도우에서 파일에 대한 정보를 디렉토리에 저장하는 것과는 차이가 있다.
요약
- 운영체제의 개념
- 운영체제는 하드웨어 자원을 관리하며 시스템 및 응용 프로그램의 실행에 도움을 제공한다.
- 또한 사용자와 하드웨어 사이에서 중재자 역할을 수행한다.
- 운영체제의 기능
- 사용자 인터페이스 제공 :사용자에게 복잡한 하드웨어가 아닌 쉽게 이용할 수 있는 컴퓨터 환경을 제공한다.
- 컴퓨터 시스템 자원 관리 : 중앙처리장치, 주기억장치, 보조기억장치, 프로그램, 파일 등 다양한 자원을 관리한다.
- 프로세스의 정의
- 프로세스는 실행중인 프로그램이라고 정의할 수 있다.
- 프로세스에는 프로그램 코드 뿐만아니라 실행에 필요한 다양한 정보가 포함되어 있다.
- 프로세스 상태
- 생성 - 준비 - 실행 - 종료 - 대기
- 프로세스 스케줄링 기법
- FCFS 스케줄링 : 먼저 도착한 프로세스를 먼저 서비스 한다.
- 라운드 로빈 스케줄링 : 여러 프로세스들이 중앙처리장치를 조금씩 돌아가며 할당받아 실행되도록 한다.
- 우선순위 스케줄링 : 가장 높은 우선순위의 프로세스 먼저 서비스(실행)한다.
- 운영체제의 주기억장치 관리
- 운영체제는 현재 사용되고 있는 주기억장치 영역과 그러지 않은 영역에 대한 정보를 유지하면서
- 주기억장치를 필요로 하는 프로세스에 할당하고,
- 프로세스가 종료되면 사용했던 주기억장치 영역을 회수하는 방법으로 주기억장치를 관리한다.
- 주기억장치 관리 기법
- 단일 연속 주기억장치 관리 : 주기억장치에 운영체제 외에 하나의 사용자 프로그램만 저장하는 관리 기법이다.
- 분할 주기억장치 관리 : 주기억장치를 n개의 영역으로 분할하여 각 영역에 서로 다른 프로세스를 동시에 저장하는 관리기법
- 가상 메모리 구현 : 당장 실행에 필요한 부분만 주기억장치에 저장하고, 나머지는 보조기억장치에 두고 동작하도록 하는 개념이다.
- 페이징
- 가상 메모리를 구현하는 한 방법으로, 가상 메모리 공간을 일정한 크기의 페이지로 나누어 관리한다.
- 페이지 교체
- 새로운 페이지를 주기억장치에 저장할 때 비어 있는 프레임이 없으면 새로운 페이지를 저장하기 위해 주기억장치에서 제거할 페이지를 결정해야 한다.
- 이처럼 제거할 페이지를 결정하는 동작을 페이지 교체라고 하는데
- FIFO(firstinfirstout)
- LRU (Least recently used)
- LFU (least frequently used) 등의 알고리즘이 있다.
- 파일 시스템
- 파일 저장을 포함해서 파일을 관리하는 운영체제 부분을 파일 시스템이라 한다.
- 파일 시스템에는 FAT, NTFS, UFS, ext2 등 다양한 종류가 있다.
CHAPTER 06 자료구조
- 자료구조란? 데이터를 효율적으로 이용하기 위한 저장 방법
section 1 자료구조의 개요
- 대표적인 자료구조
- 배열
- 연결
- 리스트
- 스택
- 큐
- 그래프
- 트리
section 2 배열과 연결리스트
선형 리스트
- 어떤 순서에 의해 데이터가 여러개인 구조를 말한다.
배열
- 같은 자료형의 데이터를 순서대로 나열한 구조
- 배열의 삽입과 삭제동작에는 데이터를 옮기는 시간이 필요하다.
- 따라서 삽입과 삭제를 자주할 경우 배열로 구현하는 것보다 다음에 설명할 연결 리스트를 사용하는 것이 바람직하다.
연결리스트
- 각 데이터들을 포인터로 연결하여 관리하는 구조
- 연결리스트에서는 노드라는 새로운 개념이 나오는데, 각 노드는 데이터를 저장하는 데이터 영역과 다음 데이터가 저장된 노드를 가리키는 포인터 영역으로 구성된다.
- 각 노드들은 주기억장치의 어느 위치에 저장되든 상관없고, 단지 각 노드들이 포인터에 의해 연결되어 있기만 하면 된다.
2-1 단순 연결 리스트
- 노드에 포인터 영역이 하나인 연결 리스트로, 단순하여 가장 많이 사용된다.
- 참고로 연결리스트의 삽입과 삭제 동작은 배열과 달리 데이터가 이동하지 않는다.
- 원형연결리스트는 마지막 노드의 포인터 영역이 첫 번째 노드를 가리킨다.
2-2 이중 연결 리스트
- 각 노드에 다음 노드와 이전 노드를 가리키는 포인터 영역도 포함되어 있다.
section 3 스택과 큐
스택
- LIFO last in first out
- 높이 쌓이는 상자
- 마지막 올린 상자부터 꺼낼 수 있다.
큐는 FIFO
- First in first out
- 원형큐는 마지막 다음이 가장 처음의 아이템이다.
section 4 그래프
그래프의 주요 용어
- 각 노드들을 정점
- 정점들을 연결하는 선을 간선
- 정점에 접한 간선의 수를 차수
그래프의 분류
- 무방향 그래프
- 완전 그래프 무방향 그래프에서 모든 정점 사이에 간선이 있는 그래프. 최대 수의 간선을 가지는 무방향 그래프를 말한다.
- 무방향 그래프에서 간선마다 가중치를 부여한 그래프를 가중 그래프라 한다.
- 방향 그래프
- 방향성이 있는 간선으로 이루어진 그래프
- (v0, v1) 과 (v1, v0) 은 서로 다르다.
- 경로 중에서 처음과 마지막 정점이 같은 경로를 사이클이라 한다.
3 그래프의 탐색
- 깊이 우선 탐색 DFS : 스택 사용
- 너비 우선 탐색 BFS : 큐 사용
section 5 트리
1 트리 구조
- 계층 구조를 표현하기에 적합하다.
- 트리에서
- 하나의 단위를 노드
- 노드와 노드를 링크로 연걸하며
- 최상위 노드를 루트노드
- 최하위 노드를 리프노드
- 서브 트리에서 임의의 노드를 선택시 그 노드를 포함한 하위 노드들의 구조
- 부모 노드 임의의 노드 바로 위 자식노드
- 형제노드
- 레벨 / 방문한 깊이
- 깊이 / 최대 레벨
2 이진트리
- 자식 노드가 두개 이하인 트리
- 단말 노드를 제외한 모든 노드가 두 개의 자식 노드를 가지고 있는 트리를 완전 이진 트리라 한다.
- 완전 이진트리 중에서 다음과 같이 모든 노드가 채워진 이진 트리를 포화 이진 트리라 한다.
2- 1 이진 트리의 표현은 배열이나 연결리스트로 구현할 수 있다.
- 각 노드는 데이터 영역, 왼쪽 자식 포인터 영역, 오른쪽 자식 포인터 영역으로 구성된다.
2-2 이진 트리의 순회
- 이진 트리의 순회란 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것.
- 전위 / 중위/ 후위 가 있다.
- 전위 순회
- 루트 노드 > 왼쪽 서브트리 > 오른쪽 서브트리 순으로 방문
- 중위 순회
- 왼쪽 서브트리 > 루트노드 > 오른쪽서브 트리 순으로 방문
- 후위 순회
- 왼쪽 서브트리 > 오른쪽 서브트리 > 루트 노드 순으로 방문
3 이진 탐색 트리
- 이진 트리중에서 같은 데이터를 갖는 노드가 없으며
- 왼쪽 서브트리에 있는 모든 데이터가 현재 노드의 데이터보다 작고
- 오른쪽 서브트리에 있는 모든 데이터가 현재 노드의 데이터보다 큰 트리를 말한다.
- 데이터의 삽입, 삭제 검색 등이 자주 발생하는 경우에 효율적인 구조다.
요약
- 자료구조
- 프로그램에서 쉽게 이용할 수 있도록 구성된 데이터 간의 논리적인 관계를 말한다.
- 대표적인 자료구조로는 배열, 연결 리스트, 스택, 큐, 그래프, 트리 등이 있다.
- 배열과 연결리스트
- 배열은 같은 자료형의 데이터를 순서대로 나열한 구조
- 연결리스트는 각 데이터를 포인터로 연결하여 관리하는 구조
- 연결 리스트의 종류
- 단순 연결 리스트 : 각 노드의 포인터 영역이 다음 노드를 가리킨다.
- 이중 연결 리스트 : 각 노드에 다음 노드를 가리키는 포인터 영역뿐만 아니라 이전 노드를 가리키는 포인터 영역이 있다.
- 스택과 큐
- 스택
- 데이터의 삽입과 삭제가 한쪽 방향에서만 일어나는 구조
- 가장 나중에 삽입된 데이터가 가장 먼저 삭제되어 후입선출 구조라고 한다.
- 큐
- 데이터가 한쪽 방향으로 삽입되고 반대 방향으로 삭제되는 구조다.
- 가장 먼저 삽입된 데이터가 가장 먼저 삭제되어 선입 선출 구조라고도 한다.
- 스택
- 그래프
- 데이터 간의 관계를 점과 선으로 나타낸 구조
- 점은 데이터를 나타내고 선은 데이터간의 관계를 나타낸다.
- 트리
- 나무를 뒤집은 모습으로 계층을 표현하기에 적합한 구조다.
- 트리 중에서 모든 노드들이 자식 노드가 두개 이하인 트리를 이진 트리라고 한다
- 이진 트리의 순회
- 모든 노드를 특정한 순서대로 한 번씩 방문하는 것
- 순회하는 방법에는
- 전위 : 루트 왼쪽 오른쪽
- 중위 : 왼쪽 루트 오른쪽
- 후위 : 왼쪽 오른쪽 루트 가 있다.
- 이진 탐색 트리
- 이진 트리 중에서 같은 데이터를 갖는 노드가 없으며,
- 왼쪽 서브 트리에 있는 모든 데이터가 현재 노드의 데이터보다 작고,
- 오른쪽 서브 트리에 있는 모든 데이터가 현재 노드의 데이터보다 큰 트리를 말한다.
Chapster 7 : 알고리즘
정렬 알고리즘
- 데이터를 일정한 규칙에 따라 재배열 하는 것.
- 오름차순 정렬과 내림차순 정렬이 있다.
- 정렬 알고리즘의 종류
- 선택 정렬 : 정렬 되지 않은 데이터 중에서 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식
- 삽입 정렬 : 아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해가며 정렬하는 방식
- 버블 정렬 : 서로 이웃한 데이터들을 비교해 가장 큰 데이터를 맨 뒤로 보내며 정렬
- 퀵 정렬 :
- 기준키를 중심으로 작거나 같은 지닌 데이터는 앞으로,
- 큰값을 지닌 데이터는 뒤로 가도록하여
- 작은 값을 갖는 데이터와 큰 값을 갖는 데이터로 분리해가며 정렬하는 방법이다.
탐색 알고리즘
- 선형 탐색 : 순차적으로 비교하며 찾는 방법
- 이진 탐색 :
- 정렬된 데이터의 집합을 반으로 쪼개가며 찾는 방식
- 순서
- low 와 high 의 정중앙을 찾는다
- 중앙의 데이터가 탐색 대상보다 크면 왼쪽(low)
- 작으면 오른쪽 (high) 방향으로 이동한다.
요약
- 알고리즘
- 문제를 해결하기 위해 구성된 일련의 절차
- 알고리즘의 조건
- 0개 이상의 입력과 1개 이상의 출력이 있어야한다.
- 반드시 종료되어야 한다
- 모든 명령이 실행 가능해야 한다.
- 정렬 알고리즘
- 선택 정렬 : 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해 나가는 방식이다.
- 삽입 정렬 : 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해가며 정렬하는 방식이다.
- 버블 정렬 : 서로 이웃한 데이터를 비교해 가장 큰 데이터를 맨 뒤로 보내며 정렬하는 방식이다.
- 탐색 알고리즘
- 선형 탐색 : 주어진 데이터 집합에서 원하는 데이터를 처음부터 순차적으로 비교하며 찾는 방법이다.
- 이진 탐색 : 정렬된 데이터 집합을 반으로 쪼개가면서 탐색하는 방법이다.
- 재귀 알고리즘
- 피보나치 수열 : 처음 두 항은 1이고 세번째 항 부터는 바로 앞 두 항의 합이 되는 수를 나열한 것이다.
- 하노이 탑 : 가운데 기둥을 이용해서 왼쪽 기둥에 놓인 크기가 다른 원판을 오른쪽 기둥으로 옮기는 문제다.
- 퀵 정렬 :
- 기준키를 중심으로 작거나 같은 값을 지닌 데이터는 앞으로,
- 큰 값을 지닌 데이터를 뒤로 가도록 하여
- 작은 값을 갖는 데이터와 큰값을 갖는 데이터로 분리해가며 정렬하는 방법이다.
CHAPTER 8 데이터베이스
section 1 데이터 베이스의 개요
1 데이터 베이스의 개념
- 데이터 베이스란 어느 한 조직의 여러 응용 프로그램이 공유하는 관련 데이터의 모임이다.
- 예를들어 대학교에서 학교의 모든 정보를 가지고 있으면 학생 관리 프로그램이 학생 정보에 접근하고 교수 관리 프로그램이 교수 정보에 접근하는 등....
2 데이터베이스 관리 시스템
- 데이터베이스는 이를 사용하는 응용 프로그램에서 직접 조작하지 않고 별도의 소프트웨어를 통해 조작한다.
- 이러한 소프트웨어를 데이터베이스 관리 시스템(DBMS database management system) 이라고 한다.
- 데이터 베이스 관리 시스템의 역할 데이터베이스를 구축하는 틀을 구축한다.
- 데이터를 효율적으로 검색하고 저장할 수 있도록 한다.
- 각 응용 프로그램이 데이터베이스에 접근할 수 있도록 사용 환경(인터페이스)를 제공한다.
- 권한이 없는 사용자가 접근하거나 시스템에 장애가 생겼을 때 데이터를 안전하게 보호한다.
3 데이터 모델
- 데이터베이스를 구축할 때 체계화된 구조를 갖추는 것이 필요한데, 이러한 구조를 명시하는 개념을 데이터 모델이라고 한다.
- 데이터 모델은 데이터베이스의 구조뿐만 아니라 이런 구조에서도 허용되는 연산 그리고 이런 구조와 연산에 대한 제약 조건 등을 포함한다.
- 데이터 모델의 대표적인 종류
- 계층형 데이터 모델
- 네트워크형 데이터 모델
- 관계형 데이터 모델
- 객체 지향형 모델 (가장 많이 사용되는 것으로 아래로는 관계형 데이터베이스를 설명한다)
section 2 관계형 데이터베이스
1 관계형 데이터모델
- 테이블 형식으로 데이터를 정의하고 설명한 모델
- 관계형 데이터모델과 관련된 용어
- 속성 : 각 열에는 이름이 부여되는데 이를 속성이라고 한다
- 도메인 : 각 속성에는 입력 가능한 값들의 범위가 정해져있는데 이를 도메인이라고 한다. 예를 들어 성별 속성의 도메인은 남과 여 두가지가 있다.
- 차수 : 속성의 수를 말한다. column 의 수 라고도 생각할 수 있다.
- 튜플 : 각 행을 말한다.
- 카디널리티 : 행의 수를 의미한다.
- 릴레이션 : 테이블을 릴레이션이라고도 한다. 하나의 릴레이션에는 중복된 튜플이 있어서는 안되고 중복된 속성이 있어서도 안된다.
- 릴레이션에서는 중복된 튜플을 허용하지 않는다.
- 따라서 유일하게 식별가능한 속성의 집합이 필요한데 이를 '키'라고 한다.
- 키의 종류로는 후보키와 기본키가 있다.
- 후보키 : 튜플을 구분할 수있는 최소한의 속성만으로 구성된 키
- 기본키 : 후보키가 두개 이상인 경우 그중 하나로 선택된 키
2 관계형 데이터 연산
- 선택
- 하나의 릴레이션에서 주어진 조건을 만족하는 튜플을 검색하는 연산
- 선택연산에서는 AND OR NOT 과 같은 연산자를 이용할 수 있다.
- 추출 : 하나의 릴레이션에서 원하는 속성만 선택하는 연산
- 합집합 : 릴레이션에서 어느 한쪽에 있거나 양쪽에 있는 모든 튜플을 찾는 연산
- 교집합 : 두 릴레이션에서 공통적으로 포함된 튜플을 찾는 연산
- 차집합 : 한 릴레이션에는 있지만 다음 한 릴레이션에는 없는 튜플을 찾는 연산
- 카디션 곱 : 두 릴레이션의 튜플 간의 모든 조합을 취하는 연산
- 조인 : 두 릴레이션에서 특정 조건을 만족하는 튜플을 결합해 하나의 튜플로 만드는 연산
section 3 SQL
1 SQL 소개
SQL Structured QUery Language
- 데이터베이스를 구축하고 활용하기 위해 사용하는 언어.
- IBM 에서 개발했으며 관계혀 데이터베이스를 다루는 언어로 널리 사용되고 있다.
- SQL은 영어 문장과 유사하여 초보자들도 비교적 쉽게 사용할 수 있는데, 크게 데이터 정의어와 데이터 조작어로 나뉜다.
- 데이터 정의어 : 릴레이션을 생성, 삭제, 변경할 때 사용한다.
- 데이터 조작어 : 릴레이션에서 원하는 데이터를 검색, 삽입, 삭제, 갱신할 때 사용한다.
2 릴레이션 생성 CREATE TABLE 문을 사용한다.
CREATE TABLE 릴레이션이름 (
속성1 자료형1,
속성2 자료형2,
....
속성n 자료형n
)
3 릴레이션 삭제 DROP TABLE 릴레이션이름
4 릴레이션 변경 : 속성 추가
ALTER TABLE 릴레이션이름
ADD 속성이름 자료형
4 릴레이션 변경 : 속성삭제
ALTER TABLE 릴레이션이름
DROP 속성이름 자료형
5 검색
SELECT 속성리스트
FROM 릴레이션리스트
WHERE 조건
6 삽입
기본
INSERT INTO 릴레이션이름
VALUES(값1, 값2 .... 값n);
또는 명시적으로 순서를 지정하기
INSERT INTO 릴레이션이름 (속성1, 속성2... 속성n)
VALUES (값1, 값2.... 값n);
7 삭제
DELETE FROM 릴레이션
FROM 조건
8 갱신
UPDATE 릴레이션이름
SET 속성1=수식1, 속성2=수식2, 속성n= 수식n
WHERE 조건;
요약
- 데이터베이스
- 한 조직의 여러 응용 프로그램이 공유하는 데이터의 모임으로,
- 서로 관련 있는 데이터들을 하나로 통합하여 구축한 것이다.
- 데이터베이스 관리 시스템
- 여러 응용 프로그램이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공하는 소프트웨어다.
- 데이터베이스를 구축하는 틀을 제공할 뿐만 아니라
- 데이터를 효율적으로 검색하고 저장할 수 있도록 해주며,
- 권한이 없는 사용자가 접근하거나 시스템에 장애가 생겼을 때 데이터를 안전하게 보호환다.
- 데이터 모델
- 데이터베이스를 구축할 때 체계화된 구조를 갖추는 것이 필요한데, 이러한 구조를 명시하기 위한 개념을 데이터 모델이라 한다.
- 관계형 데이터 연산
- 선택 : 하나의 릴레이션에서 주어진 조건을 만족하는 튜플은 검색하는 연산 ( 선택연산에서는 AND OR NOT 과 같은 연산자를 이용할 수 있다. )
- 추출 : 하나의 릴레이션에서 원하는 속성만 선택하는 연산
- 합집합 : 두 릴레이션에서 어느 한쪽에 있거나 양쪽에 있는 모든 튜플을 찾는 연산
- 교집합 : 두 릴레이션에서 공통적으로 포함된 튜플을 찾는 연산
- 차집합 : 한 릴레이션에는 있지만 다음 한 릴레이션에는 없는 튜플을 찾는 연산
- 카디션 곱 : 두 릴레이션의 튜플 간의 모든 조합을 취하는 연산
- 조인 : 두 릴레이션에서 특정 조건을 만족하는 튜플을 결합해 하나의 튜플로 만드는 연산
- SQL
- 데이터를 구축하고 활용하기 위해 사용하는 언어다.
- IBM 에서 개발했으며 관계형 데이터 모델로 표현되는 데이터베이스를 다루는 언어로 널리 사용되고 있다.
- 영어 문장과 유사하므로 초보자들도 비교적 쉽게 사용할 수있다.
- 크게 데이터 정의어와 데이터 조작어로 나뉜다.
Chapter 9 : 네트워크와 인터넷, 인터넷에서 정보 전송과정
section 1 네트워크와 인터넷의 개요
1 네트워크의 개념
- 네트워크란 전송매체로 연결된 장치들의 모임
- 장치들은 컴퓨터, 스캐너, 모바일, 대형컴퓨터 등 모든 장치를 의미한다.
- 네트워크를 이용하면 멀리 떨어져 있는 장치끼리 정보를 주고받을 수 있어 편리하다.
2 네트워크의 분류
- 네트워크는 규모에 따라 근거리 통신망인 LAN과 원거리 통신망인 WAN으로 구분한다.
2-1 LAN Local Area Network
- 비교적 가까운 거리의 장치들을 연결.
- 일반적으로 하나의 사무실, 인접한 건물들.
- LAN은 연결 방식, 토폴로지에 따라 링형, 버스형 스타형으로 나뉜다.
- 링형
- 장치들이 원형으로 연결된 형식
- 링형을 따라 순환하는 토큰을 획득해야 데이터 전송가능.
- 데이터 전송시 토큰은 목적지에 다다를 때까지 원형으로 순환한다.
- 버스형
- 하나의 통신회선에 장치들이 연결된 형태
- 데이터를 목적지 주소와 함께 버스에 실어보내면 버스에 모든 장치에 전송되며 목적지와 일치하면 데이터를 받아들인다.
- 스타형
- 모든 장치들이 중앙에 위치한 장치에 연결되고, 데이터의 전달은 항상 이 중앙 장치를 통해 이루어진다.
2-2 WAN Wide Area Network
- WAN은 둘 이상의 LAN 이 넓은 지역에 걸쳐 연결되는 네트워크다.
- 일반적으로 지역과 지역, 국가와 국가를 연결한다.
- WAN 을 구성하기 위해서는 둘 이상의 LAN을 연결해야 하는데 이를 위해 라우터라는 장치가 필요하다.
- 라우터는 하나의 LAN 과 또 다른 네트워크를 연결하는 역할을 한다.
3 인터넷
- 네트워크 간 통신을 인터네트워킹이라고한다.
- 인터넷도 한 종류다.
4 인터넷 서비스
4-1 www 월드 와이드 웹
- 인터넷에서 정보를 쉽게 찾을 수 있도록 제공하는 서비스다.
- 줄여서 웹이라고 한다.
- 월드 와이드 웹은 하이퍼텍스트 방식을 이용하는데, 임의의 단어를 클릭하면 연결된 문서로 이동하여 원하는 정보를 손쉽게 찾을 수 있다.
- 하이퍼텍스트 방식의 웹페이지는 HTML 문서로 작성한다.
4-2 전자우편
- 인터넷을 통해 편지를 교환하는 서비스.
4-3 FTP
- 인터넷을 통해 파일을 송수신하는 서비스 큰 용량의 파일도 빠르게 주고 받을 수 있다.
4-4 telnet
- 원격지의 컴퓨터를 인터넷을 통해 접속하여 자신의 컴퓨터처럼 사용할 수 있는 원격 접속 서비스다.
section 2 인터넷 주소
- 인터넷으로 연결된 컴퓨터도 서로를 구분하기 위해 주소를 사용하는데, 이를 인터넷 주소라고 한다.
- 인터넷 주소는 IP 주소와 도메인 이름으로 구분한다.
1 IP 주소
- 인터넷에 연결된 여러 장치를 식별하는 번호로 네개의 10진수로 구분한다.
- 각 10진수는 1바이트, 즉 여덟 자리 2진수(비트)를 의미한다.
- IP 주소는 총 32비트로 구성 예 ) 218.237.64.1
- IP 주소는 네트워크 주소와 호스트 주소로 나뉜다.
- 네트워크 주소는 장치가 속해 있는 네트워크를 식별하는 데 사용하고, 호스트 주소는 해당 네트워크 내에서 그 장치를 식별하는 데 사용하낟.
- 한 네트워크에 포함된 모든 장치들은 같은 네트워크 주소를 가지며 모두 다른 호스트 주소를 가진다.
- ***여기서 한 네트워크의 의미는 라우터와 같이 네트워크와 네트워크를 연결하는 기기없이 장치들 사이에 통신이 이루어지는 범위를 말한다.
- 만약 장치 간에 통신을 하는데, 라우터와 같은 기기를 거쳐야 한다면 이는 한 네트워크에 있는 것이 아니다.
- 네트워크 주소와 호스트 주소의 구분은 IP 주소 체계인 클래스에 따라 달라진다.
2 클래스
- 32 비트 주소 체계는 A,B,C,D,E의 다섯 가지 클래스로 구분된다.
- D와 E 는 특수한 목적으로 사용되므로 생략
- 클래스 A
- 처음 8비트가 네트워크주소, 24개 비트가 호스트주서이다.
- 첫 비트가 0
- 주소 범위 0.0.0.0~127.255.255.255
- 클래스 B
- 처음 16비트가 네트워크 주소 나머지 16비트가 호스트주소
- 첫 2비트가 10
- 주소 범위 128.0.0.0 ~ 191.255.255.255
- 클래스 C
- 처음 24개 비트가 네트워크 주소, 8개 비트가 호스트주소
- 처음 3비트가 110
- 주소 범위 192.0.0.0 ~ 223.255.255.255
3 도메인 이름
- 도메인 이름이란 숫자 형태의 IP 주소를 기억하기 쉽게 하기 위해 부여된 이름이다.
- 도메인이름은 IP 주소와 도메인 이름의 관계를 관리해야만 하며 이것이 DNS Domain Name System이다.
- DNS
- 도메인 이름에 대한 IP 주소를 등록하고 있으면서, 도메인이름에 대한 IP 주소를 알려주거나 IP 주소에 대한 도메인이름을 알려주는 역할을 한다.
- DNS에 질의 하는 기기를 클라이언트
- 서비스를 제공하는 기기를 서버라고한다.
section 3 인터넷 통신 과정
1 전송
- 인터넷 애플리케이션은 먼저 전송할 데이터를 운영체제 내의 TCP/IP 소프트웨어에 전달하는데,
- 이때 데이터를 받을 PC 2의 IP 주소와 포트 번호도 함께 전달한다.
- IP 주소는 인터넷에 연결된 기기를 식별하는 번호고 포트번호는 수신측에서 동작하는 어플리케이션을 식별하는 번호다.
2 TCP/UDP 헤더 추가
- TCP 계층은 TCP transmission control protocol와 UDP User Datagram Protocol 두 프로토콜로 구분할 수 있다.
- TCP
- 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고,
- 송신측과 수신측이 연결이 이루어진 것을 확인한 다음에 데이터를 전송한다.
- 수신에 실패하면 데이터를 재전송한다.
- UDP
- 간단한 데이터를 빠른 속도로 전송하는 애플리케이션은 UDP를 사용한다.
- UDP는 송수신측의 연결 과정없이 일박적으로 데이터를 보내고 응답을 받지도 않는다.
2-1 TCP를 경유할 경우 (TCP 헤더 추가)
- TCP 는 애플리케이션으로부터 받은 데이터 앞에 TCP 헤더를 추가한 후 이를 IP로 보낸다.
- TCP 헤더의 크기는 20바이트로 다양한 정보들이 포함되어 있다.
- TCP 헤더의 정보 중 수신측의 포트번호는 애플리케이션에서 지정한 번호가 되고, 송신측의 포트번호는 미사용 중인 포트번호에서 임의로 골라 할당한다.
- 그리고 제어비트에는 SYN, ACK 등의 제어 정보가 오는데 SYN 비트를 1로 하면 연결을 요청하는 것이고 ACK 비트를 1로 하면 '연결에 동의'를 하는 것이다.
TCP는 데이터가 제대로 전송됐는지 확인하고 제대로 전송되지 않았다면 재전송한다고 했다. 이때 필요한 정보가 순서 번호와 인정 번호다. 송신측의 TCP 에서 데이터의 일련 번호인 순서 번호를 TCP 헤더에 포함시켜 데이터를 전송하면, 수신측에서는 수신한 데이터의 순서 번호에 받는 데이터의 크기를 더한 값을 인정번호로 하여 잘 받았다는 응답을 송신측에 보낸다.
2-2 UDP 를 경유할 경우
- UDP 역시 애플리케이션으로부터 받은 데이터 앞에 UDP 헤더를 추가해서 IP 로 보낸다.
- UDP 헤더의 크기는 8 바이트 이며 표 9-4와 같은 정보를 포함한다.
- 이는 TCP 헤더에 비해 단순한데, TCP는 데이터가 확실히 전달되었는지 확인하는 등의 일을 수행하기 위해 많은 정보가 포함되어잇기 때문이다.
3 IP 헤더 추가
- TCP 또는 UDP 로부터 받은 헤더가 추가된 데이터를 받은 IP 는 앞에 IP 헤더를 추가한다.
- *** IP 헤더에 포함된 정보를 표로 나타내는것은 생략
- IP 헤더의 크기는 20바이트로. 가장 중요한 정보라 할수 있는 수신측의 IP 주서는 애플리케이션에서 전달 받은 주소가 된다.
4 데이터를 보낼 다음 노드의 IP 주소 결정
- 전송한 데이터가 라우터를 거쳐 가려면 라우터의 주소를 알아야 하는데 이때 라우팅 테이블을 이용한다.
- 라우팅 테이블이란 데이터를 어디로 보낼지 나타낸 표를 말한다.
- 라우팅 테이블을 볼때는 최종 목적지 주소와 수신 네트워크를 비교해서 가장 적합한 행을 찾는다.
5 MAC 헤더 추가
- 라우팅 테이블을 이용해서 데이터를 보낼 상대의 IP 주소가 정해졌스면, 상대 네트워크 카드의 MAC 주소를 포함하고 있는 MAC 헤더를 추가한다.
- MAC Media Access Control
- MAC 주소란 모든 네트워크 카드에 부여된 유일한 번호로, LAN 사아에서의 실제 데이터 전송은 이 주소를 통해 이루어진다.
- 송신측의 주소는 자신의 네트워크 카드에 내장된 ROM 에서 쉽게 얻을 수있다.
- 수신측의 주소는 ARP (AddressResolutionProtocol)을 이용해 구한다.
- ARP 에서는 한 번 조회한 MAC 주소를 캐시에 두고 다음 통신부터 ARP 캐시를 보고 MAC 주소를 얻는다.
- 캐시는 일정시간 지나면 삭제된다.
6 라우터를 경유해 수신 LAN 라우터로 전송
- 이렇게 해서 완성된 메시지는(각종 헤더를 붙인 최종 전송 데이터) 네트워크 카드에서 전기신호로 변환된 후 라우터 인터페이스로 전송된다.
- IP는 IP 헤더의 수신자측 IP 주소를 보고 다음으로 보낼 곳을 정하는데, 앞에서 설명한 라우팅 테이블을 이용해서 정하는 방법과 유사하다.
7 수신 LAN 라우터에서 목적지로 전송
- 데이터를 받은 라우터는 IP 헤더의 수신자측 IP 주소를 보고 보낼 곳을 정해야 한다.
- 그리고 라우터와 목적지가 같은 LAN 상에 있으므로 전송하기 전에 MAC 헤더를 추가하는데, 앞에서와 마찬가지로 ARP를 이용해서 목적지의 MAC 주소를 구해 MAC 헤더를 추가한다.
8 최종 목적지 도착
- 데이터를 받은 PC 는 헤더의 수신자 MAC 주소임을 확인하여 문제가 없으면 MAC 헤더를 제거한다.
- IP 헤더의 수신측 IP 주소가 자신의 주소임을 확인하고 IP 헤더를 제거하고 TCP로 보낸다.
- 데이터를 받은 TCP는 잘 받았다는 ACK 신호를 (수신측에서 전송될때 같은 방법으로) 수신측 PC로 다시 전송한다.
- 만약 데이터가 분할하여 전송했다면 수신측 TCP 에서는 분할된 데이터를 모으는 일을 한다.
- 또한 분할된 데이터 중에 빠진 것이 있으면 수신측에 빠진 것을 다시 요청한다.
- TCP 헤더를 제거하고 TCP 헤더의 정보 중 하나인 수신측 포트 번호에 해당하는 애플리케이션으로 데이터를 전달하면 긴 전송 과정이 끝난다.
section 4 오류 검출
- 네트워크 시스템에서는 수신한 데이터에 오류가 있는지 판단하는 기능을 갖추고 있는데 이것이 바로 오류검출이다.
- 오류를 검출하는 방법으로는
- 데이터 중복 전송과
- 중복 정보 전송, 두 가지가 있다.
1 데이터 중복 전송
- 송신측에서 수신측으로 각 데이터를 두 번씩 보내는 방법이다.
- 그러면 수신측에서는 두 데이터를 비교해서 오류 여부를 판단한다.
- 단점으로는 시간이 많이들며 처리 할 데이터의 양이 많아진다.
2 중복 정보 전송
- 전송할 데이터에 대한 중복정보를(예를 들어 패리티 비트) 데이터와 함께 보내는 방법이다.
- 중복 정보를 이용해 오류를 검출하는 방법에는
- 수직 중복 검사
- 세로 중복 검사
- 순환 중복 검사 그리고
- 체크섬이 있다.
2-1 수직 중복 검사
- 가장 일반적 패리티 검사라고도 한다.
- 패리티 비트라는 중복 정보를 구해 데이터와 함게 수신측으로 전송한다.
- 패리티 비트는 짝수 패리티와 홀수 패리티로 나눌 수 있다.
2-2 세로 중복검사
- 수직 중복 검사에서도 발견하지 못하는 오류까지 검출할 확률이 높은 방법으로, 데이터를 행렬의 행태로 구성해 동작한다.
- 예를들어 24비트의 데이터를 전송하면 3행 8열의 행렬로 변환한 다음 같은 열에 대한 패리티 비트를 구한다.
- 이렇게 계산된 패리티 비트들이 중복 정보가된다.
2-3 순환 중복 검사
- 모듈로-2 연산을 기반으로 함.
- 가장 널리 사용되는 오류 검출 방법.
2-4 체크섬
- TCP 헤더와 UDP 헤더 등이 포함된다.
- 송신측에서 데이터에 대한 체크섬을 구해 헤더에 포함한다.
- 수신 측에서 체크섬을 검사해 오류를 확인한다.
요약
- 네트워크
- 전송 매체로 연결된 장치들의 집합
- 장치는 컴퓨터 프린터 스캐너, 서버 대형 컴퓨터 포함 데이터를 주고받을 수 있는 장치들을 말한다.
- 인터넷
- 전 세계의 수많은 컴퓨터를 연결한 네트워크 집합체로,
- 인터넷을 이용한 대표적인 서비스에는 월드 와이드 웹, 전자우편, FTP, 텔넷 등이 있다.
- IP 주소
- 인터넷에 연결된 여러 장치를 식별하는 번호로 '218.237.64.1' 과 같이 네 개의 10진수로 구성된다.
- 각 10 진수는 여덟자리 2진수를 의미 하며, 4개 이므로 총 32비트로 구성된다.
- 도메인 이름
- 숫자 형태의 IP 주소를 쉽게 기억하기 위해 부여된 이름
- 도메인 이름에 대한 IP 주소를 등록하고 있으면서 도메인 또는 IP 주소를 매핑해서 알려주는 시스템을 DNS 라고 한다.
- 인터넷 통신 과정
- 인터넷에 연결된 임의의 컴퓨터에서 다른 컴퓨터로 데이터를 전송하면 TCP/IP 소프트웨어를 통해 수신지로 전달된다.
- TCP와 UDP
- TCP 계층은 TCP 와 UDP 두 프로토콜로 구분된다.
- 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용한다.
- 간단한 데이터를 빠른 속도로 전송하는 애플리케이션에서는 UDP를 사용한다.
- 오류 검출
- 네트워크에서 오류를 검출하는 방법에는 데이터를 두번 보내는 방법과 중복 정보를 이용하는 방법이 있다.
- 특히 중복 정보를 이용해 오류를 검출하는 방법에는 수직 중복 검사, 세로 중복 검사, 순환 중복 검사 그리고 체크섬이 있다.
CHAPTER 10 보안과 암호화
1 암호화 기술
- 정보 보안이 취약해지는 것을 막기위해 암호화 기술을 사용한다.
- 신원 확인, 정보 비밀성 유지, 무결서 유지 등의 기능을 수행한다.
공개키 암호화 방식
- 최근 사용되는 대부분의 암호화 방식은 공개키 암호화 방식이다.
공개키 암호화 방식의 개념
- 비밀키 암호화 방식은 암호화키를 여러 사람이 공유하기 때문에 암호화키가 유출될 가능성이 높다.
- 공개키 암호화 방식에서는 공개키와 비밀키 두 개의 키를 사용한다.
- 공개키를 이용해서 암호화하고 비밀키를 이용해서 복호화한다.
- 암호문을 해독하려면 비밀 키를 알아야 한다.
DH 비밀키 교환 방식
- A 가 비밀키 교환 방식에 필요한 값을 정한다. 개인적인 값과 공개해도 좋은 값으로 나눈다.
- A 가 B 에게 공개 DH 값을 보낸다. ( 누출 가능성 있음 )
- B 는 공개 DH 값과 자신만의 개인적인 값을 이용해서 새로운 공개 DH 값과 암호화 키를 만든다.
- B 는 A 에게 공개 DH 값을 보내는데 이 값도 누출될 가능성이 있다.
- A 는 B 에게서 받은 공개 DH 값과 개인적이인 값을 이용해 암호화키를 만들어 낸다.
- 이 과정에서 주고받는 공개 DH 값이 누출되어도 제 3자가 암호화키를 생성할 수는 없다.
RSA 암호화 방식
- DH 암호화 방식을 기반으로 데이터를 공개키로 암호화하고 비밀키로만 복호 할 수있는 알고리즘을 고안해낸 것.
- 현재 디지털 서명 시스템은 RSA 알고리즘에 상당 부분 의존하고 있다.
RSA 암호화 동작원리
- 두 개의 큰 소수의 곱과 추가 연산을 통해 공개키와 비밀키를 구한다.
- 이 과정을 거쳐 키들이 생성되면 처음의 두 소수는 더 이상 중요하지 않으므로 버려도 무방하다.
- 공개키는 모두에게 공개되는 키이지만, 비밀키는 자신만이 가지고 있는 키로 남에게 공개되어서는 안된다.
- 비밀키는 공개키에 의해 암호화된 메시지를 복호화하는 데 사용된다.
RSA 암호화 순서
- A 는 B의 공개키를 받는다.
- A 는 누출가능한 B의 공개키를 이용해 보내고자 하는 메시지를 암호화해서 B에게 전송한다.
- B는 자신만의 비밀키를 이용해 메시지를 복호화한다.
- 암호문을 제3자가 가로챈다 하더라도 비밀키가 없으면 해독하지 못한다.
- 추가적으로 A 도 자신만의 비밀키를 사용해서 디지털 서명을 암호화하여 함께 전송한다.
- B는 A 의 공개키를 사용해 복호화하면 A가 보낸 메시지임을 더욱 확신시켜줄 수 있다.
- 즉, 발신자 도장을 찍어보내는 것이다.
요약
- 암호화 기술
- 인터넷 사용이 보편화됨에 따라 해킹, 바이러스 등의 사이버 범죄나 개인 정보 유출 등을 대비한 신원 확인, 정보 비밀성 유지, 무결성 유지 등의 기술이 필요하게 되었는데 이때 사용되는 기술이 암호화
기술이다.
- 인터넷 사용이 보편화됨에 따라 해킹, 바이러스 등의 사이버 범죄나 개인 정보 유출 등을 대비한 신원 확인, 정보 비밀성 유지, 무결성 유지 등의 기술이 필요하게 되었는데 이때 사용되는 기술이 암호화
- 비밀키 암호화 방식의 개념
- 하나의 암호화키를 사용해서 암호화하고 복호화 하는방식
- 비밀키 암호화 방식의 종류
- 시저 암호 : 알파벳을 왼쪽으로 세자리 이동해서 암호문을 생성
- 트리테미우스 암호 : 트리테미우스 암호표를 이용해 암호화를 하는데 이 암호표에 있는 알파벳은 줄이 바뀜에 따라 왼쪽으로 한 자리씩 이동하고 왼쪽에서 밀려난 알파벳은 오른쪽 끝으로 이동한다.
- 비게네르 암호 : 트리테미우스 암호를 한 단계 발전시킨 것으로, 트리테미우스 암호의 i 번째 문자에 i 번째 줄에 있는 암호문을 적용하는 규칙성을 벗어난 암호화 방법이다.
- 전치형 암호 : 원문의 문자 위치를 바꾸어 암호문을 생성하는 방법이다.
- 폴리비우스 암호 : 고대 그리스 시민이 폴리비우스가 만든 것으로 문자를 숫자로 바꾸어 표현하는 암호화 기법
- 공개키 암호화 방식의 개념
- 공개키를 이용해서 암호화하고 비밀키를 이용해서 복호화하는 방식이다
- 공개키 암호화 방식의 종류
- DH 비밀키 교환 방식 : 두 사용자가 직접 만나는 번거로움 없이 비밀키를 교환할 수 있는 방식
- RSA 암호화방식 : 공개키로 암호화하고 그와 다른 비밀키로 복호화하는 방식
마치며...
저는 김주혁이라고 합니다.
** URL을 클릭해서 이동하세요 **
- 🌱 Blog (Medium) : https://medium.com/@beanskobe
- 🌱 Blog (티스토리) : https://vince-kim.tistory.com/
- 📫 Portfolio (포트폴리오) : https://romantic-golick-a520aa.netlify.app
- 📫 Website (웹사이트) : https://romantic-golick-a520aa.netlify.app
- ✏️ LinkedIn (링크드인) : https://www.linkedin.com/in/joo-hyuk-kim/
- 🌎 Contact me : beanskobe@gmail.com
읽어주셔서 감사합니다!
'Books' 카테고리의 다른 글
[학습 후기 & 내용 정리] "토비의 스프링" - 이일민 (0) | 2021.10.20 |
---|---|
[ 전문서적 핵심정리 ] "자바의 신" vol2 책 - by 로드북 (0) | 2021.10.10 |
[ 전문서적 핵심정리 ] "자바의 신" vol1 책 - by 로드북 (0) | 2021.10.10 |
[ 전문서적 핵심정리 ] "실습과 그림으로 배우는 리눅스 구조" 책 - by 한빛미디어 (0) | 2021.10.10 |
[ 전문서적 핵심정리 ] "그림으로 배우는 네트워크 원리" 책 - by 영진닷컴 (0) | 2021.10.09 |