본문 바로가기

STUDY LOG

💻 IT 프로그래밍 개발을 위한 얕고 넓은 배경지식 (1)

728x90
반응형

IT 프로그래밍 개발을 위한 얕고 넓은 배경지식 (2)

 

컴퓨터의 구성(소프트웨어, 하드웨어, 펌웨어), OS의 구조(커널, 셸, CLI, GUI)에 대한 포괄적인 배경지식을 비전공자의 입장에서 쉽고 간략하게 작성해보았습니다. 여러가지 공부를 하면 할 수록, IT 프로그래밍 개발을 위한 기초지식이 탄탄해야 한다는 것을 체감합니다.

 

 

 

 

컴퓨터

 

컴퓨터는 하드웨어+소프트웨어+펌웨어의 구성체를 말합니다.

 

 

 

 

 

 

소프트웨어

 

 

소프트웨어는 컴퓨터의 시스템을 구성하는 주요 요소 중 하나입니다. 응용 프로그램과 데이터처럼 컴퓨터의 하드웨어 상에서 구동되거나, 처리되는 무형물을 뭉뚱그려 지칭하는 말입니다. 통상 프로그램=소프트웨어로 쓰이지만, 소프트웨어가 보다 큰 개념으로 프로그램을 포함합니다.

 

프로그램은 입력물(Input)에 대한 사용자의 명령에 따라 결과를 출력(Output) 해주는 소프트웨어를 말하며, 컴퓨터를 구동시켜주는 운영체제(OS) 및 어플리케이션(응용 프로그램), 유틸리티 등을 통칭합니다.

 

데이터는 프로그램 이외의 모든 소프트웨어를 지칭합니다. 프로그램을 실행하는데 필요한 데이터, 각종 미디어/파일/문서 등 매우 다양한 유형의 데이터가 있습니다. 

 

 

 

 

하드웨어

 

 

 

하드웨어는 소프트웨어와 함께 컴퓨터를 구성하는 필수 요소 중 하나입니다. 비유하자면 인간의 몸의 해당하는 부분이기 때문에 없어서는 안됩니다. 기본적으로 입출력장치, 연산장치, 기억장치, 제어장치로 나눌 수 있으며, 전원과 연결장치를 추가하여 나누기도 합니다.

 

하드웨어를 큼직큼직하게 CPU, 메모리, 디스크로 나눠보겠습니다.

 

 

 

 

 

 

CPU


CPU는 중앙처리장치(Central Processing Unit)의 약자로,

컴퓨터 시스템을 통제하고 프로그램이 돌아가기 위한 모든 연산을 맡는 장치입니다. 

 

 

 

 

 

메모리


메모리는CPU가 진행중인 연산들의 결과를 임시로 저장했다가 다시 CPU에 돌려주고, 다시 저장하고 돌려줍니다. 이렇게 함으로써 프로그램이 실행 될 공간을 제공하는 역할을 합니다. 프로그램을 종료하면 사용중이던 메모리에도 차지하고 있던 공간을 돌려줍니다. 


메모리의 종류는 RAM과 같은 주기억장치 뿐만 아니라 CPU 레지스터, 캐시 등 단위당 가격/성능/용량으로 구분되는 다양한 장치고 구성됩니다. 넉넉한 메모리 용량은 더 많은 정보를 처리할 수 있고 더 많은 프로그램을 동시에 이용할 수 있도록 해 줍니다. 따라서 액세스 속도와 지원하는 용량의 크기가 중요시되는 장치입니다.

 

 

 

 

 

디스크


디스크는 데이터를 영구적으로 저장하는 장치입니다. 메모리가 프로그램을 실행하는 동안 필요한 만큼의 공간을 임시로 렌트해주는 곳이라면, 디스크는 프로그램을 영구적으로 저장하는 공간이라고 할 수 있습니다.
따라서 메모리보다 액세스 속도는 좀 떨어지더라도 월등히 큰 용량을 필요로 합니다. 액세스 속도와 저장용량에 따라 SSD, HDD 등 가격과 종류가 나뉩니다. 


이러한 CPU, 메모리, 디스크, 전원 등 수 많은 부속품들은 각각 따로 놀지 않고 하나로 연결되어 작동합니다.

이러한 연결을 위한 회로와 신호를 내보낼 수 있는 출력 포트를 가진 부품이 필요한데, 이 기능을 지원하는 부품이 바로 메인보드(마더보드) 입니다. 컴퓨터 성능과는 직접적인 연관성이 없다고 알려져 있지만, 이 보드의 품질에 따라 컴퓨터의 안정성을 좌우하는 부품입니다.

 

 

 

펌웨어

 

 

하드웨어는 컴퓨터 시스템의 구성품 중에서 손으로 직접 만질 수 있는 물리적인 모든 것, 즉 본체의 모든 부속품 및 모니터, 키보드 등을 의미합니다. 그리고 소프트웨어는 물리적으로 존재하진 않지만 논리적으로 존재하는 것, 즉 운영체제와 각종 응용프로그램들을 말합니다.

 

