처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.04.04 36

셸 스크립트로 C 컴파일러를 만들었다고요? — c89cc.sh 이야기

Hacker News 원문 보기
셸 스크립트로 C 컴파일러를 만들었다고요? — c89cc.sh 이야기

무슨 일이야?

누군가가 순수한 POSIX 셸 스크립트만으로 C89 컴파일러를 만들었어요. 외부 프로그램 의존 없이, bash도 아닌 기본 sh만으로 C 소스코드를 받아서 리눅스에서 실행 가능한 ELF64 바이너리를 뱉어내는 컴파일러예요. 이름은 c89cc.sh이고, GitHub Gist 하나에 전체 코드가 들어가 있어요.

"셸 스크립트로 컴파일러를?" 하고 의아하실 수 있는데요, 이게 가능하다는 것 자체가 기술적으로 꽤 흥미로운 이야기를 담고 있어요.

이게 어떻게 가능한 건가요?

컴파일러가 하는 일을 아주 단순하게 정리하면 이래요. 소스코드(텍스트)를 읽어서 → 의미를 분석하고(파싱) → 기계가 이해할 수 있는 명령어(기계어)로 변환하고 → 운영체제가 실행할 수 있는 파일 형식(ELF)으로 포장하는 거예요.

보통 이런 작업은 C나 Rust 같은 언어로 만들어요. 복잡한 데이터 구조도 다뤄야 하고, 바이너리 데이터를 바이트 단위로 정밀하게 조작해야 하니까요. 셸 스크립트는 기본적으로 텍스트 처리 도구인데, 이걸로 바이너리를 생성한다? 상당히 도전적인 시도예요.

c89cc.sh는 이 과정을 전부 POSIX sh의 기본 기능만으로 해내요. 이게 뭐냐면, printf의 바이트 출력 기능(\x 이스케이프)을 이용해서 ELF 헤더와 기계어 명령어를 한 바이트씩 찍어내는 거예요. 마치 레고 블록을 하나씩 끼워서 건물을 만드는 것처럼요. 렉서(lexer, 소스코드를 토큰으로 쪼개는 단계), 파서(parser, 토큰의 구조를 분석하는 단계), 코드 생성기(code generator, 실제 기계어를 만드는 단계)가 전부 셸 함수로 구현되어 있어요.

지원하는 C 문법은 C89 표준의 핵심적인 부분이에요. 변수 선언, 함수 정의, 조건문, 반복문, 포인터 연산 같은 기본 기능을 지원하고, 출력 대상은 x86-64 리눅스의 ELF64 실행 파일이에요. 물론 GCC나 Clang 같은 본격적인 컴파일러와 비교하면 지원 범위가 제한적이지만, "셸 스크립트 하나로 실행 가능한 바이너리를 만든다"는 점에서 기술적 성취가 인상적이에요.

왜 이런 걸 만들었을까?

실용적인 목적보다는 기술적 도전과 교육적 가치가 큰 프로젝트예요. 이 프로젝트가 보여주는 건 결국 "컴파일러는 마법이 아니다"라는 거예요. 소스코드를 읽고, 구조를 파악하고, 대응하는 기계어를 출력하는 — 이 본질적인 과정은 어떤 언어로든 구현할 수 있다는 걸 셸 스크립트라는 극단적인 선택으로 증명한 거죠.

"부트스트래핑(bootstrapping)"이라는 개념과도 연결돼요. 이게 뭐냐면, 아무런 컴파일러가 설치되지 않은 환경에서 컴파일러를 어떻게 만들 수 있을까 하는 문제예요. 대부분의 시스템에는 최소한 POSIX sh은 있으니까, 이론적으로 c89cc.sh만 있으면 거기서부터 출발해서 더 본격적인 C 컴파일러를 컴파일하고, 그걸로 또 더 복잡한 소프트웨어를 빌드하는 식으로 올라갈 수 있는 거예요.

비슷한 프로젝트들과의 비교

이런 "극한 환경에서의 컴파일러" 프로젝트는 사실 하나의 장르가 있어요. stage0이라는 프로젝트는 256바이트 바이너리에서 시작해서 점진적으로 C 컴파일러를 빌드해 나가고, GNU Mes는 Scheme과 C의 상호 부트스트래핑을 통해 GCC 없이 GCC를 빌드하는 걸 목표로 해요. 8cc는 매우 작은 크기의 자기 자신을 컴파일할 수 있는 C 컴파일러이고요.

c89cc.sh가 독특한 점은 별도의 바이너리 시드(seed)조차 필요 없이 텍스트 기반 셸 스크립트만으로 전체 과정을 처리한다는 거예요. 이건 "신뢰할 수 있는 빌드(reproducible build)" 관점에서도 의미가 있어요. 컴파일러 자체가 사람이 읽을 수 있는 텍스트니까, 숨겨진 백도어가 있는지 직접 검증할 수 있거든요.

한국 개발자에게 주는 시사점

솔직히 이걸 실무에서 쓸 일은 거의 없어요. 하지만 컴파일러가 어떻게 동작하는지 이해하고 싶은 분에게는 훌륭한 학습 자료예요. 수천 줄짜리 GCC 소스를 읽는 것보다, 셸 스크립트 하나에 담긴 이 컴파일러를 읽는 게 컴파일러의 각 단계를 파악하기에 훨씬 접근성이 좋거든요. 컴퓨터 과학 전공 수업에서 컴파일러 과목이 어렵기로 유명한데, 이런 미니멀한 구현체를 먼저 살펴보면 전체 그림을 잡는 데 도움이 돼요.

또 하나, 셸 스크립트의 가능성에 대해 다시 생각하게 만드는 프로젝트이기도 해요. 보통 셸 스크립트는 파일 옮기고 서버 띄우는 정도로 생각하기 쉬운데, 튜링 완전한 언어로서 이론상 뭐든 할 수 있다는 걸 다시 한번 보여주니까요.

한줄 정리

POSIX 셸 스크립트 하나로 C 컴파일러를 만든 이 프로젝트는, 컴파일러의 본질이 결국 "텍스트를 읽어서 바이트를 뱉는 프로그램"이라는 걸 가장 극단적인 방식으로 보여줘요.

여러분이 가장 "미친 짓"이라고 느꼈던 사이드 프로젝트가 있다면 공유해주세요!


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.