저는 질문을 던지는 방식으로 글을 써 내려갈 생각입니다.
1학년 교양수업 때 들었던 내용인데, 질문을 던지는 방식은 좋지 않은 글쓰기 방식이라고 하더군요.
질문을 던졌다면 그에 대한 답변이 있어야 완결성 있는 글이 되는데, 독자가 생각하는 답과 글쓴이가 내놓은 답이 다를 경우가 많기 때문이라고 합니다.
하지만 제 생각을 정리하기 위해 쓰는 글이기 때문에 질문을 던지고 해답을 찾아내는 방식으로 앞으로의 글을 써내려 가도록 하겠습니다.
그리고 여러분은 제가 던진 질문에 대답을 해보는 것이 좋을 것입니다.
먼저 대답을 해보고 다른 사람의 의견을 듣는 것과 그냥 넘어가는 것의 차이는 엄청나기 때문입니다.
몰라도 추측을 해보세요. 형사가 현장에 도착하자마자 모든걸 알아내지 못합니다. 근거를 바탕으로 생각해 추리를 하는 것입니다. 우리도 항상 "왜 이런 혈흔이 생겼을까?" 와 같은 생각을 해봐야 합니다. 그렇게 여러 사건을 맡다 보면 어느새 베테랑 형사가 되어있겠죠.
컴퓨터는 논리적인 장치입니다. 때문에 컴퓨터로 개발하는 사람은 논리적이어야 합니다. 질문을 봤다면 그냥 모르겠다고 생각하고 넘어가지 마세요. 모르니까 이 글을 통해 생각하고 배우는 것입니다.
또한 컴퓨터엔 정답이 없습니다. 자신이 만든 대로 동작하는 것이 컴퓨터입니다. 대답하는 것을 망설이지 마세요, 하지만 모든 답들엔 근거가 있어야겠죠.
* * *
그렇다면 첫 번째 질문을 던져보겠습니다.
왜 개발을 배우기 위해 컴퓨터에 대해 알아야 할까요?
막연하게 "개발자니까 알아야 한다." 라고 생각할 수 있겠지만, 조금 더 구체적으로 생각해봅시다.
여러분은 피씨방에 한두 번쯤 가보았을 것입니다.
피씨방 앞에 홍보문구를 어떻게 적어두었는지 기억나십니까?
사양에 관한 게 적혀있죠.
그렇다면 왜 홍보문구에 사양들을 적어놓았을까요?
그림1. 사양을 강조하는 PC방 홍보자료
컴퓨터를 잘 모르는 사람도 게임을 돌리기 위해 고사양의 컴퓨터가 필요한 것을 알기 때문입니다.
개발을 함에 있어서도 자신이 만들려는 프로그램에 맞는 사양의 컴퓨터를 맞출 수 있어야 합니다
무언가를 만들려고 하는데 그것의 기반을 알아야 그 위에서 무엇이 만들어지는지 알 수 있다는 것입니다.
예를 들어 서버를 구축하기 위해선 사용자가 몇 명이고, 얼마만큼의 데이터를 저장해야 하는가 등을 고려해야 합니다. 그렇게 필요한 사항들을 나열 한 뒤 우리는 각각의 요구사항을 충족시키기 위해 메모리는 얼만큼 필요한지, 하드디스크의 용량이 어느 정도가 적당할지 등을 고민하게 됩니다.
여러분이 어느 정도의 실력을 갖춘 개발자가 된 다음 이 글을 다시 보게 된다면, 왜 첫 시간에 이러한 공부를 했는지 공감하게 될 것입니다. 그리고 이 글을 통해 더 많은 것을 볼 수 있게 될 것입니다.
지금은 천천히 알아간다는 느낌으로, 워밍업 한다고 생각하고 읽어주시길 바랍니다.
* * *
이제 본격적으로 시작해보겠습니다.
컴퓨터 부품엔 무엇이 있을까요?
CPU, RAM, 메인보드, 그래픽카드, 하드디스크, 파워서플라이, ODD, 사운드카드, 쿨러 등 다양한 부품들이 있습니다.
그렇다면 이 부품들이 어디에 위치하는지는 아시나요?
가장 좋은 방법은 자신의 컴퓨터를 분해해보고 그 내용물을 확인해 보는 것이지만 그럴만한 여건이 되지 않는 분은 검색을 통해 쉽게 찾아 보시길 바랍니다.
이제 부품들이 무슨 역할을 하는지 알아봅시다. 그냥 알아보면 너무 막연하니까 컴퓨터의 전원버튼을 눌러 부팅하는 상황을 따라가며 알아보도록 하죠.
사실 부팅은 엄청나게 많은 단계를 거치지만 필요한 단계만 설명하도록 하겠습니다.
컴퓨터를 부팅하면 어떤 장치가 가장 먼저 켜질까요?
1. 파워서플라이가 가장 먼저 켜집니다.
만약 스마트폰의 전원버튼을 눌렀는데 전원이 켜지지 않는다면 그 이유가 뭘까요? 아마 배터리가 없기 때문이겠죠. 스마트폰에선 배터리가 전원을 공급해준다면, 컴퓨터의 전원공급은 파워서플라이가 해줍니다. 만약 컴퓨터를 맞춰야 하는 상황이 온다면 자신의 부품들이 필요로 하는 WATT를 충분히 공급 해 줄 수 있는 파워서플라이를 구매해야겠죠.
전원버튼을 누르게 되면 파워서플라이는 외부로부터 들어온 전압을 검사하여 현재 시스템에서 사용할 수 있는 전압으로 변환시켜 메인보드와 하드디스크에 보냅니다.
2. 전기를 받은 메인보드는 메인보드에 꽂힌 부품에 필요한 만큼 전기를 나눠줍니다.
그렇다면 메인보드엔 어떤 부품들을 꽂을 수 있을까요?
일반적인 메인보드는CPU, RAM, 다양한 확장카드들을 꽂을 수 있으며, 플래시ROM과 시스템 클럭이 내장되어있고, 컴퓨터전원 공급 장치로부터 전기를 받아 CPU, 칩셋, 메인 메모리, 확장 카드에 이를 내보내는 전원 커넥터 및 회로를 가지고 있습니다.
한마디로, 메인보드는 여러 부품을 꽂을 수 있고, 꽂힌 부품에 전기를 나눠주는 역할을 합니다.
3. 메인보드에서 변환된 전기적 흐름은 CPU로 전달되어 CPU가 가지고 있는 이전의 값들을 지우고 CPU 레지스터인 Program Counter(PC)를 초기화시킵니다. (초기화되는 값은 보통 0xF000 값을 가지는데 이 값은 메인보드에 위치한 ROM BIOS의 부트 프로그램(boot program or bootstrap)의 주소 값을 가리킵니다.)
그렇다면 CPU는 어떤 역할을 할까요?
CPU는 central processing unit의 줄임말로 한글말로 중앙 처리 장치 입니다. 행정과 정치에서 권한과 재원이 중앙 정부로 일원화되어 있는 모양을 중앙집권이라고 하듯, CPU혼자서 프로그램을 처리(정보를 입력하고, 기억하고, 연산하고, 외부로 출력)한다는 것입니다. CPU는 컴퓨터 부품과 정보를 교환하면서 컴퓨터 전체의 동작을 제어합니다.
여기서 연산은 무엇일까요?
계산한다는 것입니다. CPU는 이진DATA(0과1, digital data)를 연산합니다.
그림2. 작업관리자를 통해 현제 CPU와 RAM의 사용 현황을 볼 수 있다.
4. 다음 단계로 시스템의 비디오 구성요소들(비디오 메모리 등)을 테스트합니다. (이 과정이 완료된 후에야 비로소 표준출력을 이용해 부팅과정에서 정의된 출력을 볼 수 있게 됩니다.)
그렇다면 그레픽카드의 역할은 무엇일까요?
디스플레이에 보여주는 것, 즉 화면에 무언가를 출력해주는 것입니다.
그런대 왜 굳이 그래픽카드가 필요할까요?
여러분께서는 컴퓨터를 어떤 용도로 사용하시나요? 많은 분들이 게임을 할 때 컴퓨터를 쓰시는데요. 고사양 게임들은 보통 좋은 그래픽카드를 요구합니다. 요즘 게임은 3D엔진을 많이 이용하는데, 게임에서 내가 화면으로 보는 것뿐만 아니라 카메라를 돌려 볼 수 있는 화면 바깥의 영역도 미리 연산해두어야 하기 때문에 많은 연산이 요구됩니다. 이를 CPU가 다 처리하지 못하기 때문에 폭발적인 연산을 할 수 있는 그래픽카드가 필요하게 되는 것이죠. 또한 그래픽 카드는 연결할 수 있는 모니터의 개수도 결정합니다.
5. 다음 단계로 RAM을 테스트합니다. (RAM을 테스트 하는 장면은 컴퓨터 부팅 과정에서 모니터 화면을 유심히 본 사람이라면 누구나 한번쯤 보았을 것입니다. 현재 RAM에는 ROM BIOS와 비디오 BIOS에서 읽어 들인 데이터가 존재할 것입니다. 따라서 해당 데이터가 정상적인지 테스트를 하게 됩니다.)
그렇다면 RAM의 역할은 무엇일까요?
RAM은 책상 같은 것입니다. 하드디스크는 책장으로 비유할 수 있겠네요. 작업할 것을 하드디스크에서 꺼내 RAM에서 작업을 하고 그 결과물을 다시 하드디스크에 저장한다고 생각하면 좋겠습니다. 스마트폰으로 어플리케이션을 시작시키면 그 어플리케이션이 어디로 갈까요? RAM으로 갑니다. 모든 프로그램은 실행시키면 RAM으로 갑니다. 그렇다면 실행시킨 프로그램만 올라갈까요? 완전히 종료하지 않은 프로그램, 기본적으로 필요한 프로그램 또한 RAM으로 올라갑니다. RAM은 실행되는 프로그램이 올라가는 공간입니다.
그림3. 현재 RAM에 올라와있는 프로그램들
6. 다음 단계로 부트 프로그램은 운영체제를 로드하기 위해 인식한 드라이브(하드디스크) 내에서 첫 번째 섹터를 읽습니다.
그렇다면 하드디스크의 역할은 무엇일까요?
하드디스크는 순차접근이 가능한 컴퓨터의 보조 기억 장치입니다. 위에서 말씀 드렸듯이 하드디스크는 책장으로 비유할 수 있으며, RAM에서 처리한 데이터를 보존하는데 쓰입니다.
기본적으로 이러한 단계를 거쳐 explorer.exe 가 실행되고 우리에게 익숙한 바탕화면을 볼 수 있게 됩니다.
지금까지 부팅과정을 통해 컴퓨터 각 부품의 기능들을 살펴보았는데요.
다시 한번 생각해 보겠습니다.
컴퓨터 부품에 대해 공부한 이유가 무엇일까요?
부품들이 어떤 역할을 하는지 알아야 개발을 하는데 필요한 컴퓨터를 구성할 수 있기 때문입니다. 여러분들이 지금까지 공부한 내용이 모두 근거가 될 것입니다. 난 초당 1억번에서 10억번이 처리되어야 할만큼의 컴퓨터가 필요한데 각각의 부품들이 뭘 하는지 모른다면 어떻게 컴퓨터를 구성하겠습니까. 슈퍼컴퓨터 살 수도 없는 노릇이죠. 의사가 진단을 할 때 문진을 통해 어떤 병에 걸렸는지 찾아내 필요한 약을 처방해주듯. 부품마다의 역할을 알고 필요한 부품을 구매하실 수 있어야 합니다.
여러분은 어떤 용도로 컴퓨터를 사용하나요? 여러분의 주 용도에 맞게 컴퓨터를 맞춰보세요. 60만원을 기준으로 최적화된 컴퓨터를 맞춰봅시다. 물론 부품별로 선택한 근거를 제시할 수 있어야겠죠?