그렇다면 펌웨어는 뭘까요? 펌웨어는 하드웨어와 소프트웨어의 특성을 모두 갖춘 것 이라고 말합니다.

 

 

소프트웨어를 통해 전달된 정보를 받아들인 하드웨어는 내부의 논리 회로를 거쳐 사용자가 원하는 형태의 결과물을 출력합니다. 그런데 컴퓨터 시스템의 활용 범위가 넓어지고, 소프트웨어에서 전달되는 정보 역시 커지다보니 하드웨어에 따라 제한되어 있는 논리 회로만으로는 대응할 수 있는 부분이 부족해지기 시작합니다.

 

 

물론, 새로운 소프트웨어가 등장할 때마다 이를 지원하는 논리 회로를 추가한 하드웨어를 새로 만들 수도 있겠지만, 이렇게 되면 큰 낭비가 발생합니다. 그래서 개발자들은 하드웨어 내부의 제어 공간에 저장공간을 만들어, 그곳에 논리 회로의 기능을 보강하거나, 대신할 수 있는 프로그램을 넣을 수 있도록 하였습니다. 이것이 바로 펌웨어(Firmware)입니다.

 

 

 

 

같은 종류의 하드웨어라고 해도, 내부의 펌웨어가 달라지면 기능이나 성능, 사용하는 소프트웨어의 종류가 달라질 수 있습니다. 펌웨어는 프로그램의 형태를 갖추고 있으므로 기능적으로는 소프트웨어에 가깝지만, 하드웨어 내부에 위치하며 사용자가 쉽게 그 내용을 바꿀 수 없으므로 하드웨어의 특성 역시 함께 가지고 있다고 말할 수 있습니다.

 

 

흔히 볼 수 있는 펌웨어의 형태는, PC의 전원을 켜면 윈도우 진입 화면 직전에 잠시 뜨는 BIOS 정보가 있습니다. BIOS는 메인보드에 위치하며, PC의 기본적인 입출력 기능을 담당하는 펌웨어의 일종으로, 업데이트도 가능합니다. 컴퓨터처럼 복잡한 장치에서는 소프트웨어 작동을 위한 환경을 제공한다고 할 수 있으며, 보다 단순한 장치에서는 펌웨어 자체로 운영체제의 역할을 할 수 있습니다. (휴대폰, 인터넷 공유기, 냉장고, 드론 등)

 

 

 

 

소프트웨어와 펌웨어의 차이를 정리하면 다음과 같습니다.

 

소프트웨어(Software) 펌웨어(Firmware)
하드웨어를 통해 실행되는 대화형 응용 프로그램
하드웨어가 올바르게 작동하고,
상위 수준의 소프트웨어에서
하드웨어를 사용할 수 있도록 만들어주는 장치


기본 CPU에서 실행된다


기본 CPU에서 실행되지 않고, 
더 작은 프로세스에서 자주 실행된다


장치가 작동하는 데 그다지 중요하진 않지만,
장치가 특정 작업과 목적을 실행하는데 특화되어 있음

장치가 작동하는데 필요하며
가장 기본적인 기능을 수행하는 데 도움이 되는 영구적인 장치
새로운 버전의 릴리즈나 버그의 픽스,
또는 사용자의 필요에 따라 업데이트가 권장된다

장치가 문제없이 작동하고 있다면
안정적인 작동을 위해 업데이트를 권장하지 않는다
(*바이오스는 잦은 업데이트를 권장하지 않습니다*)

 

 

 

 

 

 

 

 

OS(운영체제)

이미지출처: velog

 

OS는 Operating System의 줄임말로, 운영체제를 뜻합니다.

 

운영체제는 하드웨어와 소프트웨어를 관리하는 소프트웨어 전체라고 할 수 있습니다. 운영체제에 대한 정의는 조금씩 다르고, 한 가지 의미로 엄밀하게 정의하지 않는 특징이 있습니다. 기기의 자원을 효율적으로 관리하기 위한 시스템, 컴퓨터를 쉽게 다룰 수 있게 해 주는 인터페이스 등 관점에 따라 다양하고 포괄적인 정의를 쉽게 찾아볼 수 있습니다.

 

 

우리가 일반적으로 생각하는 운영체제(OS)는 꼭 PC용 윈도우나 맥 iOS가 아니어도, 어느 기기에서 어떠한 형태로든 나타날 수 있습니다. 예를 들어, 오디오 장치를 켜면 전원이 들어오고, 사용자의 명령에 따라 음악을 재생하거나 멈추는 등 각종 동작을 관리하는 것도 모두 운영체제라고 할 수 있습니다.

 

 

