컴퓨터 구조의 큰 그림

jihun4452·2025년 8월 16일

CS

목록 보기
1/2

들어가며

평소에 시간이 없었는데 요즘은 시간이 조금 남아서 그동안 관심있던 CS, TDD나 개발할때의 팁들을 공부해보고자 한다.
이 CS책은 매일 30-40페이지 가량 읽고 정리를 할 예정이다. 물론 당연히 못하는 날도 있을테지만 말이다.
전에도 내가 CPU스케줄링 관련으로 하나 적었었는데, 그것도 다시 한번 볼 예정이다 휘발됐다..
여튼 계속 꾸준하게 내 스타일대로 글을 적어보겠다. 내가 알아보도록,,

원리를 모르는 개발자는 뛰어난 개발자가 아니다.

책에는 이렇게 적혀있다. "프로그램이 작동하기만 하면 프로그램의 실행 원리를 이해하지못해도 개발의 목적을 이룬것일까?"
나는 아니라고본다. 요즘 흔히 바이브코딩이 유행이고 좋지만 ,이해하지못하면 나중에 유지보수를 잘 못할거라고 생각한다.
이 책에서도 개발의 목적은 "제대로 작동하게 만드는것이다." 일단 작동만 하는 코드가 아니다.

일단 작동만 하는 코드 vs 제대로 작동하는 코드

일단 작동만 하는 코드는 겉보기에만 작동하는 것처럼 보일 뿐이다. 언제든 개발자가 간과했던 지점이 발생이 될 수 있고,
개발자의 의도와는 전혀 다른 방향으로 프로그램을 사용할 수 있기 때문이다.

그냥 무작정 소스코드 복사해오고, Ai에게 코딩을 맡겨 가져오면 안된다. 가져올거면 최소한 이해라도 하고 가져와라<- 제생각입니다.

어느 누가 웹사이트를 이렇게 만들었다면, 생각보다 엄청나게 많은 오류를 마주치게됩니다. 책이나, 강의등의 오류에 나오지않은
그런 오류들입니다. 프로그램의 사용자가 예상치못한 기능을 요구할때도 말이고요, 하지만 이렇게 만든 당사자는 멍하니
보기만 할 뿐입니다. 자신이 작성한 코드조차 모르는데 여기서 아무곳에도 나와있지 않은 기능을 구현합니까?

요즘 대부분은 서치나 ai에게 물어보면 답이 나오지만 클래스가 많아지고 여러가지 변수가 작용하면 과연 잘 적용 시킬 수 있을까요?

내가 작성한 코드의 실행과정을 모르면 나조차 설명할 수 없을만큼 더 큰 어려움으로 다가옵니다.
이럴경우에 일단 서치한 후에 예제코드를 복사해서 해결합니다. 그렇지만 이런식으로 두세번 ... 여러번이 돼서
나중에 코드를 봤을때는 스파게티 코드가 되어있을 것입니다.


이런식으로요

이해할 수 없는 코드는 책임질 수 없다 라는 것입니다. 뛰어난 개발자는 결국
문제를 정의하고 해결할 수 있어야합니다. 프로그램을 제대로 이해하는것,, 어떠한 과정을 거쳐 프로그램잉 실행되는지를
설명하는 것부터 시작됩니다.

이런것을 알기위해 컴퓨터 과학을 이해해야합니다. CS라고도 불립니다.

단순 프로그래밍 언어의 기초 문법, 프레임워크등 사용법을 넘어 작동원리를 이해하고 설명하려면 CS에 대한 학습이 필요합니다.

CS는 암기가 아니다, 이것은 이해해야한다.

어떤 면접에 들어갔는데 ,책에서 보고 그것을 달달 암기해서 외워갔어도 다른 질문이 나온다. 만약 책에서만 잘 나왔다더라도
꼬리물기 질문을 하면 답이없을 것이다.

실무에서 발생하는 문제도 마찬가지입니다. 잘 되던 네트워크가 끊겼을 때 어떻게 해결하면 좋을까요? 문제를 명확하게 정의해
해결에 필요한 컴퓨터 지식들을 떠올리고 차근차근 해결해야합니다.

컴퓨터 구조의 큰 그림 -1

컴퓨터는 자바나 C++등의 언어를 이해하지못한다. 컴퓨터가 이해할 수 있는 정보는 따로있습니다.
데이터와 명령어 입니다. 컴퓨터의 명령어는 수행할 동작과 수행할 대상으로 이루어져있습니다.
데이터는 숫자, 문자 , 이미지, 동영상과 같은 정적인 정보를 의미합니다.
잘 살펴본다면 명령어는 이 데이터를 활용하는 정보라는 것을 알수 있습니다. 데이터는 명령어에 종속적 정보이고
명령의 대상이자 명령의 재료라고 할 수 있습니다.

