정처기 실기 대비 중간 점검

만다라트 계획 중간 점검

by Younggi Seo







정보처리 기사 실기 접수는 다음 주부터다. 커리어 패스에서 정처기를 취미 삼아 준비했던 초창기와 달리, 이제는 다시는 되돌아가지 못할 요단강을 건너가려는 중인 거 같다.


C 언어를 공부하면서 왜 중도에 포기하는 사람이 많은지 알 거 같았다. C는 결코 쉬운 언어가 아니기 때문이다. 하지만 C를 제대로 코딩할 줄 안다는 의미는 컴퓨터를 제대로 아는 사람과 이퀄(==) 수준이라는 것을 깨달았다.


심지어 IT 종사자는 C를 할 줄 아는 사람과 C를 할 줄 모르는 사람으로 구분하는 게 맞지 않을까라는 생각까지 뻗쳤다. 제아무리 간판이 IT 전공자든, IT 종사자든 C 언어로 자신이 생각하는 것을 체계적(알고리즘적 사고)으로 코딩하지 못하면, 컴퓨터의 Z는커녕 A도 모르는 사람이라고 말할 수 있다.


애당초 C 언어를 만든 데니스 리치도 유닉스(멀틱스, 기업의 상용 OS였고 현재 맥 OS도 이 시스템이 뿌리다.)의 이식성* 문제를 해결하기 위해 만들었다. 1972년도에 개발했는데, 지금까지도 아래처럼 아마존 프로그래밍 분야에서 베스트셀러 자리를 차지하고 있는 언어 책이다.


창시자 데니스 리치가 직접 쓴 저서 C Programming Language


이 정도까지 말하면, C 언어를 찬양하는 거 아니냐고 웃을 수도 있겠다. 하지만, 필자가 사이버 보안업계로 커리어를 전환한 이후로, C를 완전히 나의 것으로 만들지 못했던 지난 10여 년간은 허울만 사이버 보안 분야 종사자였다고 생각할 정도로 C 언어의 가치는 대단하다.


C 언어만 파고들 수밖에 없었던 까닭에 북한의 해커들이, 전 세계의 비트코인 해킹의 절반 이상을 할 수 있었던 거 아닐 거다. C를 기반으로 만들어진 윈도즈의 취약점을 해마다 발표하는 MS가 이 해킹의 근원지를 북한으로 항상 지목해서 C 언어가 대단한 게 아니다.


C 언어 자체는 하드웨어에서 프로그램이 실행하는 그대로를 머릿속으로 그릴 수 있게 해 주기 때문에 C를 모르고 어떻게 본인이 컴퓨터에 대해서 안다고 말할 수 있냐는 거다. C를 자유자재로 사용한다는 말인즉슨, 컴퓨터 내부의 구조와 동작원리를 씌우고 있는 블랙박스를 들춰낸다는 것과 동일한 말이다.


오늘까지 구조체와 포인터가 결합된 형태인 복합 자료구조까지 개념을 70~80% 이해하고, 코딩 실습을 해봤다.



필자가 정말 C 언어의 기본기만을 닦기 위해 정보처리기사를 취득하고자 한다면, 굳이 C 언어를 제대로 배우지 않았을 것이다. 사이버 보안을 업으로 쌓으려는 자에게 C 언어는 기본이다. 이것을 포인터(간접 참조)로 가리키는 목적은 따로 있다. 프로그래밍 언어는 수단일 뿐이다. 가리키는 본질은 자율주행차 사이버 보안 분야에서의 전문가다.


일단 정처기 실기부터 패스하고, 서서히 본인이 사이드로 진행하고 있는 이 프로젝트를 공개하겠다. 아마도 그때쯤이면 그레이 햇 해킹(악의적인 의도가 아닌 목적으로 해킹을 시도해서 사회에 공헌)은 할 수 있을 거라 확신한다. 이론이 아니라 이 프로젝트 자체가 실전이기 때문이다.



아래는 지금까지 정처기 실기 기출문제를 복원해 둔 한 개발자의 사이트인데, 문제를 바로 풀어보고 답안을 확인할 수 있어 실제 시험처럼 풀 수 있다.

기출문제 주요 개념 및 시스템적 관점 (하드웨어 개발 수준으로 난이도가 상향되고 있는 추세다.)



*이식성(Portability) : 1969년에 개발된 초기 유닉스는 대부분 어셈블리어로 작성되어 컴퓨터의 하드웨어가 바뀌면 유닉스를 다시 개발해야 하는 문제가 있었다. 이런 불편을 해결하고자 데니스 리치는 하드웨어에 상관없이 사용할 수 있는 C 언어를 만들었고, 이것을 여러 하드웨어에서 '이식(호환)이 가능하다'라고 하여 이식성이 높다고 일컫는다.


현재 C언어는 표준 라이브러리와 언어 명세가 잘 정립되어 있어, 작성된 소스 코드를 다양한 하드웨어와 운영체제 환경에서 컴파일하여 실행할 수 있는 높은 이식성을 가진다. 하드웨어 종속적인 코드를 최소화하고 ANSI C 등의 표준을 준수하면 플랫폼 간 이식이 쉽다.


C언어 이식성의 핵심 특징

높은 호환성 : 시스템 의존적 코드를 줄이면 코드 수정 거의 없이 다양한 아키텍처에서 동작함.

컴파일러의 범용성 : 대부분의 컴퓨터와 마이크로컨트롤러 환경에서 C 컴파일러를 제공하므로, 소스 코드 수준에서 이식됨.

저수준/고수준의 조화 : 어셈블리어와 달리 특정 하드웨어에 종속되지 않으면서도 시스템 자원을 직접 제어할 수 있음.


프로그래밍에서의 '명세'라는 의미의 고찰

수요일 연재