크레이트 개념

백엔드&인프라 추종자·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개의 댓글