"컴퓨터과학"의 두 판 사이의 차이
107번째 줄: | 107번째 줄: | ||
* 〈[https://terms.naver.com/entry.naver?docId=850749&cid=42346&categoryId=42346 병렬 처리]〉, 《네이버 지식백과》 | * 〈[https://terms.naver.com/entry.naver?docId=850749&cid=42346&categoryId=42346 병렬 처리]〉, 《네이버 지식백과》 | ||
* 마팸, 〈[https://mafams.tistory.com/54 병렬 처리에 대해서]〉, 《티스토리》, 2017-08-18 | * 마팸, 〈[https://mafams.tistory.com/54 병렬 처리에 대해서]〉, 《티스토리》, 2017-08-18 | ||
− | + | * 〈[https://terms.naver.com/entry.naver?docId=849136&cid=42346&categoryId=42346 분산 처리]〉, 《네이버 지식백과》 | |
+ | * 장철원, 〈[https://losskatsu.github.io/os-kernel/dist-sys-concept01/# 분산 처리 시스템의 개념 이해(1)]〉, 《깃허브 블로그》, 2020-03-12 | ||
+ | * 〈[https://terms.naver.com/entry.naver?docId=2073343&cid=44414&categoryId=44414 컴퓨터구조]〉, 《네이버 지식백과》 | ||
+ | * IT양햄찌, 〈[https://jhnyang.tistory.com/16 운연체제(Operating System:OS)란?운영체제 종류]〉, 《티스토리》, 2019-01-23 | ||
+ | * wondong2, 〈[https://wondong2.tistory.com/11 1장 소프트웨어 공학의 개요]〉, 《티스토리》, 2017-02-06 | ||
+ | * 〈[https://terms.naver.com/entry.naver?docId=2073346&cid=44414&categoryId=44414 소프트웨어공학]〉, 《네이버 지식백과》 | ||
+ | * 〈[https://terms.naver.com/entry.naver?docId=1114230&cid=40942&categoryId=32837 소프트웨어공학]〉, 《네이버 지식백과》 | ||
+ | * 〈[https://terms.naver.com/entry.naver?docId=1166447&cid=40942&categoryId=32204 암호학]〉, 《네이버 지식백과》 | ||
+ | * 〈[https://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%95%99 암호학]〉, 《위키백과》 | ||
+ | * heecheolman, 〈[https://www.heecheolman.dev/post/%EC%95%94%ED%98%B8%ED%95%99/ 가볍게 배우는 암호학]〉, 《깃허브 블로그》, 2020-12-14 | ||
+ | * Yunnie, 〈[https://6u2ni.tistory.com/38 인공지능(Artificial Intelligence)의 유형]〉, 《티스토리》, 2021-03-07 | ||
+ | * 〈[https://namu.wiki/w/%EA%B0%95%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5 강인공지능]〉, 《나무위키》 | ||
+ | * 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B7%B8%EB%9E%98%ED%94%BD%EC%8A%A4 컴퓨터 그래픽스]〉, 《위키백과》 | ||
+ | * 〈[https://terms.naver.com/entry.naver?docId=1624925&cid=42171&categoryId=42188 컴퓨터그래픽스]〉, 《네이버 지식백과》 | ||
== 같이 보기 == | == 같이 보기 == |
2021년 8월 25일 (수) 16:29 판
컴퓨터과학(computer science)은 전산 이론, 하드웨어 및 소프트웨어에 중점을 둔 정보과학의 한 분야이다.
목차
개요
네덜란드의 유명한 수학자이자 컴퓨터 과학자인 에츠허르 비버 데이크스트라(Edsger Wybe Dijkstra)는 "천문학이 망원경에 대한 학문이 아닌 것처럼 컴퓨터과학은 컴퓨터에 대한 학문이 아니다" 라고도 말했다. 별을 보기위해 먼저 좋은 망원경을 만들고자 노력했던 시기에 좋은 망원경의 확보 여부는 연구에 끼치는 영향이 더 컸었지만, 망원경은 천문학을 돕는 도구이지 연구대상은 아니다. 이처럼 컴퓨터 역시 컴퓨터과학에서 도구이지 주된 연구 대상은 아니다. 컴퓨터과학은 컴퓨터기기(하드웨어)가 아닌 자동 연산장치에 의한 계산 및 정보의 연구와 관련한 학문을 분류한 학문이다. 주로 연산, 알고리즘, 컴퓨터 시스템 하드웨어, 소프트웨어 및 응용프로그램의 설계 이론을 연구하고 통신과 제어, 인지 능력과 데이터 베이스의 학습 등 만들어낸 자연정보 및 프로세스 일체를 취급한다. 컴퓨터 과학은 세부적으로 들어가면 실용적인 부분과 이론적인 부분으로 나눌 수 있다.[1][2]
분야
컴퓨터과학 이론
이산수학
이산수학이란 실수처럼 연속성이 있는 것들이 아니라 주로 정수, 논리 연산같이 서로의 값들이 연속적이지 않고 뚝뚝 떨어져 있거나 구분되어 셀 수 있는 것들을 주로 연구하므로 유한 수학이라고도 불린다. 이산적인 데이터를 취급하는 컴퓨터를 분석하기 위한 수학이다. 컴퓨터 소프트웨어와 관련된 이산수학의 내용은 집합, 명제 관계, 함수, 알고리즘, 그래프이론, 미분, 적분, 부울 대수, 확률 및 통계의 이론수학분야에서부터 부호이론, 암호이론, 선형계획법 등의 응용수학 분야까지 이산수학의 범주에 포함될 수 있다.[3] 이산적인 과정을 통해서 데이터를 저장하고, 동작하는 디지털 컴퓨터의 개발으로 인해 20세기 후반에 이산수학에 대한 연구가 점점 활기를 띄기 시작했다. 이산수학에 포함된 개념과 기호들은 컴퓨터 알고리즘, 프로그래밍 언어, 암호학, 자동 이론 증명, 소프트웨어 개발 등의 문제를 연구하는 데 유용하다.[4]
그래프 이론
그래프 이론은 수학에서 객체 간에 짝을 이루는 관계를 모델링하기 위해 사용되는 수학 구조인 그래프에 대한 연구이다. 그래프 이론에서 그래프는 꼭짓점(버텍스/vertex), 교점(노드/node), 점(포인트/point)으로 구성되며 이것들은 변(엣지/edge, 간선)으로 연결된다.[5] 컴퓨터 과학에서 그래프 이론은 자료 구조와 검색 알고리즘, 네트워크 모델링 등의 바탕이 되는 이론이다.[6] 자료구조에서 이론적으로 그래프는 리스트와 행렬 구조 중의 하나로 구별 가능하다. 하지만 실제 적용에 있어서 최적의 자료 구조는 이 두 구조의 조합된 형태를 띤다.[7]
정보 이론
정보 이론은 정보의 처리와 통신의 바탕이 되는 이론으로 정보량이나 정보원에 수학적인 정의를 부여하고 통신의 정보전송용량, 정보원에서 발생하는 통신문(메시지)의 능률적 부호화, 예측 등을 수학적인 입장에서 연구한 것이다.[8] 정보 이론의 기본적인 주제가 적용되는 기술로 ZIP 파일(무손실 데이터 압축), MP3 파일(손실 데이터 압축), DSL(채널 부호화), MIMO(채널 모델) 등이 있다.[9]
수리논리학
수리논리학은 논리학에서 사용하는 명제들을 수학적인 기호로 표시하는 학문이다. 일상 언어와 같은 자연언어의 사용에서 올수있는 복잡성과 오류의 용이성을 제거하고 명제를 효과적으로 쉽게 다룰 수 있도록 하기 위해 도입한 현대 논리학 이론으로서, 기호를 많이 사용하여 기호 논리학이라고도 한다.[10]
도메인 이론
도메인 이론은 수학에서 특별한 종류의 일반적으로 도메인이라 불리는 부분순서에 대하여 연구하는 분야이다. 컴퓨터 과학에서 표기 의미론을 특정지을 때 사용되며, 특히 함수형 프로그래밍 언어의 연구에서 주로 사용된다.[11]
확률론과 통계학
확률론은 확률에 대해 연구하는 수학의 한 분야이고, 통계학은 산술적 방법을 기초로 하여, 주로 다량의 데이터를 관찰하고 정리 및 분석하는 방법을 연구하는 수학의 한 분야이다. 통계학에서 정보화사회와 빅데이터 시대를 맞아 다양한 사회정보의 수집, 분석, 활용을 하고있다.[12][13]
계산 이론
어떤 문제를 컴퓨터로 풀 수 있는지, 계산 가능한 문제에 대해서는 얼마나 효율적으로 풀 수 있는지 계산을 하는 데 소요되는 시간과 필요한 기억량을 평가하는 이론이다. 이때 계산에 소요되는 시간과 필요한 기억량 등을 재는 척도를 일반적으로 계산량 또는 계산의 복잡함이라고 한다. 계산 이론을 위한 평가에는 튜링 머신이 모델로서 잘 쓰인다. 크게 계산 가능성 이론과 계산 복잡도 이론으로 나뉘어 있다.[14]
- 계산 가능성 이론
계산 가능성 이론의 기초는 가산 집합 상에서 함수의 해를 찾는 문제와 관련이 있다. 1930년대 불완전성 정리와 함께 람다 대수와 튜링 기계라는 계산 모형이 만들어지면서, 어떤 집합이 효율적으로 계산 가능한지의 문제는 실질적으로 그 집합을 효율적으로 계산해 내는 함수를 만들어 내는 것과 같은 일이 되었다. 계산 가능성 이론의 초기 성과는 이들 집합을 계산적으로 동치인 것들로 묶어 위계로 분류한 것이다. 수학적으로 유한히 정의된 함수를 계산 가능성에 따라 분류했을 때 어떤 함수의 계산 가능성 문제를 다른 함수(다른 함수들)의 문제로 환원할 수 있다는 것을 보임으로써, 굳이 알고리즘 자체를 증명에 끌어들이지 않고도 계산 가능성을 증명할 수 있는 것이다. 컴퓨터 과학의 핵심과제는 컴퓨터로 푸는 문제들을 이해하여 연산장치의 한계를 밝히는 것이다. 어떤 관점에서 문제가 어려운지를 판단해야 하는가? 특정한 문제가 컴퓨터로 풀기에 얼마나 난해한지를 어떻게 정의할 것인가? 이러한 물음에 답하는 것이 계산가능성 이론의 목적이다.[15]
- 계산 복잡도 이론
계산 복잡도 이론은 컴퓨터 과학에서 계산 이론의 분야로, 문제를 해결하는 특정한 알고리즘이 있을 때, 이 알고리즘이 문제를 얼마만큼 효율적으로 수행될 수 있는지를 연구하는 것이다. 이 때 알고리즘의 수행은 실제 컴퓨터가 할 수 있지만, 평가하는 데에는 튜링 기계와 관련이 있는 정량화된 방법을 사용한다. 알고리즘이 문제를 풀 때, 얼마만큼의 시간을 소모하는지를 측정하는 시간복잡도, 얼마만큼의 메모리를 사용하는지를 측정하는 공간복잡도 등을 통해 해당 알고리즘이 얼마나 효율적인지 기준을 세운다.[16]
컴퓨터의 실행
- 알고리즘과 자료 구조
- 알고리즘
알고리즘이란 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것으로, 넓게는 사람 손으로 해결하는 것, 컴퓨터로 해결하는 것, 수학적인 것, 비수학적인 것을 모두 포함한다.[17] 대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다. 좋은 알고리즘의 특성은 변하지 않는 명확한 작업 단계(정밀성), 각 단계마다 명확한 다음 단계(유일성), 구현할 수 있고 실용적(타당성), 특정 수의 작업 이후에 정지(유한성), 정의된 입력들에 일반적으로 적용(일반성)할 수 있어야 하고 정의된 입력을 받아들이고 답으로 출력을 내보낼 수 있어야 한다.[18]
- 자료구조
자료구조란 데이터에 편리하게 접근하고, 변경하기 위해서 데이터를 저장하거나 조직하는 방법을 말한다.[19] 자료의 특성과 크기, 주요 사용법과 수행하는 연산의 종류, 구현에 필요한 기억 공간 크기에 따라 여러 가지 종류의 자료구조 중 하나를 선택할 수 있다. 구현에 따라서는 배열, 튜플, 연결 리스트, 원형 연결 리스트, 이중 연결 리스트, 환형 이중 연결 리스트, 해시 테이블 등이 있고, 형태에 따라서는 크게 순차적으로 나열한 형태인 선형구조와 하나의 자료뒤에 여러개의 자료가 존재할 수 있는 형태인 비선형 구조로 나뉜다.[20] 먼저 선형 구조에는 스택, 큐, 환형 큐, 덱 등이있고, 비선형 구조에는 그래프, 유향/무향 그래프, 트리, 이진 트리, 힙 등이 있다.[21]
프로그래밍 언어와 컴파일러
프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어로, 고급 언어일수록 사람이 사용하는 언어에 가깝다. 프로그래밍언어에서는 모든 언어의 전반에 깔려 있는 특성과 기본적인 설계 사상, 구현 방법들을 살피게 되며, 이를 바탕으로 하여 기존 언어들의 설계개념과 구현방법들을 연구해 컴퓨터와의 의사소통 방법은 물론 컴퓨터를 좀 더 잘 이해하는 데 도움을 줄 수 있으며, 새로운 언어를 설계하고 구현하는 데에도 커다란 도움을 줄 수 있다. 이러한 프로그래밍 언어들은 컴퓨터가 이해하지 못하기 때문에 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주는 일을 하는 프로그램을 컴파일러라고 한다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 컴파일러는 소스 프로그램을 읽어서 즉시 결과를 출력하는 인터프리터와는 구분된다. 그러나 현대에 들어 많은 인터프리터가 JIT 컴파일 등의 기술로 실시간 컴파일을 수행하므로, 컴파일러와 인터프리터 사이의 기술적 구분은 사라져 가는 추세이다.[22][23]
- 동시, 병렬, 분산 처리
- 동시 처리
동시처리는 서로 독립적으로 수행될 수 있는 두 개 이상의 프로세스를 단일 처리기 시스템에서는 시분할 제어 방식으로, 다중 처리기 시스템에서는 처리기마다 프로세스를 할당하여 동시에 처리하는 방식이다. 순차적 수행보다 시간의 절약과 시스템 이용률을 높이는 장점이 있다.[24] 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장이 되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.[25]
- 병렬 처리
병렬 처리는 동시에 동작하는 복수의 마이크로프로세서를 갖추고 있는 컴퓨터에 의해서만 실행될 수 있는 처리 방식으로, 복수의 처리 장치를 사용해 모든 처리 장치가 하나의 프로그램상의 서로 다른 태스크를 동시에 처리함으로써 처리의 부하를 분담하여 처리 속도를 향상시키는 방법이다.[26] 하지만 이러한 병렬 처리에는 단점이 있다. 기존의 단일 프로세서에 비해 더 많은 다중 프로세서이고 그러한 많은 프로세서를 통해 또한 다양하게 지원하는 각종 운영체제나 언어 등의 영향을 받게 되면서 그러한 설계나 구조를 만들기가 굉장히 복잡해졌다. 가장 특징적인 세가지는 어떻게 태스크를 얼마만큼 어느정도로 나눠서 처리해야 하는 분할, 각 분리된 태스크들을 각 여러 프로세서에 어떻게 배정해서 처리해야 하는 스케줄링, 각 프로세서에 공유된 데이터가 임의의 한 프로세서에 의해 변경되지 않도록 해야 하는 동기화이다.[27]
- 분산 처리
분산 처리는 중앙처리장치가 처리 또는 제어하고 있던 기능을 여러개의 처리장치에 분산시키거나 또는 중앙에서 집중처리하고 있던 것을 지방으로 분산하는 것을 말한다. 각 컴퓨터 시스템들은 자기만의 일을 처리할 수도 있으며 데이터 통신망을 이용하여 다른 컴퓨터 시스템과 통신하여 나누어 처리하기도 한다. 하나의 컴퓨터 시스템에 의한 집중 처리와는 달리 다른 컴퓨터 시스템에 일을 나누어 처리하는 방식은 통신 네트워크의 발달과 고성능 소형 컴퓨터 출현을 바탕으로 실용화되었다.[28] 예를 들어, 거대한 웹사이트의 저장소라던가, 맵리듀스(MapReduce)와 같은 빅데이터 계산이라던가, peer-to-peer(P2P) 파일 공유 같은 것이 있다. 분산 처리 시스템은 어떤 문제가 발생했을 때, 컴퓨터간에 복잡하게 연결되어있는 부분이 있고, 시간에 의존적인 것도 있다. 하나의 컴퓨터로 할 때는 잘 실행되건 것이, 분산 시스템에서는 크래쉬가 발생하거나 알 수 없는 이유로 실패할 수 있다. 이러한 부분적 실패가 분산 처리 시스템이 어려운 이유 중 하나이다.[29]
컴퓨터 구조
컴퓨터 구조는 컴퓨터를 구성하는 CPU, 메모리, 입출력장치의 기본이 되는 디지털 회로소자의 특성과, CPU의 동작 원리와 설계방법을 익히며, CPU의 제어회로 및 마이크로프로그램 등을 연구함으로써 컴퓨터 구조에 대한 원리와 특성을 익히는 학문이다. 구체적으로는 컴퓨터 성능 구분 요소, 이진 데이터 연산, 데이터 패스 설계, 컨트롤 로직 설계, 파이프라인 기법, 메모리 시스템 설계, 그리고 주변장치 및 멀티프로세서 시스템에 대해 연구한다. 컴퓨터 구조의 기본 개념 및 동작원리를 이해하고 그 응용분야를 학습하고 MIPS CPU의 어셈블리 언어 및 기계어 명령을 학습함으로써 CPU의 내부 동작원리를 이해한다.[30]
- 컴퓨터 구조의 연구영역
- 디지털 논리 회로 : 논리 게이트, 불대수, 조합 논리회로, 순차 논리 회로, 집적회로 등에 대해 연구한다.
- 데이터의 표현 : 진법과 진법변환, 연산과 보수, 데이터와 데이터 구조의 표현을 연구한다.
- 컴퓨터 연산방법 : 수치와 비수치 연산에 대해 연구한다.
- 기억장치의 종류 : 주기억장치, 보조기억장치, 고성능 기억장치에 대해 연구한다.
- 중앙처리장치 : 컴퓨터 레지스터, 산술 논리 연산 장치(ALU), 컴퓨터 명령어, CISC(Complex Instruction Set Computer)와 RISC(Reduced Instruction Set Computer)에 대해 연구한다.
- 제어장치 : 메이저 상태와 타이밍 상태, 명령어 사이클, 제어장치의 구현 방법에 대해 연구한다.
- 인터럽트 : 인터럽트의 발생 원인과 종류, 인터럽트 체제와 동작원리, 우선순위 인터럽트 체제에 대해 연구한다.
- 입출력장치 : 주기억장치와 입출력장치, 주기억장치 버스와 입출력 버스, 입출력장치 인터페이스, 입출력 주소 공간, 데이터전송 방식에 대해 연구한다.
- 병렬 컴퓨터구조 : 병렬 컴퓨터구조의 분류, 병렬 프로세서(parallel processor), 결합 허용(fault tolerance)에 대해 연구한다.
- 데이터통신 : 데이터통신시스템의 구성요소, 데이터통신 방식, 전송 형태 및 속도, 데이터의 전송 방식, 근거리 통신망(LAN), 부가가치 통신망(VAN), 통신 프로토콜에 대해 연구한다.
운영체제
운영체제는 모든 하드웨어와 소프트웨어를 관리하고 컴퓨터 자원을 관리하며, 컴퓨터 사용자에게 편의성을 제공하고 응용 프로그램들의 실행을 도와주고 사용자와 하드웨어 사이의 매개체 역할을 하는 소프트웨어이다. 운영체제는 제어 프로그램과 처리 프로그램으로 구성된다. 제어 프로그램은 시스템 전체의 동작 상태를 감시, 감독하고 자원들을 관리하며 각종 입출력 장치를 제어, CPU 스케줄링과 작업관리, 기억장치 관리 등을 담당하며, 감시, 작업 관리, 데이터 관리 프로그램이 있다. 감시 프로그램은 시스템 전체의 동작 상태를 감독하고 지원하여 슈퍼바이저(supervisor)라고도 불리며, 감시 프로그램의 중추적인 역할을 담당한다. 작업 관리 프로그램은 작업을 처리하고 다른 작업으로의 자동적 이행을 위한 준비와 처리를 수행한다. 데이터 관리 프로그램은 주 기억장치와 보조 기억 장치사이의 데이터 전송, 입출력 데이터와 프로그램의 논리적 연결, 파일 조직 및 처리 등을 담당한다. 처리 프로그램은 제어 프로그램의 감시아래 컴퓨터의 특정한 문제를 해결하기 위해 필요한 여러가지 기능을 처리할 수 있도록 하는 프로그램이며, 언어 번역 프로그램, 서비스 프로그램, 문제 처리 프로그램이 있다. 언어 번역 프로그램은 원시 프로그램을 컴퓨터가 알 수 있는 기계어로 번역시키는 프로그램으로 컴파일러, 어셈블러, 인터프리터 등이있다. 서비스 프로그램은 시스템에서 사용 빈도가 높은 프로그램을 미리 개발하여 놓은 프로그램으로, 연계 편집 프로그램, 로더, 디버깅 프로그램, 정렬/병합 프로그램, 라이브러리 등이 있다. 문제 처리 프로그램은 컴퓨터 사용자가 필요한 업무에 맞게 개발한 프로그램으로 급여 관리, 인사 관리, 회계 관리 등이 있다.[31] 운영체제의 종류에는 일괄처리 운영체제, 대화형 운영체제, 실시간 운영체제, 하이브리드 운영체제가 있다. 일괄처리 운영체제는 작업을 모아서 처리, 사용자와의 상호작용 없이 순차적으로 실행한다. 대화형 운영체제는 시분할시스템이라고도 하며 일괄처리보다 반환시간이 빠르고 이용자에게 즉각적인 피드백을 제공한다. 실시간 운영체제는 모든 시스템 중 가장 빠른 응답시간을 보이고 결과값이 현재의 결정에 영향을 받으며 데이터의 처리가 매우 빠르고 반환시간이 매우 중요한 환경에 적합하다. 하이브리드 운영체제는 일괄처리와 대화형 처리의 합성한 운영체계로 대화형 작업이 많지 않을 경우 백그라운드에서 배치 프로그램을 실행하며, 대부분의 컴퓨터 시스템으로 사용하고 있다.[32]
컴퓨터 시스템의 응용
소프트웨어 공학
소프트웨어 공학은 소프트웨어를 분석, 설계, 개발, 운영, 유지보수 등 개발수명주기 전반에 걸친 계획, 개발, 검사, 보수, 관리, 방법론 등을 연구하는 분야이다. 소프트웨어는 하드웨어를 동작시켜 사용자가 작업을 편하게 수행하도록 하는 프로그램과 자료구조 등을 총칭하는 말인데, 프로그램 자체뿐만 아니라 프로그램의 개발, 운용 및 유지보수에 관련된 모든 문서와 정보도 포함한다. 컴퓨터 시스템에서 소프트웨어가 차지하는 비율은 1955년경에는 20% 미만이었지만, 80년대 후반에는 요구되는 소프트웨어의 규모가 커짐에 따라 복잡해져 80~90% 에 이르렀다. 이에 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생했는데, 이를 소프트웨어 위기라고 불리는 징후가 나타나기 시작했다. 이에 소프트웨어에 대한 개발 인력의 부족과 인건비가 상승되어 개발 기간 지연 및 개발 비용 증가, 성능 및 신뢰성 부족, 유지보수가 어렵고 소프트웨어의 생산성과 품질이 저하되었다. 소프트웨어 위기를 극복하기 위해 소프트웨어 공학이 연구되었고 여러가지 방법론과 도구, 관리 기법들을 통하여 단지 생산하는 것이 아니라 가장 경제적, 안정적, 효율적으로 양질의 제품을 생산하고, 유지보수 활동을 체계적이고 경제적으로 수행하기 위해 연구된 학문이다.[33][34][35]
통신
- 컴퓨터 네트워크
컴퓨터 과학에서 통신은 컴퓨터 네트워크를 뜻한다. 컴퓨터 네트워크는 컴퓨터를 통신망에 상호 연결하여 소프트웨어나 데이터베이스를 공유하도록 함으로써 컴퓨터의 효율적인 이용을 목적으로 하거나, 대형 컴퓨터를 원격지에서 이용하기 위한 방법으로 여러 가지 통신망을 구성한다. 한정된 지역의 컴퓨터들을 서로 연결하여 통신 가능하도록 구성한 네트워크를 LAN(Local Area Network)이라 하고, LAN으로 연결하기에는 서로 너무 멀리 떨어진 지점 사이를 연결하거나 관리주체가 다른 LAN을 연결하는데 이용되는 것이 WAN(Wide Area Network)라고 한다. 인터넷은 세상에 존재하는 LAN들을 연결해 놓은 거대한 네트워크이다. 두 개 이상의 컴퓨터 사이에 통신을 하기 위해서는 통신의 당사자들이 지켜야할 약속으로써 통신규약이라고 부르는 프로토콜이 필요하다. 컴퓨터 네트워크 에서는 데이터를 패킷이라는 단위로 묶어서 보내는데, 패킷은 보통 헤더와 페이로드로 이루어져 있다. 헤더에는 송신자 및 수신자의 주소, 에러 검출을 위한 정보 등 통신의 절차를 처리하기 위해 프로토콜이 요구하는 값들이 들어가고 페이로드에는 전달하고자 하는 데이터가 들어간다.[36]
- 암호학
암호학은 과거 주로 군사적인 목적으로 사용되었지만, 오늘날 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다루는 학문으로 수학을 중심으로 컴퓨터, 통신 등에서 메시지 보안이외에도, 인증, 서명 등을 암호의 범주에 포함시켜 우리의 일상에서 매우 중요한 분야가 되었다. 현금지급기의 사용, 컴퓨터의 패스워드, 전자상거래 등은 모두 현대적 의미의 암호에 의해 안정성을 보장받고 있다. 암호의 기본 특성은 암호화된 내용이 무엇인지 알 수 없어야 한다는 기밀성, 원본과 확실히 같은 데이터라는 무결성, 권한이 있는 사람만 접근 가능한 인증의 3가지가 있다. 암호화에는 크게 양방향과 단방향 암호화로 나눌 수 있다. 양방향 암호화는 복호화가 가능해 복호화하면 평문을 얻어 낼 수 있지만, 단방향은 암호화만 가능하고 복호화는 불가능하다. 단방향 암호화는 복호화가 불가능해 원본 데이터가 변경되었거나 훼손되지 않았는지 확인하는 무결성에 초점을 둔다. 단방향 암호화를 다른 말로 해시라고도 부른다. 양방향 암호화는 복호화 방식에 따라서 대칭키와 비대칭 키로 나뉜다. 대칭키 암호화 방식은 암호화할 때 사용한 키를 복호화할 때도 동일하게 사용하지만, 비대칭 키는 먼저 공개키를 이용해 암호화하고, 비공개 키를 이용하여 복호화를 한다. 대칭키 방식은 알고리즘이 상대적으로 단순한 장점이 있지만 시스템에 가입한 사용자들 사이에 매 두 사용자 마다 하나의 서로 다른 키를 공유해야 하기 때문에 상대적으로 용이한 공개키 암호 시스템의 출현의 계기가 되었다. 비대칭 키 시스템은 공개키를 먼저 공개해 문서를 암호화하여 전달하면, 해당 문서를 받아 비공개키로 복호화를 진행한다. 공개키 만으로는 복호화가 불가능하기 때문에 보낸사람 역시 암호화 후에 복원할 수 없다. 이 시스템에서 암호화와 복호화 시스템은 두 키가 짝으로 동작하기 때문에, 비밀키로 암호화하고 공개키로 복호화 할 수도 있다. 이 방법을 이용하면 해당 공개키에 맞는 비밀키 보유자를 확인 할 수 있으며, 전자서명에서는 이런 성질을 이용한다.[37][38][39]
인공지능
인공지능은 인간의 학습, 추론 ,지각능력 등을 컴퓨터가 할 수 있도록 인공적으로 만든 컴퓨터 프로그램 또는 이를 포함한 컴퓨터 시스템으로, 컴퓨터가 인간의 지능적인 행동을 모방할 수 있도록 하는 것을 말한다. 인공지능은 강인공지능, 약인공지능, 초인공지능으로 나눌 수 있다.
- 강인공지능
강인공지능은 사람과 똑같이 스스로 학습하여 똑같이 행동한다는 것을 의미한다. AI가 스스로 데이터를 찾아서 학습이 가능한 상태를 의미하며 다양한 분야에서 보편적으로 활용이 가능하다. 구글의 알파고 등의 특정한 일의 수행 가능 여부를 기준으로 인간의 지성 유무를 판단하는 건 의미가 없고 그림을 보는 것이나 소리를 듣는 등 기존에 사람만이 가능하다고 생각되던 일들을 이제는 대부분 컴퓨터로도 얼마든지 처리할 수 있다. 따라서, 강인공지능은 현실적인 어려움으로 인해 현재까지는 큰 성과가 없는 상태이다.[40][41]
- 약인공지능
강인공지능이 현실적으로 불가능한 상황이기 때문에 약인공지능에 대한 연구가 활발히 일어나고 있으며, 현시점에서 활용되고 있는 대부분의 인공지능이 약인공지능으로 자의식이 없다. 약인공지능은 영상, 음성, 자연어 인식 등 특정 영역에만 활용이 가능하며, 알고리즘은 물론 기초 데이터와 규칙을 입력해야 한다. 약인공지능의 예로는 바둑에 특화된 알파고와 암을 진단하는 인공지능 왓슨이 있다. 하지만 알파고는 바둑에만 특화되어 있기 때문에 다른 분야에 관해서는 새롭게 습득하는 것이 필요하다. 현시점에서는 이미 사람을 넘어선 능력이 바둑, 체스, 자율주행자, 의료 진단 분야에서 실용화되고 있다.[40]
- 초인공지능
인간의 지식을 1000배 이상 초월하고 모든 면에서 월등한 인공지능으로, 아직 등장하지 않았지만, 미래에 등장할 것이라고 예측하는 학자들이 많다. 예시로는 영화 속의 가상인물인 터미네이터가 있다. 미래학자 레이먼드 레이 커즈와일(Raymond "Ray" Kurzweil)은 인공지능 발전 속도를 감안할때 2030년에 인공지능은 특이점에 다다라 이 특이점을 뛰어넘으면 AI 스스로 자신보다 더 똑똑한 AI를 만들어 지능이 무한히 높은 존재가 출현하게 될 것이라고 이야기 했다.[40]
컴퓨터 그래픽스
컴퓨터 그래픽스는 컴퓨터를 이용해 실제 세계의 영상을 조작하거나 새로운 영상을 만들어내는 기술을 가리킨다. 모양과 색을 수치로 변화하여 디지털로 나타내는 논리적 표현 방법이다. 확대, 축소, 회전 등의 변환이 가능하고 색의 변경이 쉽고, 3차원 공간에서 자유자재로 이동하면서 다각도에서도 볼 수 있다. 그 활용도는 회화, 디자인, 영화의 특수영상 효과와 같은 창작 예술 분야뿐만 아니라 각종 시뮬레이션, CAD, 비즈니스용 그래프, 의료·산업용 화상 처리, 인쇄 매체의 편집 등 과학, 의료, 군사, 교육 등 현대 문명 전반에 걸쳐 다양한 응용 분야로 크게 확장되고 있다.[42][43]
각주
- ↑ 길현영, 〈컴퓨터과학에 대한 오해와 진실〉, 《소프트웨어정책연구소》, 2017-10-30
- ↑ 〈컴퓨터 과학의 역사로 알아보는 컴퓨터 공학과의 차이.〉, 《티스토리》, 2020-06-23
- ↑ 전상표, 〈컴퓨터 소프트웨어 분야 연구를 위한 이산수학 분야에 대한 연구〉, 《사이언스온》, 2010-12-27
- ↑ 〈이산수학〉, 《위키백과》
- ↑ 〈그래프 이론〉, 《위키백과》
- ↑ 〈컴퓨터 과학〉, 《위키백과》
- ↑ 〈그래프 (자료 구조)〉, 《위키백과》
- ↑ 〈Information Theory〉, 《AIStudy》
- ↑ 〈정보 이론〉, 《위키백과》
- ↑ 〈수리 논리학〉, 《위키백과》
- ↑ 〈도메인 이론〉, 《위키백과》
- ↑ 〈확률론〉, 《위키백과》
- ↑ 〈통계학〉, 《위키백과》
- ↑ 〈계산 이론〉, 《네이버 지식백과》
- ↑ 〈계산 가능성 이론〉, 《위키백과》
- ↑ 〈계산복잡도이론〉, 《네이버 지식백과》
- ↑ 〈알고리즘〉, 《네이버 지식백과》
- ↑ 〈알고리즘〉, 《위키백과》
- ↑ 초보몽키, 〈강의노트 17. 알고리즘, 자료구조 개요〉, 《깃허브 블로그》, 2019-04-28
- ↑ botho, 〈(자료구조) 자료구조의 선형, 비선형 분류에 따른 각 종류와 자료구조별 특징 간단 정리〉, 《티스토리》, 2019-08-01
- ↑ 〈자료 구조〉, 《위키백과》
- ↑ 〈프로그래밍언어〉, 《네이버 지식백과》
- ↑ 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러 ]〉, 《위키백과》
- ↑ 〈동시 처리〉, 《정보통신용어사전》
- ↑ 〈다중작업〉, 《위키백과》
- ↑ 〈병렬 처리〉, 《네이버 지식백과》
- ↑ 마팸, 〈병렬 처리에 대해서〉, 《티스토리》, 2017-08-18
- ↑ 〈분산 처리〉, 《네이버 지식백과》
- ↑ 장철원, 〈분산 처리 시스템의 개념 이해(1)〉, 《깃허브 블로그》, 2020-03-12
- ↑ 〈컴퓨터구조〉, 《네이버 지식백과》
- ↑ IT양햄찌, 〈운연체제(Operating System:OS)란?운영체제 종류〉, 《티스토리》, 2019-01-23
- ↑ 〈운영체제〉, 《네이버 지식백과》
- ↑ wondong2, 〈1장 소프트웨어 공학의 개요〉, 《티스토리》, 2017-02-06
- ↑ 〈소프트웨어공학〉, 《네이버 지식백과》
- ↑ 〈소프트웨어공학〉, 《네이버 지식백과》
- ↑ 〈컴퓨터네트워크〉, 《네이버 지식백과》
- ↑ 〈암호학〉, 《네이버 지식백과》
- ↑ 〈암호학〉, 《위키백과》
- ↑ heecheolman, 〈가볍게 배우는 암호학〉, 《깃허브 블로그》, 2020-12-14
- ↑ 40.0 40.1 40.2 Yunnie, 〈인공지능(Artificial Intelligence)의 유형〉, 《티스토리》, 2021-03-07
- ↑ 〈강인공지능〉, 《나무위키》
- ↑ 〈컴퓨터 그래픽스〉, 《위키백과》
- ↑ 〈컴퓨터그래픽스〉, 《네이버 지식백과》
참고자료
- 길현영, 〈컴퓨터과학에 대한 오해와 진실〉, 《소프트웨어정책연구소》, 2017-10-30
- 〈컴퓨터 과학의 역사로 알아보는 컴퓨터 공학과의 차이.〉, 《티스토리》, 2020-06-23
- 〈그래프 이*론〉, 《위키백과》
- 〈컴퓨터 과학〉, 《위키백과》
- 〈그래프 (자료 구조)〉, 《위키백과》
- 〈Information Theory〉, 《AIStudy》
- 〈정보 이론〉, 《위키백과》
- 〈수리 논리학〉, 《위키백과》
- 〈도메인 이론〉, 《위키백과》
- 〈확률론〉, 《위키백과》
- 〈통계학〉, 《위키백과》
- 〈계산 이론〉, 《네이버 지식백과》
- 〈계산복잡도이론〉, 《네이버 지식백과》
- 〈계산 가능성 이론〉, 《위키백과》
- 〈알고리즘〉, 《네이버 지식백과》
- 초보몽키, 〈강의노트 17. 알고리즘, 자료구조 개요〉, 《깃허브 블로그》, 2019-04-28
- botho, 〈(자료구조) 자료구조의 선형, 비선형 분류에 따른 각 종류와 자료구조별 특징 간단 정리〉, 《티스토리》, 2019-08-01
- 〈자료 구조〉, 《위키백과》
- 〈프로그래밍언어〉, 《네이버 지식백과》
- 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러
]〉, 《위키백과》
- 〈동시 처리〉, 《정보통신용어사전》
- 〈다중작업〉, 《위키백과》
- 〈병렬 처리〉, 《네이버 지식백과》
- 마팸, 〈병렬 처리에 대해서〉, 《티스토리》, 2017-08-18
- 〈분산 처리〉, 《네이버 지식백과》
- 장철원, 〈분산 처리 시스템의 개념 이해(1)〉, 《깃허브 블로그》, 2020-03-12
- 〈컴퓨터구조〉, 《네이버 지식백과》
- IT양햄찌, 〈운연체제(Operating System:OS)란?운영체제 종류〉, 《티스토리》, 2019-01-23
- wondong2, 〈1장 소프트웨어 공학의 개요〉, 《티스토리》, 2017-02-06
- 〈소프트웨어공학〉, 《네이버 지식백과》
- 〈소프트웨어공학〉, 《네이버 지식백과》
- 〈암호학〉, 《네이버 지식백과》
- 〈암호학〉, 《위키백과》
- heecheolman, 〈가볍게 배우는 암호학〉, 《깃허브 블로그》, 2020-12-14
- Yunnie, 〈인공지능(Artificial Intelligence)의 유형〉, 《티스토리》, 2021-03-07
- 〈강인공지능〉, 《나무위키》
- 〈컴퓨터 그래픽스〉, 《위키백과》
- 〈컴퓨터그래픽스〉, 《네이버 지식백과》
같이 보기