명령어를 실행하는 주체가 바로 컴퓨터의 핵심 부품중 하나인 CPU입니다. 명령어를 이해하고 실행하는 주체가 CPU라는 말은
CPU의 종류에 따라 실행 가능한 세부적인 명령어의 종류와 처리의 양상이 달라질 수 있음을 의미합니다.

컴퓨터의 주요 부품은 정말 많습니다. CPU, 메모리와 캐시 메모리, 보조 기억장치, 입출력 장치입니다.

대충 이런 짤도 있습니다.

CPU

컴퓨터가 이해하는 정보에는 크게 데이터와 명령어가 있습니다. 이러한 정보를 읽고, 해석하고 실행하는 부품이 바로 CPU입니다.
다행히 개발자가 정교한 CPU의 내부회로까지 알아야하는 일은 드뭅니다. CPU내부에도 산술논리연산장치와 제어장치를 포함한
여러가지의 장비들이 있습니다.

산술논리연산장치
연산을 수행할 회로로 구성되어있는 일종의 계산기입니다.

제어장치
명령어를 해석해 제어신호라는 전기 신호를 내보내는 장치입니다. 제어신호란 부품을 작동시키기 위한 신호를 말합니다.

레지스터
CPU내부의 작은 임시 저장장치로 데이터와 명령어를 처리하는 과정의 중간값을 저장합니다.
CPU내에는 여러개의 레지스터가 존재하고, 각기 다른 이름과 역할을 가지고 있습니다.

CPU가 처리하는것은 반드시 레지스터에 저장되기 때문에 레지스터 값만 잘 관찰해도 프로그램이 어떻게 실행되는지
낮은단계에서 바로 파악이 가능합니다.

메모리와 캐시메모리

메인메모리 역할을 하는 하드웨어에는 RAM과 ROM이 있습니다. 보통 메인메모리 용어는 RAM을 지칭을 많이합니다.
실행중인 프로그램을 구성하는 데이터와 명령어를 저장하는 부품입니다.
메모리가 기억할 배경지식중 하나는 주소라는 개념이고, 휘발성이라는 개념입니다. 메모리는 항상 어딘가에 정돈이 되어 있어야하는데
이것의 개념이 바로 주소입니다.

휘발성은 전원이 공급이 없을때, 즉 전원이 들어와있지 않을때 저장된 걸 모두 날려버립니다. 중요한 특성이므로
기억해두는것이 좋습니다.

캐시메모리는 CPU가 조금이라도 더 빨리 메모리에 저장된 값에 접근하기 위해 사용하는 저장장치입니다.
캐시메모리는 CPU안과 밖 모두 존재가 가능합니다.

보조기억장치

메모리는 휘발성 저장장치라고 했습니다. 그래서 컴의 전원이 모두 꺼지면 모두 잃는데 이를 보조하기 위한것이
보조기억장치입니다. 이건 비휘발성입니다. CD-ROM이나 DVD 하드디스크 드라이브등이 보조기억장치의 일종입니다.

지금날의 보조기억장치는 하드디스크, SSD, USD, SD카드가 있습니다.

메모리가 현재 실행 중인 프로그램을 저장한다면 , 보조기억장치는 보관할 프로그램을 저장 한다고 볼 수 있습니다.

입출력 장치

이것은 컴퓨터 내부와 외부에 연결 정보를 교환하는 장치를 말합니다. 예를 들어 마우스 키보드등과 같은것입니다.
참고로 보조기억장치와 입출력 장치는 완전히 배타적인 개념이 아닙니다. 결국 메모리를 보조하는 임무를 수행하는
특별한 입출력 장치로 볼 수 있습니다. 보조기억장치와 입출력 장치를 주변장치라고 통칭하기도 합니다.

메인 보드와 버스


메인보드는 대충 이렇게 생겼고, 이것을 마더보드라고도 불립니다.
컴퓨터 핵심 부품을 비롯한 부품들을 연결할 수 있는 슬롯과 연결 단자들이 있습니다.

이때 각 주요 정보를 주고받는 통로를 버스라고 합니다. 버스의 종류는 다양하지만 핵심 부품들을 연결하는시스템버스 가 가장
중요하다고 볼 수 있겠습니다.

CPU와 가까운 저장장치는 빠르고, 멀리있는 저장장치는 느립니다.
속도가 빠른 저정장치는 용량이 작고, 가격이 비쌉니다.

마치며

CS가 막상 어려운것보다, 재밌는 짤들을 찾으면서 하니까 생각보다 재밌는 거 같아서 공부에 흥미가 생기네요
앞으로도 꾸준히 공부 해보겠습니다!
대충 정리 했습니다(앞뒤로 더 있습니다).. 필기하고 velog로 알아볼 수 있게 정리 할 예정입니다.

오늘의 대충필기(앞뒤로 더있음)

profile
뭐든지 기초가 중요합니다.

0개의 댓글