크레이트 개념

백엔드&인프라 추종자·2025년 6월 17일

rust 공부

목록 보기
6/14

좋은 질문입니다! Rust에서 **크레이트(crate)**는 단순히 “파일”이나 “컴파일된 바이너리” 중 하나만으로 정의되지 않습니다. Rust의 컴파일과 코드 구조를 이해하는 핵심 개념인데요, 아래와 같이 정리해드립니다.


✅ 결론 먼저:

크레이트는 "Rust 컴파일러가 하나의 단위로 컴파일하는 코드 집합"입니다.
즉, 소스 코드 집합 + 메타정보 + 결과물(라이브러리 or 바이너리) 전부를 의미합니다.


🧩 크레이트는 어떤 구조인가요?

요소설명
📄 소스코드main.rs, lib.rs, 또는 mod.rs 등의 Rust 파일
📦 메타정보Cargo.toml (크레이트 이름, 의존성 등 정의)
🛠️ 컴파일 결과바이너리(실행파일) or 라이브러리(.rlib, .so 등)

🧪 예: 크레이트의 종류

크레이트 종류예시설명
📘 바이너리 크레이트src/main.rsfn main()이 있는 실행형 애플리케이션
📗 라이브러리 크레이트src/lib.rs다른 코드에서 extern crate 또는 use로 가져올 수 있는 코드 모음

🔧 Cargo 기준 디렉토리 예시

my_project/         ← 크레이트 루트 (Cargo.toml 존재)
├── Cargo.toml      ← 크레이트 메타데이터
└── src/
    ├── main.rs     ← 바이너리 크레이트 (실행파일)
    └── lib.rs      ← 라이브러리 크레이트 (선택적)
  • cargo build → 크레이트 단위로 컴파일
  • cargo run → 바이너리 크레이트 실행

📂 크레이트 vs 파일 vs 모듈 차이

구분설명
파일.rs 파일 하나. mod.rs, foo.rs, bar.rs
모듈크레이트 안에서 mod xxx로 정의된 논리적 단위
크레이트Rust 컴파일러가 하나의 단위로 처리하는 전체 패키지 or 라이브러리 or 바이너리

크레이트는 보통 여러 모듈(그리고 파일)로 구성됩니다.
그리고 하나의 프로젝트에는 **하나 이상의 크레이트(라이브러리 + 바이너리)**가 존재할 수 있습니다.


🔁 다시 정리하면

크레이트는 ‘.rs 파일’이 아니라, 그 파일들이 모여 만들어지는 “컴파일 단위 전체”입니다.
컴파일 후에는 바이너리(.exe)나 라이브러리(.rlib) 로 변환됩니다.


필요하시면 “크레이트 ↔ 모듈 ↔ 파일” 관계를 도식으로 그려드릴 수도 있습니다.

profile
AI 답변 글을 주로 올립니다.

0개의 댓글