Unmanaged Language의 중요성

C언어는 왜 여전히 가장 많이 필요로 하는 언어일까?

by Younggi Seo





정처기 실기 기출문제 중 코딩 문제가 가장 어려웠다는 2025년 1회 차 문제를 쭈욱 풀어봤다. C언어 코딩 문제 수준이 생각보다 초급 이상의 난도였다. 이렇다면, 엊그제 세운 C언어 준비 계획을 포기하고 용어를 묻는 문제와 나머지 쉬운 코딩 문제(파이썬 포함 3~4문제)에 몰빵 해서 12문제(60점 커트라인)를 가까스로 맞는 전략으로 바꾸는 게 오히려 쉽지 않을까?







필자는 C언어 코딩문제와 정면승부를 하기로 결정했다. 왜냐하면, C언어의 기본기를 꼭 다지고 말겠다는 소기의 목적은 따로 있었다. C언어가 하드웨어를 관리하는데 가장 쓸모 있다는 개념(Unmanaged Language)을 가진 언어이기 때문이다.


프로그래밍 언어는 크게 두 가지로 분류된다. 매니지드 랭귀지(Managed Language)와 언매니지드 랭귀지(Unmanaged Language).


전자는 자바(Java)나 C#처럼 언어 내부에서 메모리를 관리해 준다. 이를 테면, 자바의 가비지 컬렉터(Garbage Collector)처럼 쓸모없게 된 값(Garbage, 쓰레기값)을 알아서 수거한다. 반면에 후자의 언매니지드 랭귀지는 언어 자체에서 메모리 관리를 안 해준다. 때문에 C언어 같이 free() 함수를 통해 malloc(), calloc() 등으로 힙(Heap)* 영역에 동적 할당한 메모리는 사용 후 사용자가 직접 해제해야 한다.


이것이 C언어가 유닉스(리눅스의 모태)에서 가장 중요한 시스템(커널)을 프로그래밍하기 위한 목적으로 만들어진 이유이기도 하다. 그래서 이 C언어를 할 수 있으므로써 사실 시스템의 가장 로우 레벨 단의 통제를 프로그래머가 직접 할 수 있다. IoT 기기나 임베디드 기기가 거진 C로 짜인 프로그램으로 구동하는 까닭이 바로 C언어가 하드웨어와 가장 밀접하기 때문이다.



그렇다고 필자가 이제 와서야, C언어를 마스터해서 새로 장만한 로봇청소기의 무선네트워크를 해킹해 보겠다는 지질한 동기를 가지고 정처기 실기에서 가장 많이 출제되는 C언어 코딩을 공부하자는 의도도 아니다. 그러면 자율주행차라도 한 대 장만하면서 네트워크 해킹을 해서 그 시스템의 핵심이 되는 OS를 한 번 해킹해 보자는 의도로 C언어를 배워보자는 것도 아니다. 토이 프로젝트성으로 생각은 해보았다. 실제로 독일의 한 젊은 친구는 이미 테슬라 모델 중 25대를 해킹했다.




보통의 학생들은 학교에서 컴퓨터 언어를 배우면, 애플리케이션 단에서 어떻게 변화하는지(프로그램이 잘 돌아가는지)에 인터랙티브 한 반응을 즐길 뿐이다. 필자도 대학에서 처음 접한 C++를 강사님이 아무리 하드웨드에서 컴퓨터가 어떻게 연산하는지, 메모리에 변수를 어떻게 할당하고 해제하는지에 설명했었다 손치더라도 게임만 구현하면 장땡이지라는 생각밖에 안 했다.


하지만, 해킹은 이 하드웨어 단에서 뭔가 오버플로우(값들이 넘치거나) 되거나, 쓰레기값(garbage)들이 치워지지 않거나 아니면 자료형의 부동소수점의 한계에 의한 컴퓨터가 할 수 없는 계산을 하게 하거나 해서 생기는 이슈를 겉모양(프로그램의 실행)만 바뀐 채 우려먹는 게 대다수다.


필자가 아래 POCU라는 아카데미에서 C언어를 배울까, 말까 고민만 5년 동안 했는데 사교육비가 너무 비싸서 엄두를 못 냈다. 하지만 기어이 이 C언어를 독학이라도 해서 제대로 맛보고 싶은 까닭은 언매니지드 언어를 코딩할 수 있는 능력은 앞으로 AI가 코딩을 전부 다해주더라도, 가장 밑단(시스템의 코어)은 인간이 통제할 수 있어야 하기 때문이라고 생각하기 때문이다.


그래서 정처기 실기 과목의 전략을 아래와 같이 바꿨다. 이번 한 달이 C언어(주요 개념은 중점으로 하루 이틀에 걸쳐서 여러 번 반복해서 확실히 이해하고 숙달된 이후)를 나선형(60% -> 70% -> 80% -> 90% 이해도달 순)으로 여러 번 반복학습해서 정처기라는 실기 과목(프로그램)의 합격(실행)을 애플리케이션 단(국가자격증 사이트)에서 구현해 보겠다(?).

Screenshot 2026-02-28 at 16.57.09.png 챗GPT를 통해 과년도 정처기 실기 기출문제를 검색해서, 메이저 리거 오타니 쇼헤이의 목표 달성법인 '만다라트(Mandalart) 차트'로 목표 세팅 전략을 주문했다.

*힙 메모리: 힙(Heap) 메모리는 프로그램 실행 중(Runtime) 동적으로 생성되는 객체나 데이터 인스턴스를 저장하는 메모리 공간. 개발자가 직접 할당 및 해제(C/C++)하거나 가비지 컬렉터(Java 등)가 관리하며, 크기가 유동적이라 큰 데이터를 저장하기 적합하지만 스택*보다 접근 속도가 느리고 메모리 누수 위험이 있음.


* 힙 vs. 스택 메모리

관리 방식: 힙은 수동/자동 혼용(런타임), 스택은 자동 관리(컴파일 타임).

속도: 스택이 힙보다 속도가 빠름.

용도: 힙은 큰 데이터, 긴 생명 주기를 가진 객체, 스택은 로컬 변수나 함수 호출 정보를 저장.


언매니지드 언어 설명 (POCU Academy)
언매니지드 언어의 장점은 여기서 그치지 않습니다. 프로그래머의 지속적인 성장에 반드시 필요한 지식 중 하나가 컴퓨터 하드웨어에 대한 이해입니다. 탑 레이서라면 자동차의 동작 원리를 잘 알아야 하듯이 탑 프로그래머는 하드웨어의 동작 원리를 잘 이해해야 합니다. 이걸 돕는 언어가 바로 언매니지드 언어입니다.


정규과정은 100만 원이 넘는지라… 유데미 통해 강좌 동영상(21만 원)만 구매할 수도 있다:)