컴퓨터란 무엇인가에 대한 정의는 이렇게 내릴 수 있습니다.
A machine performing a series of operations fast
직역하면 "일련의 작업(명령어)을 빠르게 수행하는 기계"
이 문장에서 하나 하나 좀 뜯어보겠습니다.
현재 일상생활에 들어와 있는 컴퓨터를 보면 조금은 이질감이 드는 정의이지만, 내부를 잘 뜯어보면 정말 맞는 말입니다. 명령어가 없는 컴퓨터는 없으니까요.
또한 옥스포드 영어 사전(2000)에서는 이렇게 정의합니다.
A calculating-machine; especially an automatic electronic device for performing mathematical or logical operations; frequently with defining word prefixed, as analog, digital, or electronic computer
수학적, 논리적 계산을 처리하기 위한 자동 전자 장치. 이것도 맞는 말이죠.
현대 컴퓨터의 기본적인 구조로 자리 잡고 있는 폰 노이만 아키텍처입니다.

폰 노이만 아키텍처가 기본적인 구조를 제시하긴 했지만, 분명 한계가 존재합니다.
이걸 개선하기 위한 모든 것들이 현대 컴퓨터 발전의 역사라고 볼 수 있겠습니다.
폰 노이만 보틀넥을 해결하기 위해서 하나의 새로운 아키텍처가 등장합니다.
기본적인 아이디어는 "명령어 메모리와 데이터 메모리를 따로 나눠서 두 곳에서 나눠서 받으면 빨라지지 않나?"에서 시작합니다.

병렬 컴퓨팅(Parallel computing)을 사용했다고 볼 수 있죠.
그리고 이후에 수정된 것이 현대의 Caching 기법입니다.
폰 노이만 아키텍처에 따르면 프로그램은 코드화된 명령어들의 순서로 실행됩니다. 메모리는 명령어와 데이터를 모두 저장하고, CPU는 메모리에서 Fetch(가져오기)-Interpret(해석)-Execute(실행)의 과정을 거쳐서 명령어를 실행합니다.
컴퓨터 구조에 대한 정의는 이렇게 내릴 수 있습니다.
The science and art of designing, selecting, and interconnecting hardware components and designing the hardware/software interface to create a computing system that meets functional, performance, energy consumption, cost, and other specific goals.
직역 해보면 이렇습니다. 하드웨어 구성 요소를 설계하고 선택하며 상호 연결하고, 하드웨어/소프트웨어 인터페이스를 설계하여 특정 목표(기능, 성능, 에너지 소비, 비용 등)를 충족하는 컴퓨팅 시스템을 만드는 과학이자 예술입니다.
쉽게 얘기하면 "하드웨어와 소프트웨어 간의 인터페이스를 만드는 것" 이라고 할 수 있습니다.
프로그래머에게 보이는 컴퓨터의 속성
프로그램의 논리적 실행에 직접적인 영향을 미치는 속성
하드웨어가 소프트웨어(또는 프로그래머)에게 제공하는 인터페이스
Ex
Instruction Set Architecture(ISA): Intel x86, ARM, RISC-V, MIPS...
32bit, 64bit architecture
하나당 한 단위씩이므로(KB-MB-GB)
32bit = byte(4GB) 메모리 지원
프로그래머들은 보통 High-Level Language를 사용하여 프로그래밍하게 됩니다.
아래의 사진은 High-Level Language(C)가 실행되는 과정을 나타냅니다.

Compiler -> Assembler -> Linker를 거치는 과정을 통해 실행되게 됩니다.
화면의 아이콘을 클릭하여 애플리케이션 프로그램을 실행하면 다음과 같은 순서를 따릅니다.
사실 컴퓨터 구조라는 과목은 소프트웨어 쪽 설계 보다는 하드웨어적인 설계에 가까우며, 컴퓨터공학 보다는 전자공학에 조금 더 가깝다고 이야기할 수 있습니다.
그럼에도 컴퓨터공학을 전공하는 학생들에게 이 과목이 필수인 이유는 기본적으로 컴퓨터 내에서 어떤 일들이 일어나고 있는지를 이해하면 문제가 발생하거나, 성능 개선을 해야하는 측면에서 쉽게 접근할 수 있는 능력이 생깁니다.
또한 후행되는 과목인 컴파일러와 운영체제와 같은 주제에서 이해를 도울 수도 있습니다.
엔지니어의 관점에서 두가지 기억해야 할 것이 있습니다.
이러한 관점에서도 컴퓨터구조라는 과목은 이후에 도움이 될 것입니다.
정확성에는 여러 기준이 있겠지만 두가지의 예시를 들어보겠습니다.
두 예시에서 모두 마치(as if)라는 말을 사용하였습니다. 성능을 높이기 위해서 사용한 기술이 다른 값을 도출하면 아무런 의미가 없습니다.
즉,
성능 최적화를 했을 때 그 전과 같은 결과 도출을 보장하는 것
이 정확성의 기준이라고 볼 수 있겠습니다.
추상화는 불필요한 정보를 걸러내면서 단순화하는 작업입니다.
더 복잡한 시스템을 포괄하는 간단한 인터페이스의 역할을 합니다.
