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

컴파일러를 직접 만들어보는 여정 — 'A Compiler Writing Journey' 프로젝트

Hacker News 원문 보기
컴파일러를 직접 만들어보는 여정 — 'A Compiler Writing Journey' 프로젝트

컴파일러, 왜 직접 만들어봐야 할까

우리가 매일 쓰는 프로그래밍 언어 — C, Java, Python, Go — 이것들이 실행되려면 반드시 거쳐야 하는 과정이 있어요. 바로 컴파일(compile)이에요. 컴파일이 뭐냐면, 사람이 읽을 수 있는 코드를 컴퓨터가 실행할 수 있는 기계어로 바꿔주는 과정이에요. 그리고 이 일을 해주는 프로그램이 컴파일러(compiler)죠.

대부분의 개발자는 컴파일러를 "그냥 쓰는" 도구로만 생각해요. gcc나 clang을 실행하면 알아서 바이너리가 나오니까요. 그런데 컴파일러가 내부적으로 어떻게 동작하는지 이해하면, 프로그래밍 자체에 대한 이해가 완전히 달라져요. 변수가 메모리에 어떻게 배치되는지, 함수 호출이 실제로 어떻게 이뤄지는지, 최적화가 왜 필요한지 — 이런 것들이 머릿속에서 연결되기 시작하거든요.

GitHub에 공개된 'A Compiler Writing Journey(acwj)' 프로젝트는 바로 이 여정을 단계별로 안내하는 교육용 프로젝트예요. DoctorWkt라는 개발자가 C 언어의 서브셋을 컴파일할 수 있는 컴파일러를 밑바닥부터 만들어가는 과정을 총 60개 이상의 단계로 나눠서 설명하고 있어요.

어떤 내용을 다루나

이 프로젝트의 가장 큰 장점은 점진적으로 복잡도를 높여간다는 점이에요. 처음에는 아주 단순한 것부터 시작해요.

첫 번째 단계에서는 렉서(Lexer, 어휘 분석기)를 만들어요. 렉서가 뭐냐면, 소스 코드를 읽어서 의미 있는 단위(토큰)로 쪼개는 역할을 해요. 예를 들어 int x = 5 + 3; 이라는 코드가 있으면, 이걸 int, x, =, 5, +, 3, ; 이렇게 토큰으로 분리하는 거예요. 마치 문장을 단어 단위로 나누는 것과 비슷하죠.

다음으로 파서(Parser, 구문 분석기)를 만들어요. 파서는 토큰들의 나열이 문법적으로 올바른지 확인하고, 트리 구조로 만들어주는 역할이에요. 이걸 AST(Abstract Syntax Tree, 추상 구문 트리)라고 하는데, 코드의 구조를 나무 형태로 표현한 거예요. 5 + 3이라면 +가 부모 노드이고 53이 자식 노드가 되는 식이죠.

그 다음에는 이 AST를 실제 어셈블리 코드로 변환하는 코드 생성기(Code Generator)를 만들어요. x86-64 아키텍처의 어셈블리를 생성하기 때문에, 실제로 리눅스 머신에서 실행 가능한 바이너리를 만들어낼 수 있어요.

단계가 진행될수록 지역 변수, 전역 변수, 함수 정의와 호출, 배열, 포인터, 구조체, if/while/for 같은 제어 흐름, 타입 시스템 등 점점 더 복잡한 C 언어 기능들을 추가해나가요. 최종적으로는 이 컴파일러가 자기 자신을 컴파일할 수 있는 수준(self-hosting)까지 도달하는 게 목표라고 해요. 컴파일러가 스스로를 컴파일한다는 건, 그만큼 충분히 완성도 높은 컴파일러라는 뜻이에요.

다른 컴파일러 학습 자료와 비교하면

컴파일러를 배우는 교재로는 '드래곤 북'이라고 불리는 Aho 등의 "Compilers: Principles, Techniques, and Tools"가 고전이에요. 하지만 이 책은 이론 중심이라 실제로 동작하는 코드를 만들어보기까지 갭이 크다는 평이 있어요.

Robert Nystrom의 "Crafting Interpreters"는 최근 가장 인기 있는 대안인데, 이쪽은 인터프리터(코드를 한 줄씩 실행하는 방식)에 초점이 맞춰져 있어요. 컴파일러와 인터프리터는 비슷하면서도 다른 영역이거든요.

acwj의 차별점은 C 언어로, C 언어를 위한 컴파일러를 만든다는 점이에요. 실용적인 언어를 대상으로 하기 때문에 포인터, 메모리 관리, 시스템 호출 같은 저수준(low-level) 개념까지 자연스럽게 다루게 돼요. 그리고 각 단계가 독립적인 커밋으로 되어 있어서, 특정 기능의 구현만 골라서 볼 수도 있어요.

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

"컴파일러를 만들어본다"는 게 거창하게 들릴 수 있는데, 실무에서도 의외로 도움이 많이 돼요. 코드 린터나 포매터를 만들 때, DSL(Domain Specific Language, 특정 용도의 미니 언어)을 설계할 때, 또는 SQL 파서를 커스터마이징할 때 — 이런 상황에서 컴파일러의 기본 원리를 아는 것과 모르는 것의 차이가 커요.

특히 요즘 AI 시대에 프롬프트 엔지니어링이나 코드 생성 도구가 뜨면서, "코드가 어떻게 실행되는지"에 대한 깊은 이해의 가치가 오히려 더 올라가고 있어요. AI가 생성한 코드를 검증하려면, 그 코드가 내부적으로 어떻게 동작하는지 알아야 하니까요.

취준생이나 주니어 개발자라면, 이 프로젝트를 따라가면서 만든 컴파일러를 포트폴리오에 넣는 것도 좋은 전략이에요. 컴퓨터 과학의 핵심 원리를 이해하고 있다는 강력한 시그널이 되거든요.

한 줄 정리

컴파일러를 밑바닥부터 단계별로 만들어가는 이 오픈소스 교육 프로젝트는, 프로그래밍의 본질을 이해하고 싶은 모든 개발자에게 추천할 만한 자료예요.

혹시 컴파일러나 인터프리터를 직접 만들어본 경험이 있으신가요? 그 과정에서 가장 어려웠던 부분은 뭐였나요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

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

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

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

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

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