그래서 일반적인 OS의 의미에 조금 더 직접적으로 접근하고자 할 땐, '커널'이 포함된 패키지로 정의하게 됩니다. 커널은 운영체제의 심장이자 운영체제를 규정짓는 매우 중요한 프로그램입니다.

 

 

 

 

 

커널

이미지 출처: 위키백과

 

커널은 드라이버를 이용해 CPU나 그래픽카드와 같은 하드웨어를 제어하고, 여러 응용 프로그램들이 갖가지 다른 하드웨어 위에서 돌아갈 수 있는 인터페이스를 제공합니다. 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 프로세스 제어, 메모리 제어, 프로그램이 운영체제에 요구하는 시스템 콜 등을 수행하는 부분으로 운영체제의 가장 하부에서 동작합니다. 

 

 

우리가 많이 사용하는 OS들은 커널 위에 여러가지 레이어를 올린 것입니다. 예를 들어 안드로이드의 커널은 리눅스입니다. 그래서 커널이란 운영체제에 없어서는 안되고, 운영체제의 정체성을 결정하는 매우 중요한 요소라고 할 수 있습니다.

 

 

 

 

 

 

셸(Shell), CLI와 GUI

 

이미지 출처: Linoxide

 

 

 

하드웨어 위에 커널(Kernel)이 올라가고, 그 위에서 셸(Shell)과 어플리케이션(Application)이 실행됩니다. 셸 또한 커널 위에서 돌아가는 프로그램입니다. 화면 상에서 사용자가 볼 수 있는 요소로 사용자의 지시를 해석하여 커널에 전달하는 역할을 맡습니다.

 

우리는 기본적으로 셸(Shell)을 통해 어플리케이션을 실행합니다. 윈도우의 explorer.exe(파일 탐색기)나 리눅스의 bash같은 프로그램이 셸(Shell)에 해당됩니다. (*cf. 인터넷 익스플로러는 iexplorer.exe 입니다)

 

 

 

https://ao.gl/comparing-interface-types-in-cyber-forensics/

 

셸(Shell) 프로그램을 그래픽 기반의 인터페이스로 제공하게 되면, 

사용자가 컴퓨터 언어를 전혀 모르더라도 쉽고 편리하게 컴퓨터를 이용할 수 있게 됩니다.

 

우리가 일반적으로 컴퓨터를 사용할 때는 마우스로 원하는 아이콘을 클릭하여 간편하게 실행하죠?

이러한 방식을 GUI(Graphic User Interface) 조작방식이라고 합니다. 

 

기존에는 이 모든 종류의 명령어를 직접 문자를 입력하여 조작해야 했습니다.

이러한 조작 방식을 CLI(Command-Line Interface)라고 합니다.

대표적으로 윈도우의 까만 커맨드 창(cmd.exe)을 떠올릴 수 있습니다.

 

 

 

 

 

 

GUI와 CLI의 차이를 쉽게 설명하자면, CLI는 음식점에서 음식을 주문할 때 점원에게 주문>음료선택>종류: 콜라> 수량: 1캔... 등등 주문 내용을 일일이 문자로 입력해서 전달하는 것입니다. GUI는 메뉴판에서 원하는 것을 가리키며 달라고 하는 것과 같습니다.

 

 

외국어를 전혀 모르더라도 그림이 있는 메뉴판이 있으면 원하는 음식을 주문할 수 있듯이, GUI를 제공하면 사용자가 컴퓨터 언어를 전혀 모르더라도 컴퓨터를 조작할 수 있게 되는 것입니다.

 

 

 

 

CLI와 GUI의 보다 구체적인 차이점은 다음과 같습니다

비교 근거 CLI GUI
기본
시스템과 통신을 위한 명령어를 직접 문자로 입력

이미지, 아이콘 등을 통해 시스템과 상호작용
입력장치
키보드

키보드 및 마우스
수행 난이도
작업을 수행하기 어렵고, 전문적인 지식 필요

작업을 수행하기 쉽고, 전문적인 지식 불필요
정확도
높음

낮음
메모리 소비량
낮음

높음
유연성
비타협적

유연함
모양(외관)
변경불가

커스텀 인터페이스 설정 가능
속도
빠름

느림
통합 및 확장성
잠재적인 개선 범위

한계 명확

비교자료 출처: techdifferences.com

 

 

 

CLI와 GUI는 각각의 장단점이 있으며, 사용자의 요구사항 및 사용환경에 따라 적절하게 응용할 수 있습니다. GUI는 더 높은 수준의 멀티 태스킹과 편리함, 효율을 제공하지만, CLI는 보다 넓은 제어 범위와 정밀도 및 반복수행 작업을 제공할 수 있습니다.

 

 

 

 

👀 한 번 쯤 구경해볼만 한 추천 IT 제품

 

미니멀한 로지텍 페블 M350 무선 무소음 마우스

"파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다"

 

 

728x90