컴퓨터의 주요 구성 요소
현대 컴퓨터는 다음 다섯 가지 기본 구성 요소로 이루어져 있으며, 이들은 유기적으로 협력하여 시스템 전체를 동작시킵니다.
- 중앙처리장치(CPU): 제어장치(Control Unit)와 산술논리장치(ALU)로 구성됩니다. 프로그램 명령을 해석하고 실행하며, 연산 처리를 담당합니다.
- 주기억장치(메모리): 작업 중인 데이터와 명령어를 일시 저장하는 고속 저장 장치입니다. 전원이 꺼지면 내용이 소멸되며, RAM(Removable Access Memory)이 대표적입니다.
- 보조기억장치(외장 저장매체): 데이터를 영구적으로 보관할 수 있는 장치로, HDD, SSD, USB 드라이브, 마그네테이프 등이 포함됩니다. 속도는 느리지만 대용량 저장이 가능합니다.
- 입력 장치: 사용자가 정보를 시스템에 입력할 수 있도록 하는 장비들입니다. 키보드, 마우스, 스캐너 등이 여기에 해당합니다.
- 출력 장치: 처리된 결과를 사용자에게 제공하는 장치로, 모니터, 프린터, 스피커 등이 있습니다.
핵심 하드웨어 간 상호작용
CPU는 모든 연산과 제어를 수행하지만, 직접 외부 저장장치에서 데이터를 읽는 것은 비효율적입니다. 그 이유는 CPU와 보조 기억 장치 사이의 속도 차이가 극심하기 때문입니다. 예를 들어, SSD에서 하나의 파일을 로드하는 동안 CPU는 수십만 개의 명령어를 처리할 수 있습니다.
따라서 프로그램 실행 시에는 다음과 같은 순서로 동작합니다:
- 실행할 프로그램이 외장 저장장치(HDD/SSD)에 저장되어 있음.
- 사용자가 프로그램을 실행 요청하면, 운영체제는 해당 프로그램을 메모리로 적재함.
- CPU는 메모리에 올라와 있는 명령어를 순차적으로 가져와 해석 및 실행함.
이러한 구조는 성능 최적화를 위한 필수 설계이며, 이를 통해 CPU의 높은 처리 능력을 효율적으로 활용할 수 있습니다.
임시 데이터와 영구 저장
프로그램 실행 도중 생성되는 모든 작업 데이터는 처음에 반드시 메모리 상에 존재합니다. 예를 들어, 텍스트 편집기에서 문서를 작성할 때, 저장(save)을 수행하지 않으면 그 내용은 메모리에만 남아 있어 전원 차단 시 즉시 소실됩니다.
현재 대부분의 에디터는 자동 저장 기능을 내장하고 있는데, 그 방식은 두 가지로 나뉩니다:
- 실시간 저장: 문서 변경 사항을 감지하는 즉시 백그라운드에서 저장. 시스템 리소스 사용량은 증가하지만 데이터 안정성은 최고.
- 주기적 저장: 일정 시간 간격(예: 3분)마다 자동으로 저장. 일부 변경 사항이 유실될 위험이 있으나, 시스템 부하가 낮음.
운영체제의 역할
운영체제(OS)는 하드웨어 자원을 통합 관리하고, 애플리케이션이 안정적으로 실행될 수 있도록 중개하는 소프트웨어입니다. 사용자가 "파일 출력" 명령을 클릭했을 때, OS는 CPU, 메모리, 저장장치, 프린터를 조율하여 작업을 완료합니다.
즉, 개발자는 각 하드웨어를 직접 제어하는 복잡한 코드를 작성할 필요 없이, OS가 제공하는 API를 통해 필요한 기능을 호출할 수 있습니다.
대표적인 운영체제는 다음과 같습니다:
- 데스크톱: Windows, macOS, Linux
- 모바일: Android, iOS, HarmonyOS
모든 애플리케이션은 운영체제 위에서 동작하며, OS 설치 없이는 컴퓨터의 정상적인 사용이 불가능합니다.
프로그래밍 언어란 무엇인가?
프로그래밍 언어는 인간이 컴퓨터에 지시를 전달하기 위한 매개체입니다. 자연어처럼 문법과 규칙이 존재하며, 개발자는 이를 통해 알고리즘과 로직을 기록하고 시스템에 실행을 요청합니다.
언어의 진화 과정
1단계: 기계어(Machine Language)
0과 1로만 구성된 바이너리 코드입니다. 컴퓨터는 이를 직접 인식할 수 있지만, 인간이 작성하거나 이해하기 매우 어렵습니다. 예:
11001101 10101011 00110000
개발 생산성이 극히 낮으며, 오류 발생률이 높습니다.
2단계: 어셈블리 언어(Assembly Language)
기계어를 인간 친화적인 심볼로 대체한 언어입니다. 예를 들어 ADD, MOV, JMP 등의 명령어를 사용합니다.
MOV AX, 5
ADD AX, BX
여전히 하드웨어에 종속적이며, 플랫폼 이식성이 낮지만 기계어보다는 이해하기 쉬워졌습니다.
3단계: 고급 언어(High-Level Language)
자연어에 가까운 구문을 사용하여 개발 효율성을 크게 향상시킨 언어입니다. C, Java, Python, Go 등이 여기에 포함됩니다. 예:
x = a + b
print("결과:", x)
컴퓨터는 이를 직접 실행할 수 없으므로, 번역 과정이 필요합니다. 이 과정은 두 가지 방식으로 나뉩니다.
번역 방식에 따른 분류
컴파일형 언어 (Compile-Time Languages)
전체 소스코드를 한 번에 기계어로 변환한 후 실행하는 방식입니다. C, C++, Go 등이 이에 해당합니다.
- 실행 전 컴파일 단계 존재
- 생성된 바이너리 파일은 반복 실행 가능
- 수정 시 다시 전체 컴파일 필요
- 실행 속도가 매우 빠름
예: 문서를 미리 전체 번역해서 저장해 두는 것과 유사합니다.
인터프리터형 언어 (Interpreted Languages)
코드를 한 줄씩 실시간으로 해석하면서 바로 실행합니다. Python, JavaScript, PHP 등이 대표적입니다.
- 별도의 컴파일 과정 없음
- 실행 시마다 해석이 반복됨
- 수정이 용이하고 개발 주기가 짧음
- 성능은 일반적으로 컴파일형보다 낮음
예: 회의 중 말할 때마다 동시통역을 받는 것과 비슷합니다.
최근에는 하이브리드 방식도 등장하여, 예를 들어 Java는 바이트코드로 컴파일한 후 JVM에서 해석 실행하는 방식을 취합니다.