2015.04.09 16:16

다음 주 화요일(2015/04/14) 모교 동아리 신입생들 대상으로 '폰 노이만 아키텍쳐'에 대해 강의할 예정입니다. 강의 내용은 인류가 수와 계산이라는 개념을 어떻게 발전시켜 왔고, 컴퓨터가 어떻게 발명되었는지, 그리고 현대 모든 컴퓨터 구조의 원리를 제시한 폰 노이만 박사의 연구를 설명할 것입니다.


강의를 시작하기에 앞서 질문을 하나 던지고자 합니다.


"컴퓨터는 왜 전기를 필요로 하는가?"


모든 컴퓨터는 전기가 없으면 동작하지 않습니다. 스마트폰 배터리가 떨어질까 전전긍긍하면서 여기저기 콘센트를 찾아 헤매이고, 보조 배터리를 백팩에 무장하고 다니는 것이 현대의 일상적인 풍경이 되어 버렸습니다. 그런데 우리는 -정확히 프로그래머 혹은 지망생들- 컴퓨터가 왜 전기를 필요로 하는지 이해하고 있는 것일까요?


자동차를 동작시키는데 연료가 필요하고, 세탁기를 돌리는데 전기가 필요합니다. 동력기관이 어떤 식으로 움직이는지, 열역학과 동역학에 대한 아주 기초적인 상식을 가지고 있기 때문에 대부분의 사람들은 쉽게 간단하게 설명할 수 있을 것입니다. 하지만, 컴퓨터는 왜 전기를 필요로 할까요? 전기는 어떻게 컴퓨러를 움직이는 것일까요?


어쩌면 하드웨어에 대한 이해와 관심은 소프트웨어 개발자에게 불필요한 지식일수도 있습니다. 그러나 저는 두가지 관점에서 하드웨어에 대한 기초 원리를 이해해야 한다고 생각합니다.


첫번째는 논리적인 사고를 위한 첫걸음입니다. 명령어와 문법, 함수 등을 단지 외우기만 해서는 복잡한 프로그램을 개발할 수 없습니다. 기계- 그것이 전자부품이라고 할지라도 -의 동작 방식을 익히는 것은 소프트웨어에 비해 직관적이기에 더욱 용이합니다. 하드웨어의 동작 방식과 논리 구조를 익힌 후에 소프트웨어를 접할 경우, 소프트웨어의 동작 패턴 또한 기반이 되는 하드웨어에서 데이터가 흘러가고 변화하는 과정으로 머리 속에 그려보면 이해와 응용이 빨라집니다.


두번째는 소프트웨어의 성능 문제와 설계 기법을 익히는데 큰 도움이 됩니다. 거대한 소프트웨어를 설계하기 위해서는 어떤 알고리즘과 자료구조를 사용하는가의 문제 뿐만 아니라, 자신의 소프트웨어를 어떤 하드웨어에서 동작 시키느냐 (PC, 모바일 기기, 클라이언트/서버, 클러스터링, 그리드 등등)에 따라 큰 편차의 성능을 나타내기 마련입니다. 성능 문제는 소프트웨어의 활용가치 뿐 아니라, 존재 가치를 좌우 하기도 합니다. (잘못된 설계는 너무 느리거나, 아예 동작하지 않는 결과물을 만들기도 합니다.)


마지막으로 작고하신 SF 작가이신, 아서 C. 클라크의 명언을 인용합니다.


"충분히 발달한 과학 기술은 마법과 구별할 수 없다."


기술을 제대로 이해하지 못하는 엔지니어는 최신 과학을 접한 고대인과 다를 바 없게 되는 것입니다.


Posted by 善 곽중선