공통기초 프로그래밍 개념 잡기

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)를 만들때에도 프로그램언어가 필요 합니다.

언어라는 표현이 붙은 것은 컴퓨터를 동작하기위해 컴퓨터에 명령을 내리기 위한 일종의 대화법이라는 개념에서 출발했다고 볼 수 있습니다.

이러한 이유로 사람이 이해하기 쉬운 문법으로 프로그램을 개발 할 수 있도록 만들어진것이 고수준(high level) 프로그래밍 언어 입니다. 널리 알려진 C, Java 와 같은 프로그램언어들은 모두 고수준 프로그래밍 언어 입니다.

프로그램 개발을 위해서는 적어도 한가지 이상의 프로그램 언어를 알아야 하는데 최근에는 여러 프로그램언어를 필요에 따라 선택해서 개발할 수 있는 능력이 요구 됩니다. 물론 여러 프로그램언어를 모두 잘하기는 어렵게 때문에 자신에게 맞는 언어를 찾는 것도 매우 중요한 과정 입니다.

다음은 대표적인 프로그래밍 언어 입니다.

C/C++/C#

대표적인 프로그래밍언어로 유닉스 운영체제와 함께 개발되어 현재도 가장 널리 사용되는 언어.

과거에는 필수 프로그램 언어로 인식 되었으며 하드웨어와 밀접한 개발에 적합한 구조로 시스템 프로그래밍에 꼭 필요합니다. 다만 일반인이나 기업에서 사용하는 업무용 프로그램이나 최근에 주로 사용하는 웹 기반의 응용프로그램을 개발한다면 C를 몰라도 상관 없습니다.

Java

인터넷과 함께 성장한 대표적인 객체지향 언어로 가장 많은 사용자를 자랑.

C언어와 달리 하드웨어 및 운영체제에 종속족이지 않는 바이트코드 라는 것을 생성해 가상머신에서 동작하는 프로그램언어 입니다. 이론상 개발된 프로그램은 유닉스, 윈도우, 맥 등에서 수정없이 실행이 가능합니다. 현재는 많은 조사에서 프로그램 개발언어 No.1 자리를 차지하고 있습니다.

Python

머신러닝과 인공지능의 대표 언어

C언어와 자바는 컴파일러에 의해 소스를 컴퓨터가 이해할 수 있는 형태로 변환하는 과정을 거친다면 파이썬의 경우 인터프리터라는 것을 사용해 실행시 소스를 변환하는 구조 입니다.

Swift

애플의 맥OS, 아이폰 iOS 응용 프로그램을 만들기 위한 최신 언어

애플은 자신들만의 하드웨어와 운영체제를 개발해 폐쇄적 구조를 가지고 있었지만 아이폰아이패드등이 급속도로 성장 하면서 애플 기기들간의 연동이나 공통된 개발의 장점으로 자신들만의 영역을 확장하고 있습니다.

Kotlin

구글의 안드로이드 개발에 공식언어로 채택된 최신 언어

처음 안드로이드가 만들어졌을때는 자바 언어를 공식언어로 채택 했으나 라이센스 유료화 및 구글과 오라클의 분쟁등으로 인해 새롭게 부상하고 있는 새로운 언어 입니다. Swift 와 함께 가장 최신 언어중 하나로 많은 부분에서 유사한 부분을 찾을 수 있습니다.

특히 Kotlin 은 문법만 제공하고 실제 컴파일되어 실행되는 환경을 자바 혹은 자바스크립트를 선택할 수 있으며 향후 다른 플랫폼으로도 확대가 추진되고 있어 주목할 만 합니다.

참고 자료