1. 컴퓨터와 운영체제
이번 강좌에서는 프로그래밍언어를 배우기전에 꼭 알아야 하는 컴퓨터와 관련된 기본 개념
들을 살펴보게 됩니다. 컴퓨터의 기본적인 구조
와 동작원리
그리고 운영체제
에 대해 배웁니다.
이 강의를 통해 컴퓨터의 구조
와 동작원리
를 이해하고 운영체제
가 무엇인지 알 수 있게 됩니다.
01: 컴퓨터
1) 컴퓨터 사용 용도의 변화
컴퓨터
는 이름에서 알 수 있듯이 기본적으로는 계산을 목적
으로 하는 기계장치
입니다. 최초의 컴퓨터들은 군사목적
의 수학적 계산에 주로 활용 되었으며 IBM
(International Business Machine)은 컴퓨터의 사용범위를 비즈니스 영역
으로 확장 시켰습니다.
마이크로소프트
와 애플
은 컴퓨터를 개인이 사용하는 용로인 PC(Personal Computer)
로 발전 시켰으며 2000년대 후반에 들어서는 애플과 구글의 스마트폰(Smartphone)
을 통해 이동하면서도 사용할 수 있는 모바일(Mobile)
환경 까지 확대되기에 이르렀습니다.
지금은 TV, 냉장고, 공기청정기, 로봇청소기 등의 가전제품
은 물론 인공지능 스피커
및 시계와 같은 웨어러블 디바이스
까지 그 영역이 확대되어 모든 기계장치에 컴퓨터가 내장되는(Embedded)
형태가 되었습니다.
2) 컴퓨터의 구조
앞에서 살펴본것 처럼 스마트폰, 태블릿, 게임기, 노트북 등은 모두 일종의 컴퓨터입니다. 컴퓨터의 구성요소는 기계적 요소인 하드웨어(Hardware)
와 프로그램 요소인 소프트웨어(Software)
로 구분 합니다.
이들 기기들의 형태는 달라도 기본적인 하드웨어 구성은 다음과 같습니다.
CPU(Central Processing Unit)
중앙처리 장치
로 사람의두뇌
에 해당합니다. 컴퓨터 성능의 중요한 요소 이며 Intel core i5, i7 같은 제품명들이 CPU 입니다. 대형 컴퓨터일수록 고성능 CPU가 사용되며 경우에 따라서 여러개의 CPU를 하나의 컴퓨에 내장하기도 합니다.스마트폰
과 같은 모바일 기기에서는 CPU 이외에 다른 구성요소들을 포함한 하나의 칩에 구성한AP(Application Pocessor)
라는 용어를 사용합니다.
RAM(Random Access Memory)
램
이라고 하며메모리
,기억장치
라고도 합니다. CPU의연산결과
를저장
하고 처리할 수 있는 공간으로 프로그램 실행시 프로그램들이 메모리에 읽혀져 동작하게 됩니다. 당연히 메모리 용량이 클수록 여러 프로그램을 실행할 수 있고 높은 성능을 보장할 수 있습니다. 램은 전원이 꺼질경우 내용이 지워지기 때문에 영구적으로 저장해야 하는 데이터는 HDD로 불리우는 디스크 장치를 사용하게 됩니다.
HDD(Hard Disk Drive)
하드디스크
라고 하며영구적
으로 데이터를 저장하기 위한저장장치
입니다. 컴퓨터에서 실행하는 프로그램 및 워드, 파워포인드등의 데이터 파일, mp3, avi 등 파일의 형태로 데이터를 저장하고 관리할 수 있습니다. 최근에는 메모리 기반의 HDD인SSD(Solid State Disk)
의 가격이 저렴해지고 많이 보급되고 있습니다.
메인보드(Main Board)
메인 보드
는 컴퓨터의하드웨어 모듈
들이 통합되어 구성된 형태를 말합니다. CPU, RAM, HDD 등이 메인 보드에 장착되는 형태로 부품의교체와 확장
이 가능한 구조 입니다. 컴퓨터에 문제가 있을때 메인보드를 통채로 교체할수도 있고 일부 부품만 교체할수도 있습니다. 최근의 소형화된 노트북이나 스마트폰, 태블릿 등은 워낙 작은 부품들이 결합되어 있어 문제 발생시 개별부품의 교체가 불가능해 보드를 통채로 교체해야 하는 경우가 많습니다.
GPU(Graphical Processig Unit)
컴퓨터에서
그래픽 처리
를 전문적으로 다루는 하드웨어 입니다. 기존에는 단순히 그래픽 카드라고 해서 2D, 3D 화면을 처리하는 정도에서 활용 되었으나 최근에는 GPU의 성능이 고도화되어머신러닝
이나인공지능
등 보다 빠른 계산처리가 필요한 경우 CPU를 보조하여 사용하게 되었습니다. 특히 VR,AR, 고해상도 동영상 처리 등 시각적인 요소가 중요해 지면서 GPU가 빠른 속도로 발전하고 있습니다.
02: 운영체제(Operating System)
운영체제는 OS
라고 하며 컴퓨터라고 하는 하드웨어 장치
를 사람이 사용
할 수 있도록 환경을 제공하는 소프트웨어
입니다.
즉, 어떠한 형태의 컴퓨터라도 사람이 사용하기 위해서는 운영체제가 필요하다는 것으로 이해할 수 있습니다.
운영체제는 하드웨어의 사양에 따라 기능의 차이가 많아 심지어는 화면이 없거나 키보드나 마우스를 사용할 수 없는 환경도 많이 있습니다.
1) 운영체제 기능
운영체제는 시스템 하드웨어
를 관리할 뿐만 아니라 응용 프로그램
을 실행
하기 위한 환경을 제공 합니다. 프로그램에 메모리
와 CPU
를 할당하고 디스크
를 사용할 수 있도록 하는 것도 운영체제의 역할 입니다.
기본적인 운영체제의 기능은 다음과 같습니다.
프로세스 관리(Process Management)
운영체제에서 응용 프로그램의 실행은
프로세스 생성
으로 이루어 집니다. 프로세스를 생성하고 종료, 프로세스간 통신등 프로그램 실행을 위한 가장 기본적인 기능 입니다.
메모리 관리(Memory Management)
응용 프로그램에
메모리를 할당
하고 사용하지 않는 메모리를회수
하는 역할과 함께 디스크를 사용해 부족한 메모리는가상메모리
로 운영하는 등의 관리 기능 입니다.
파일시스템(File System)
하드디스크를
물리적 혹은 논리적으로 분할
하고 운영체제에서 사용할 수 있도록 마운팅(mounting) 기능을 제공 합니다. 파일이나 디렉토리를 생성하고 관리할 수 있으며 운영체제에 따라 관리할 수 있는 파일시스템 종류(FAT, NTFS, APFS 등)가 다를 수 있습니다.
장치 드라이버(Device Driver)
컴퓨터에
연결된 각종 하드웨어
를 응용 프로그램에서 사용할 수 있도록연결
해 주는소프트웨어
를 말합니다. 예를들어 프린터를 컴퓨터에 연결했을때 정상적으로 사용하기 위해서는 해당 프린터 장치에 대한드라이버 소프트웨어
를 설치해야 합니다. 응용 프로그램과 달리 운영체제이 일부로 동작하게 됩니다.
네트워크(Networking)
컴퓨터와 컴퓨터를 연결해주는
네트워크 기능
을 말합니다.인터넷
역시 컴퓨터 네트워크가 전세계적으로 연결된 개념이며 운영체제는TCP/IP
,UDP
등의프로토콜
을 이용해 컴퓨터간 네트워크 연결을 지원 합니다.
보안(Security)
보안은 광범위한 영역으로 운영체제에 있어 보안은
메모리
나프로세스
에 대한보호
를 기본으로 파일시스템, 네트워크에 대한 보안 기능을 기본적으로 제공 합니다. 또한 다중 사용자 시스템의 경우사용자 관리
및권한관리
등도 보안영역에 속합니다.
입출력(I/O, Input/Output)
컴퓨터에 연결된 장치들로 부터 데이터를 입력받을 수 있도록 하고 처리된 결과를 내보내는 기능을 말합니다. 입력은
마우스
,키보드
,터치모니터
등과 같은입력 장치
를 통해 이루어지며 출력은모니터
,스피커
,프린터
등출력 장치
를 통해 이루어집니다. 각각의 장치를 사용하기 위해서는 장치 드라이버가 필요하며 운영체제는 입출력에 필요한폴링
과인터럽트
같은 기능을 제공 합니다.
폴링
은 운영체제가 장치 사용을 감시하기 위해 동작여부
를 수시로 체크
하는 것을 말하며 이러한 방식은 비효율적
이기 때문에 장치에서 이벤트 발생시 해당 이벤트를 통지해 주는 인터럽트 개념
이 주로 사용 됩니다.
2) 운영제체 종류
현재 대표적인 운영체제는 다음과 같습니다.
마이크로소프트 윈도우즈(MS Windows)
대표적인 PC용 운영체제
로 가장 많은 사람들이 사용하고 있습니다. 특히국내 시장 점유율
이 높고 여러 회사에서 제조된 컴퓨터에서 모두 사용할 수 있다는 장점이 있습니다. 단점은상용 제품
으로 이용에 따른 라이센스비용 상승
이 문제가 될 수 있으며 아직까지도 윈도우10에 최적화 되지 않은 앱들이 많이 있고 고해상도 대응에 일관성이 없을뿐 아니라 스마트폰, 태블릿등과의 연계나 통합이 깔끔하지 못합니다.
애플 맥OS(Mac OS)
윈도우와 함께
대표적인 PC용 운영체제
입니다. 국내 보다는 서구권에 사용자가 더 많으며고해상도 지원
이 통일화 되어 있고 사용이 편리하며 특히아이폰, 아이패드
등의 애플 제품들과 유기적인 연계가 뛰어나다는 장점이 있습니다. 또한유닉스 기반
의 환경이 잘 갖춰져 있고 비교적 성능과 안정성이 뛰어나개발자
들에게 더욱 인기가 있습니다. 단점은 가격이 비싸며 국내 인터넷 뱅킹등 이용에 불편하다는 것등을 꼽을 수 있습니다.
안드로이드(Android)와 iOS
스마트폰 운영체제
로 구글의 안드로이드와 애플의 iOS가 있습니다. 하드웨어가 달라 운영체제 호환이 안되며 각각의 운영체제 모두 장단점 있지만 성능이나 기능에는 크게 차이가 없습니다.소형화된 장비
에 MS 윈도우 설치가 어렵거나 스마트폰 처럼 편리한 환경을 제공하기 위해 최근에는 여러 장비에 안드로이드 탑재가 많아 지고 있습니다. 엄밀하게 말하면 안드로이드나 iOS의 핵심 OS영역은 유닉스(리눅스) 계열 입니다.
리눅스(Linux)
리눅스는
유닉스(Unix)
기반의 공개 운영체제 입니다. 유닉스는 대표적인 컴퓨터 운영체제로 예전에는 주로서버컴퓨터용
운영체제 였으니 리눅스가 개발된 이후 PC에서도 유닉스를 사용할 수 있게 되었습니다. 뛰어난안정성
과확장성
,무료 라이센스
때문에 많은 곳에서 리눅스를 사용하고 있습니다. 안드로이드 스마트폰 운영체제의 핵심(커널)도 리눅스 입니다.
03: 프로그래밍 언어
프로그래밍 언어
는 컴퓨터에서 동작하는 소프트웨어
를 개발
하기 위해 만들어진 도구
입니다. 운영체제를 통해 실행되는 응용 프로그램
(Application Program) 뿐만 아니라 운영체제와 같은 시스템 소프트웨어
(System Software)를 만들때에도 프로그램언어가 필요 합니다.
언어라는 표현이 붙은 것은 컴퓨터를 동작하기위해 컴퓨터에 명령
을 내리기 위한 일종의 대화법
이라는 개념에서 출발했다고 볼 수 있습니다.
- 컴퓨터는 기본적으로 하드웨어 장치로
0,1
의디지털
신호로 동작합니다. - 컴퓨터를 동작 시키기 위해서는 이러한 물리적 환경을 직접 통제하는
기계어
라고 하는 문법이 필요합니다. - 기계어는
저수준(low level)
언어로 복잡하고 사람이 이해하기 어렵습니다.
이러한 이유로 사람이 이해하기 쉬운
문법으로 프로그램을 개발 할 수 있도록 만들어진것이 고수준(high level)
프로그래밍 언어 입니다. 널리 알려진 C
, Java
와 같은 프로그램언어들은 모두 고수준 프로그래밍 언어 입니다.
프로그램 개발을 위해서는 적어도 한가지 이상
의 프로그램 언어를 알아야 하는데 최근에는 여러 프로그램언어를 필요에 따라 선택해서 개발
할 수 있는 능력이 요구 됩니다. 물론 여러 프로그램언어를 모두 잘하기는 어렵게 때문에 자신에게 맞는 언어
를 찾는 것도 매우 중요한 과정 입니다.
다음은 대표적인 프로그래밍 언어 입니다.
C/C++/C#
대표적인 프로그래밍언어로 유닉스 운영체제와 함께 개발되어 현재도 가장 널리 사용되는 언어.
과거에는 필수 프로그램 언어
로 인식 되었으며 하드웨어와 밀접
한 개발에 적합한 구조로 시스템 프로그래밍
에 꼭 필요합니다. 다만 일반인이나 기업에서 사용하는 업무용 프로그램이나 최근에 주로 사용하는 웹 기반의 응용프로그램을 개발한다면 C를 몰라도 상관 없습니다.
MS 윈도우용 프로그램
이나게임
등을 개발한다면 C# 과 C++ 등이 적합 합니다.하드웨어
및운영체제
에종속
된 코드를 생성 하므로 실행 파일의 호환이 안됩니다.메모리 관리
를 개발자가 처리해야 하고포인터
개념등의 이해가 필요합니다.
Java
인터넷과 함께 성장한 대표적인 객체지향 언어로 가장 많은 사용자를 자랑.
C언어와 달리 하드웨어 및 운영체제에 종속족이지 않는
바이트코드
라는 것을 생성해 가상머신
에서 동작하는 프로그램언어 입니다. 이론상 개발된 프로그램은 유닉스, 윈도우, 맥 등에서 수정없이 실행이 가능합니다. 현재는 많은 조사에서 프로그램 개발언어 No.1
자리를 차지하고 있습니다.
- 주로
웹 개발
의백엔드
(서버측 프로그램) 개발에 널리 사용됩니다. 안드로이드
스마트폰 앱 개발의 기본 언어 입니다.- 수많은
오픈소스 프레임워크
및라이브러리
로 개발영역이 무한합니다. - 최근 라이센스가
유료화
되어 향후 개발동향을 지켜볼 필요가 있습니다.
Python
머신러닝과 인공지능의 대표 언어
C언어와 자바는 컴파일러에 의해 소스를 컴퓨터가 이해할 수 있는 형태로 변환하는 과정을 거친다면 파이썬의 경우 인터프리터
라는 것을 사용해 실행시 소스를 변환
하는 구조 입니다.
- 비교적
간단한 문법
과객체지향 개념
으로C를 대체
해처음 배우는 프로그램언어
로 주목받고 있습니다. 데이터 처리에 특화
되어 대량의 복잡한 데이터를 간단하게 변환하고 처리할 수 있습니다.- 이러한 특징으로
머신러닝
과인공지능 프로그램
개발에 최근 널리 사용되고 있습니다.
Swift
애플의 맥OS, 아이폰 iOS 응용 프로그램을 만들기 위한 최신 언어
애플은 자신들만의 하드웨어와 운영체제를 개발해 폐쇄적 구조를 가지고 있었지만 아이폰
과 아이패드
등이 급속도로 성장 하면서 애플 기기들간의 연동이나 공통된 개발
의 장점으로 자신들만의 영역을 확장하고 있습니다.
- 기존의
Objective-C
라는 언어를 대체하는최신 언어
로Kotlin
과 함께Modern Programming Language
라고 불리웁니다. - 기존 언어들과는
문법적인 특징이나 구조가 달라
생소할 수 있습니다. - 애플에서 무료로 제공하는 개발도구나 문서가 매우 잘 되어 있습니다.
- Swift 자체는
오픈소스
로 다양한 영역에서의 사용이 추진되고 있습니다.
Kotlin
구글의 안드로이드 개발에 공식언어로 채택된 최신 언어
처음 안드로이드
가 만들어졌을때는 자바 언어
를 공식언어로 채택 했으나 라이센스 유료화
및 구글과 오라클의 분쟁
등으로 인해 새롭게 부상하고 있는 새로운 언어 입니다. Swift 와 함께 가장 최신 언어중 하나로 많은 부분에서 유사한 부분을 찾을 수 있습니다.
특히 Kotlin 은 문법만 제공
하고 실제 컴파일되어 실행되는 환경을 자바 혹은 자바스크립트를 선택할 수 있으며 향후 다른 플랫폼으로도 확대가 추진되고 있어 주목할 만 합니다.
- 자바와 함께 새로운
안드로이드 공식 개발
언어 입니다. 최신 프로그래밍언어
의 특징이 모두 반영되어 있습니다.
참고 자료
- 오라클 자바 홈페이지: http://java.oracle.com
- Introduction to Java Programming-IBM : https://www.ibm.com/developerworks
- 생활코딩 자바강좌: https://opentutorials.org