본문 바로가기

전체 글25

[기획 연재 13편] 가비지 컬렉터(GC) vs 수동 관리: 파이썬과 C의 결정적 차이 (자동화의 대가) 서론: 로봇 청소기와 빗자루의 차이 요즘 나오는 파이썬(Python), 자바(Java), 자바스크립트 같은 언어들은 개발자에게 "메모리 해제(free)"를 강요하지 않습니다. 변수를 마음껏 만들고 버려도, 알아서 청소가 됩니다. 반면 C언어는 하나하나 쫓아다니며 직접 치워야 하죠. 비유하자면 가비지 컬렉터(Garbage Collector, 이하 GC)가 내장된 언어는 '로봇 청소기'가 돌아가는 집이고, C언어는 주인이 직접 '빗자루'를 들고 쓰는 집입니다. "당연히 로봇 청소기가 편하고 좋은 거 아닌가요?"라고 묻겠지만, NASA의 우주선 제어 시스템이나 초고사양 게임 엔진에서는 로봇 청소기를 끄고 직접 빗자루를 듭니다. 오늘 13편에서는 그 불편함을 선택하는 공학적 이유에 대해 알아봅니.. 2026. 1. 18.
[기획 연재 12편] 메모리 누수(Memory Leak): 닫지 않은 수도꼭지가 시스템을 망가뜨리는 과정 서론: 우주에서 재부팅은 목숨을 건 도박이다 여러분의 PC가 느려지면 어떻게 하시나요? 그냥 재부팅하면 해결됩니다. 하지만 화성으로 가는 우주선이나 365일 내내 켜져 있어야 하는 은행 서버는 마음대로 껐다 켤 수 없습니다. 제가 참여했던 장기 우주 프로젝트에서 가장 경계했던 적은 거창한 버그가 아니었습니다. 바로 하루에 1바이트씩 아주 조금씩 사라지는 메모리, 즉 '메모리 누수(Memory Leak)'였습니다. 처음엔 티도 안 나지만, 몇 달이 지나면 시스템의 메모리가 바닥나고 결국 먹통이 되어버리는 침묵의 살인자입니다. 오늘 12편에서는 C언어 개발자가 반드시 책임져야 할 '빌린 것을 돌려주는 의무'에 대해 이야기해 보겠습니다.본론 1: 도서관 책을 반납하지 않는 사람들 지난 4.. 2026. 1. 18.
[기획 연재 11편] 버퍼 오버플로우(Buffer Overflow): 해커가 C언어의 빈틈을 파고드는 법 (메모리 보안) 서론: 열려진 성문, C언어의 양날의 검 1988년, '모리스 웜(Morris Worm)'이라는 악성 코드가 전 세계 인터넷의 10%를 마비시킨 사건이 있었습니다. 이 역사적인 사건의 원인은 놀랍게도 복잡한 암호 해독이 아니었습니다. 단지 코딩할 때 입력 값의 크기를 검사하지 않은 작은 실수, 바로 '버퍼 오버플로우(Buffer Overflow)' 때문이었습니다. 제가 NASA에서 비행 소프트웨어를 검수할 때 가장 눈에 불을 켜고 찾는 것이 바로 이 오류입니다. C언어는 개발자에게 메모리를 직접 제어할 권한(포인터)을 주지만, 그에 따른 안전장치는 제공하지 않습니다. 마치 브레이크 없는 스포츠카와 같죠. 오늘 11편에서는 컵에 물이 넘치는 단순한 현상이 어떻게 시스템의 제어권을 탈취하는 .. 2026. 1. 18.
[기획 연재 10편] 재귀(Recursion)의 마법: 거울 속의 거울, 무한을 다루는 알고리즘 서론: 인셉션, 그리고 거울 속의 거울 엘리베이터 거울 양쪽에 서 본 적이 있으신가요? 내 모습이 반대편 거울에 비치고, 그 모습이 다시 내 뒤의 거울에 비치며 끝없이 이어지는 무한의 회랑을 보셨을 겁니다. 컴퓨터 공학에도 이런 기묘한 현상이 존재합니다. 바로 '재귀(Recursion)'입니다. 함수가 다른 함수를 부르는 것이 아니라, 자기 자신이 자기 자신을 다시 호출하는 현상을 말합니다. 영화 에서 꿈속의 꿈으로 들어가듯, 재귀는 코드를 깊은 심연으로 끌고 들어갑니다. 오늘 10편에서는 이 위험하지만 매혹적인 알고리즘이 왜 우주 공학이나 자연의 패턴(프랙탈)을 해석하는 데 필수적인지, 그 수학적 미학을 다뤄보겠습니다.본론 1: 마트료시카 인형을 여는 법 재귀 함수를 가장 쉽게 이.. 2026. 1. 18.
[기획 연재 9편] 구조체(Structure): 서로 다른 데이터를 묶는 기술 (객체의 탄생) 서론: 우주 비행사의 데이터를 관리하는 법 우주선에 탑승한 우주 비행사의 상태를 모니터링하는 프로그램을 만든다고 가정해 봅시다. 한 명의 비행사에게는 이름(문자열), 나이(정수), 심박수(정수), 체온(실수) 등 서로 다른 형태의 데이터가 존재합니다. 만약 비행사가 3명이라면 변수를 어떻게 만들어야 할까요? name1, age1, temp1... 이런 식으로 수십 개의 변수를 나열해야 할까요? 이렇게 하면 데이터가 뿔뿔이 흩어져서 관리가 불가능해집니다. 이때 필요한 것이 바로 '구조체(Structure)'입니다. 오늘 9편에서는 현실 세계의 복잡한 사물을 컴퓨터 속에서 하나의 단위로 정의하는 '사용자 정의 자료형'의 강력함에 대해 알아보겠습니다.본론 1: 배열과는 다르다! (종합 선물 세.. 2026. 1. 18.
[기획 연재 8편] 함수(Function)와 모듈화: 복잡한 우주선을 조립하는 공학적 설계 (분할 정복) 서론: 우주선을 통째로 만드는 사람은 없다 아폴로 우주선은 부품 수만 300만 개가 넘습니다. 만약 엔지니어들이 이 거대한 기계를 처음부터 끝까지 한 번에 조립하려고 했다면, 인류는 아직 달에 가지 못했을 것입니다. 우리는 엔진, 통신 장비, 생명 유지 장치 등 '기능(Function)'별로 부품을 따로 만들고, 마지막에 이것들을 결합하는 방식을 씁니다. 프로그래밍도 마찬가지입니다. 많은 입문자가 main() 함수 하나에 수백, 수천 줄의 코드를 길게 늘어뜨려 작성합니다. 이것은 우주선을 통째로 주물러서 만들려는 것과 같습니다. 오늘 8편에서는 함수(Function)가 단순한 '코드 저장소'가 아니라, 거대한 문제를 해결 가능한 크기로 쪼개는 '분할 정복(Divide and Conquer.. 2026. 1. 17.