만다라트 계획 중간 점검
정보처리 기사 실기 접수는 다음 주부터다. 커리어 패스에서 정처기를 취미 삼아 준비했던 초창기와 달리, 이제는 다시는 되돌아가지 못할 요단강을 건너가려는 중인 거 같다.
C 언어를 공부하면서 왜 중도에 포기하는 사람이 많은지 알 거 같았다. C는 결코 쉬운 언어가 아니기 때문이다. 하지만 C를 제대로 코딩할 줄 안다는 의미는 컴퓨터를 제대로 아는 사람과 이퀄(==) 수준이라는 것을 깨달았다.
심지어 IT 종사자는 C를 할 줄 아는 사람과 C를 할 줄 모르는 사람으로 구분하는 게 맞지 않을까라는 생각까지 뻗쳤다. 제아무리 간판이 IT 전공자든, IT 종사자든 C 언어로 자신이 생각하는 것을 체계적(알고리즘적 사고)으로 코딩하지 못하면, 컴퓨터의 Z는커녕 A도 모르는 사람이라고 말할 수 있다.
애당초 C 언어를 만든 데니스 리치도 유닉스(멀틱스, 기업의 상용 OS였고 현재 맥 OS도 이 시스템이 뿌리다.)의 이식성* 문제를 해결하기 위해 만들었다. 1972년도에 개발했는데, 지금까지도 아래처럼 아마존 프로그래밍 분야에서 베스트셀러 자리를 차지하고 있는 언어 책이다.
이 정도까지 말하면, C 언어를 찬양하는 거 아니냐고 웃을 수도 있겠다. 하지만, 필자가 사이버 보안업계로 커리어를 전환한 이후로, C를 완전히 나의 것으로 만들지 못했던 지난 10여 년간은 허울만 사이버 보안 분야 종사자였다고 생각할 정도로 C 언어의 가치는 대단하다.
C 언어만 파고들 수밖에 없었던 까닭에 북한의 해커들이, 전 세계의 비트코인 해킹의 절반 이상을 할 수 있었던 거 아닐 거다. C를 기반으로 만들어진 윈도즈의 취약점을 해마다 발표하는 MS가 이 해킹의 근원지를 북한으로 항상 지목해서 C 언어가 대단한 게 아니다.
C 언어 자체는 하드웨어에서 프로그램이 실행하는 그대로를 머릿속으로 그릴 수 있게 해 주기 때문에 C를 모르고 어떻게 본인이 컴퓨터에 대해서 안다고 말할 수 있냐는 거다. C를 자유자재로 사용한다는 말인즉슨, 컴퓨터 내부의 구조와 동작원리를 씌우고 있는 블랙박스를 들춰낸다는 것과 동일한 말이다.
필자가 정말 C 언어의 기본기만을 닦기 위해 정보처리기사를 취득하고자 한다면, 굳이 C 언어를 제대로 배우지 않았을 것이다. 사이버 보안을 업으로 쌓으려는 자에게 C 언어는 기본이다. 이것을 포인터(간접 참조)로 가리키는 목적은 따로 있다. 프로그래밍 언어는 수단일 뿐이다. 가리키는 본질은 자율주행차 사이버 보안 분야에서의 전문가다.
일단 정처기 실기부터 패스하고, 서서히 본인이 사이드로 진행하고 있는 이 프로젝트를 공개하겠다. 아마도 그때쯤이면 그레이 햇 해킹(악의적인 의도가 아닌 목적으로 해킹을 시도해서 사회에 공헌)은 할 수 있을 거라 확신한다. 이론이 아니라 이 프로젝트 자체가 실전이기 때문이다.
아래는 지금까지 정처기 실기 기출문제를 복원해 둔 한 개발자의 사이트인데, 문제를 바로 풀어보고 답안을 확인할 수 있어 실제 시험처럼 풀 수 있다.
*이식성(Portability) : 1969년에 개발된 초기 유닉스는 대부분 어셈블리어로 작성되어 컴퓨터의 하드웨어가 바뀌면 유닉스를 다시 개발해야 하는 문제가 있었다. 이런 불편을 해결하고자 데니스 리치는 하드웨어에 상관없이 사용할 수 있는 C 언어를 만들었고, 이것을 여러 하드웨어에서 '이식(호환)이 가능하다'라고 하여 이식성이 높다고 일컫는다.
현재 C언어는 표준 라이브러리와 언어 명세가 잘 정립되어 있어, 작성된 소스 코드를 다양한 하드웨어와 운영체제 환경에서 컴파일하여 실행할 수 있는 높은 이식성을 가진다. 하드웨어 종속적인 코드를 최소화하고 ANSI C 등의 표준을 준수하면 플랫폼 간 이식이 쉽다.
C언어 이식성의 핵심 특징
높은 호환성 : 시스템 의존적 코드를 줄이면 코드 수정 거의 없이 다양한 아키텍처에서 동작함.
컴파일러의 범용성 : 대부분의 컴퓨터와 마이크로컨트롤러 환경에서 C 컴파일러를 제공하므로, 소스 코드 수준에서 이식됨.
저수준/고수준의 조화 : 어셈블리어와 달리 특정 하드웨어에 종속되지 않으면서도 시스템 자원을 직접 제어할 수 있음.