| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Service
- Endpoints
- 비구조화 할당
- rust
- elasticsearch
- 자바스크립트
- Custom Resource
- Site-to-Site VPN
- grafana
- AWS
- VPC
- vgw
- optional chaining
- 옵셔널 체이닝
- api gateway
- docker swarm
- 러스트
- transit gateway
- Kubernetes
- Await
- prometheus
- null 병합 연산자
- cognito
- 온프레미스
- 단축 평가
- docker
- 구조분해 할당
- On-Premise
- Proxy Resource
- JavaScript
- Today
- Total
만자의 개발일지
[Rust] Cargo와 crates.io 본문
이번 포스팅에서는 Cargo와 crates.io에 대해 알아보도록 하겠습니다.
Cargo
Cargo는 의존성 패키지들과 프로젝트를 관리하는 빌드 시스템 및 패키지 매니저입니다. Cargo를 사용하면 프로젝트에 의존성을 추가하고 빌드 및 실행까지 일련의 과정을 간단한 명령어들을 통해 수행할 수 있습니다.
Cargo 설치
기본적으로 rustup을 설치하면 자동으로 Cargo도 같이 설치되지만, 설치가 안되어있는 경우에는 아래 명령어를 통해 설치합니다.
curl https://sh.rustup.rs -sSf | sh
Cargo 명령어
Cargo의 기본 명령어들은 아래표와 같습니다.
| 명령어 | 설명 |
| cargo new | 새 프로젝트를 생성합니다. |
| cargo init | 현재 프로젝트를 초기화합니다. |
| cargo build, b | 프로젝트 소스코드들을 빌드하여 실행파일을 생성합니다. |
| cargo check, c | 프로젝트는 빌드하지 않고 코드가 정상적으로 컴파일되는지 확인합니다. |
| cargo run, r | 빌드된 프로젝트 실행파일을 실행합니다. |
| cargo add | 프로젝트에 의존성 패키지를 추가합니다. |
| cargo remove | 프로젝트의 의존성 패키지를 제거합니다. |
| cargo update | 프로젝트의 의존성 패키지들을 최신 버전으로 업데이트 합니다. |
| cargo test, t | 단위 혹은 통합 테스트를 실행합니다. |
| cargo bench | 성능 벤치마크를 실행합니다. |
| cargo doc, d | 프로젝트에 대한 문서를 생성합니다. |
| cargo publish | 프로젝트를 레지스트리(crates.io)에 업로드 합니다. |
Cargo로 프로젝트 관리
먼저 터미널을 열어 cargo new 명령어를 통해 새 프로젝트를 생성해줍니다.
$ cargo new myproject
그다음 cargo add 명령어로 의존성 패키지 하나를 추가해주겠습니다.
$ cargo add regex
프로젝트의 현재 구조는 다음과 같습니다.

Cargo.toml과 Cargo.lock
프로젝트를 처음 생성하면 Cargo.toml 파일과 소스폴더만 존재합니다. 여기서 의존성 패키지를 추가하면 Cargo.lock 파일이 생성되게 되는데 이 두 파일 모두 프로젝트 내의 의존성 패키지들을 관리하기 위한 파일들입니다. 두 파일은 목적은 같지만 각각 역할이 다릅니다.
Cargo.toml 파일에는 프로젝트의 이름, 버전 등과 같은 설정 값들과 의존성 패키지들의 버전과 함께 작성합니다. 그리고 이 파일은 개발자에 의해 관리됩니다.

dependencies 항목에 프로젝트에 추가된 의존성 패키지들을 작성하는데 이때 의존성 패키지들의 최소한의 정보(버전)만 명시합니다.
Cargo.lock 파일에는 Cargo.toml 파일에 명시된 의존성 패키지들의 실제로 사용되는 자세한 정보(하위 의존성, checksum)들을 작성합니다. 그리고 이 파일은 Cargo에 의해 관리됩니다.

보시다시피 Cargo.lock 파일안에는 하위 의존성들의 자세한 정보까지 모두 적혀있는걸 보실 수 있습니다.
Cargo.lock 파일은 cargo build나 cargo check시에 Cargo.toml 파일을 기준으로 Cargo가 최신화합니다. 실제로 프로젝트를 빌드할 때 Cargo.lock을 기준으로 의존성들을 설치하게 되는데, 이때 만약 Cargo.toml 파일에 의존성 패키지의 버전이 regex = 1.13 과 같이 넓은 범위로 명시되어 있어도 Cargo.lock 파일에 regex = 1.13.1 과 같이 정확한 버전이 명시되어 있기 때문에 만약 regex가 업데이트 되어 새 버전이 생겨나도 매번 똑같은 결과물로 빌드할 수 있습니다.
이제 프로젝트 빌드를 위해 다음과 같이 main.rs를 작성해줍니다.
use regex::Regex;
fn main() {
let re = Regex::new(r"\d+").unwrap();
let text = "3afb6dbk4";
for mat in re.find_iter(text) {
println!("발견된 숫자: {}", mat.as_str());
}
}
그다음 cargo build 명령어로 프로젝트를 빌드합니다.
$ cargo build
프로젝트를 빌드하게되면 target 디렉토리안에 실행(바이너리)파일과 여러 설정 파일들이 생성됩니다.
그다음 cargo run 명령어로 생성된 실행파일 실행합니다.
$ cargo run
다음과 같이 잘 실행된 것을 보실 수 있습니다.

설치된 의존성 패키지를 제거하고 싶으면 cargo remove 명령어를 통해 제거할 수 있습니다.
$ cargo remove regex
crates.io
crates.io는 러스트의 의존성 패키지들을 저장하는 공식 레지스트리(저장소)입니다. Cargo를 통해 추가하는 의존성 패키지들은 기본적으로 crates.io에서 가져옵니다. 물론 crates.io 뿐만 아니라 Git이나 다른 사설 저장소에서도 의존성 패키지들을 가져올 수 있습니다.
crates.io에 등록된 다른 사람이 만든 의존성 패키지들을 가져올 수도 있지만, 반대로 자신이 직접 만든 패키지를 등록할 수도 있습니다.
이번 포스팅에서는 Cargo와 crates.io에 대해 알아보았습니다. crates.io에 패키지를 배포하는 방법은 나중에 자세히 다루도록 하겠습니다.
참고
'Rust' 카테고리의 다른 글
| [Rust] 라이프타임 (1) | 2025.09.25 |
|---|---|
| [Rust] 제네릭 (5) | 2025.07.29 |
| [Rust] 참조와 대여 (1) | 2025.07.03 |
| [Rust] 소유권과 메모리 모델 (3) | 2025.06.17 |
| [Rust] 패턴 매칭 (0) | 2025.05.31 |