글 목록으로 돌아가기
2026년 4월 12일·General·학부연구생·1 min read

LLVM은 정확히 무엇을 하는것일까

WebAssembly 관련 논문을 읽으면서 자연스럽게 LLVM을 자주 보게 됐다.

AI 노트

글을 빠르게 훑을 수 있도록 요약과 읽기 가이드를 제공합니다.

LLVM을 한 줄로 말하면

LLVM은 다양한 언어로 작성한 코드를 중간 표현(IR)으로 바꾸고,
이를 최적화한 뒤 여러 타겟 머신 코드로 변환할 수 있게 해주는 컴파일러 인프라다.

즉, 특정 언어 하나만을 위한 컴파일러가 아니라
여러 언어와 여러 타겟을 연결해주는 기반 시스템에 가깝다.


왜 중요한가

예전에는 언어마다, 타겟마다 각각 별도의 컴파일러 백엔드를 만들어야 했다.
하지만 LLVM 구조를 쓰면

  • 앞단에서 언어를 IR로 변환하고
  • 중간에서 최적화를 하고
  • 뒷단에서 x86, ARM, Wasm 같은 타겟 코드로 내보낼 수 있다

그래서 재사용성이 높고 확장성이 좋다.


LLVM IR이 중요한 이유

LLVM을 이해할 때 핵심은 결국 **IR(Intermediate Representation)**이다.

IR은 사람이 아주 읽기 쉬운 언어는 아니지만,
기계어보다는 훨씬 분석하기 쉽고
최적화나 계측을 넣기에도 적합하다.

내가 LLVM을 볼 때 가장 흥미로웠던 부분은
"원래 소스코드 수준에서 보기 어려운 구조를 IR 수준에서는 더 일관되게 다룰 수 있다"는 점이었다.


WebAssembly와 연결해서 보면

WebAssembly 실험에서는
C/C++ 코드를 바로 Wasm으로 내리는 것처럼 보이지만,
그 중간에서 LLVM IR을 거친다.

이 단계가 있기 때문에

  • 특정 접근을 helper call로 바꾸거나
  • 계측용 코드를 정리하거나
  • 구조를 후처리하기 쉬워진다

즉, LLVM은 단순한 번역기가 아니라
분석과 변형이 가능한 중간 레이어 역할을 한다.


내가 느낀 점

LLVM을 처음 볼 때는 너무 크고 어렵게 느껴졌지만,
실제로는 "언어와 타겟 사이에서 구조를 정리하고 최적화하는 기반"이라고 이해하니 훨씬 보기 쉬웠다.

특히 보안 실험이나 계측 실험처럼
기존 코드를 조금 바꾸고 검증해야 하는 작업에서는
LLVM IR 단계가 생각보다 강력하다는 걸 많이 느꼈다.

Comment

댓글 0

익명 로그인 없이 남길 수 있지만 수정과 삭제는 작성 당시 입력한 비밀번호로만 가능합니다.

아직 댓글이 없습니다

첫 번째 피드백을 남겨 보세요.