์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
Tags
- ๋ฌ์คํธ
- ์๋ฐ ๊ธฐ์ด
- ์๋ฐ ๊ฐ๋
- ์๋ฐ
- ์ค๋ผํด
- ์ค๋ผํดDB
- Reversing
- data communication
- ํ์ด์ฌ
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- Python challenge
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- ๋ฌ์คํธ ์์
- OS
- Python
- ์๊ณ ๋ฆฌ์ฆ
- C
- ๋ฐฑ์ค ๋ฌ์คํธ
- Database
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- Rust
- ์ฐ๋ถํฌ
- ubuntu
- ๋ฐฑ์ค
- java
- ๋ฐ์ดํฐ ํต์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ด์์ฒด์
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- Operating System
Archives
- Today
- Total
IT’s Portfolio
[Rust] Start Rust (Day 23) - More About Cargo and Crates.io ๋ณธ๋ฌธ
Development Study/Rust
[Rust] Start Rust (Day 23) - More About Cargo and Crates.io
f1r3_r41n 2023. 11. 25. 13:59728x90
๋ฐ์ํ
๐ฆ Rust Day 23
๐ณ๏ธ More About Cargo and Crates.io
1๏ธโฃ ๋ฆด๋ฆฌ์ฆ ํ๋กํ์ ์ด์ฉํ ๋น๋ ์ปค์คํฐ๋ง์ด์ง
- ๊ฐ๋ฐ์๋ค์ด ์ฝ๋์ ์ปดํ์ผ์ ๋ ์์ธํ ์ ์ดํ ์ ์๋๋ก ๋ค์ํ ์ค์ ์ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ ํ๋กํ์ด ์ค๋น๋์ด ์์
- ๊ฐ ํ๋กํ์ ์๋ก ๋ ๋ฆฝ์ ๊ตฌ์ฑ
- ์นด๊ณ ์๋ ๋ ๊ฐ์ ์ฃผ ํ๋กํ
- cargo build : dev ํ๋กํ
- ๊ฐ๋ฐ ๊ณผ์ ์ ์ ํฉํ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ถค
- cargo build --release : release ํ๋กํ
- ๋ฆด๋ฆฌ์ฆ์ฉ ๋น๋๋ฅผ ์ํ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ถค
- cargo build : dev ํ๋กํ
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
- dev์ release ํ๋กํ์ ๊ธฐ๋ณธ opt-level ์ค์
- ๋ฌ์คํธ๊ฐ ์ฝ๋์ ์ ์ฉํ ์ต์ ํ ์์ค์ ์ง์ ํ๋ฉฐ ์ ํจํ ๋ฒ์๋ 0๋ถํฐ 3๊น์ง
- ๋ ๋ง์ ์ต์ ํ๋ฅผ ์ ๊ณตํ ์๋ก ์ปดํ์ผ ์๊ฐ์ด ๋์ด๋จ
- ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์์ฃผ ์ปดํ์ผํ ๋๋ ๊ฒฐ๊ณผ ์ฝ๋๊ฐ ๋ค์ ๋๋ฆฌ๊ฒ ์คํ๋๋๋ผ๋ ์ปดํ์ผ์ด ๋น ๋ฅธ ํธ์ด ๋์์ด ๋จ
- ๋๋ฌธ์ dev ํ๋กํ์ opt-level ์ค์ ๊ธฐ๋ณธ๊ฐ์ 0
- ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ํด ์ฝ๋๋ฅผ ๋น๋ํ ๋๋ ์ปดํ์ผ์ ์๊ฐ์ ๋ ํ ์ ํ๋ ํธ์ด ๋์
- ๋๋ฌธ์ release ํ๋กํ์ opt-level ์ค์ ๊ธฐ๋ณธ๊ฐ์ 3
- ๋ฌ์คํธ๊ฐ ์ฝ๋์ ์ ์ฉํ ์ต์ ํ ์์ค์ ์ง์ ํ๋ฉฐ ์ ํจํ ๋ฒ์๋ 0๋ถํฐ 3๊น์ง
- ์นด๊ณ ๋ ํ๋ก์ ํธ์ Cargo.toml ํ์ผ์ [profile.*] ์น์ ์ด ๋ณ๋ ์ค์ ๋์ด ์์ง ์์ผ๋ฉด ๊ฐ ํ๋กํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ธฐ๋ณธ ์ค์ ์ ์ ์ฉํจ
2๏ธโฃ crates.io ์ฌ์ดํธ์ ํฌ๋ ์ดํธ ๋ฐํํ๊ธฐ
๐ค ์ ์ฉํ ๋ฌธ์ ์ฃผ์ ์์ฑํ๊ธฐ
- ๋ฌ์คํธ๋ ๋ฌธ์ํ๋ฅผ ์ํ ํน๋ณํ ํ์์ ์ฃผ์์ ์ง์ํจ
- ๋ฌธ์ ์ฃผ์(documentation comment)
- ์ฃผ์ ๋ด์ฉ์ ํ ๋๋ก HTML ๋ฌธ์ ์์ฑ
- ๊ณต๊ฐ API์ ์์ฑ๋ ๋ฌธ์ ์ฃผ์์ ๋ด์ฉ์ ๋ณด์ฌ์ค
- ํฌ๋ ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง๋ณด๋ค๋ ํฌ๋ ์ดํธ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง ์๊ณ ์ถ์ด ํ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ํจ
/// ์ฃผ์ด์ง ์ซ์์ 1์ ๋ํ๋ค.
///
/// # Examples
///
/// ```
/// let arg = 5;
/// let answer = my_crate::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
pub fn add_one(x: i32) -> i32 {
x+1
}
- ํจ์์ ๋ฌธ์ ์ฃผ์
- ๋ฌธ์ ์ฃผ์์ ์ฌ๋์ ์ธ ๊ฐ๋ก ์์
- ํ ์คํธ ํ์ํ๋ฅผ ์ํ markdown ๋ฌธ๋ฒ ์ง์
- ์ฃผ์ ์์ฑ ์์ดํ ๋ฐ๋ก ์ ์ ์์ฑํ๋ฉด ๋จ
- cargo doc ๋ช
๋ น ์คํ ์ ํด๋น ์ฃผ์์ ์ด์ฉํด HTML ๋ฌธ์๋ฅผ ์์ฑํ ์ ์์
cargo doc --open
: ํ์ฌ ํฌ๋ ์ดํธ์ ๋ฌธ์ ์ฃผ์์ผ๋ก ์์ฑํ HTML ๋ฌธ์ ์์ฑ ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ณด์ฌ์ค
(1) ๋ฌธ์ ์ฃผ์์ ์ฌ์ฉํ๋ ์น์
- Panics
- ํจ์๊ฐ ํจ๋์ ๋ฐ์์ํค๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช ํจ
- ์ด ํจ์์ ํธ์ถ์๊ฐ ํ๋ก๊ทธ๋จ์ด ํจ๋์ ๋ฐ์ํ๋ ๊ฒ์ ์์น ์์ ๋๋ ์ด ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํจ
- Errors
- ํจ์๊ฐ Result ํ์ ์ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ค ์ข ๋ฅ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋์ง, ์ด๋ค ์กฐ๊ฑด์์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ๋ช ์ํ๋ฉด ํธ์ถ์๊ฐ ๋ฐ์ ๊ฐ๋ฅํ ์๋ฌ๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋จ
- Safety
- ํจ์์ ํธ์ถ์ด ์์ ํ์ง ์๋ค๋ฉด, ์ด ํจ์๊ฐ ์ ์์ ํ์ง ์์ผ๋ฉฐ ํธ์ถ์๊ฐ ํจ์๋ฅผ ํธ์ถํ ๋ ์ฃผ์ํด์ผ ํ ๋ด์ฉ๋ค์ ๋ฐ๋์ ์ธ๊ธํด์ผ ํจ
(2) ๋ฌธ์ ์ฃผ์์ ํ ์คํธ์ ํ์ฉํ๊ธฐ
- cargo test ๋ช ๋ น ์คํ ์ ๋ฌธ์์ ์์ ์ฝ๋๋ฅผ ํ ์คํธ๋ก ์คํํด ์ค
(3) ์์ดํ ์ ๋ณด์ ํ ๋ฃจํธ๋ฅผ ์ํ ์ฃผ์
- ์์ดํ
์ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋ ์ฃผ์์ ๊ฐ์ง๊ณ ์๋ ์์ดํ
์ ๋ฌธ์์ ์ถ๊ฐํ๋ ค๋ฉด
//!
์ฌ์ฉ- ํฌ๋ ์ดํธ์ ๋ฃจํธ ํ์ผ(src/lib.rs)์ ์์ฑํ๊ฑฐ๋ ํฌ๋ ์ดํธ๋ ๋ชจ๋ ์ ์ฒด๋ฅผ ๋ฌธ์ํํ๊ธฐ ์ํด ๋ชจ๋ ์์ ์์ฑํจ
//! # My Crate
//!
//! `my crate` ๋ ์ผ๋ถ ์ฐ์ฐ์ ๋ ์ฝ๊ฒ ์คํํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ ๋ชจ์์ด๋ค.
- my_crate ์ ์ฒด์ ๋ํ ๋ฌธ์ํ ์ฃผ์
- ํฌ๋ ์ดํธ์ ๋ชจ๋์ ์ค๋ช ํ๋ ๋ฐ ์ ์ฉํจ
๐ค pub use ํค์๋๋ฅผ ์ด์ฉํด ๊ณต๊ฐ API ๋ฐํํ๊ธฐ
- ๊ณต๊ฐ API ๊ตฌ์กฐ๋ ํฌ๋ ์ดํธ๋ฅผ ๋ฐํํ ๋ ๊ฐ์ฅ ์ฃผ์ํด์ผ ํ ๋ถ๋ถ
- pub use ํค์๋๋ฅผ ์ด์ฉํ๋ฉด ๋ด๋ถ ๊ตฌ์กฐ์๋ ๋ค๋ฅธ ๊ณต๊ฐ์ฉ ๊ตฌ์กฐ๋ก ์์ดํ ์ ๋ค์ ๋ ธ์ถ(re-exporting)ํ ์ ์์
// src/lib.rs
//! # Art
//!
//! ๋ฏธ์ ํ์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pub mod kinds {
/// RYB ์์ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์ฃผ ์์
pub enum PrimaryColor {
Red,
Yellow,
Blue,
}
/// RYB ์์ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ๋ณด์กฐ ์์
pub enum SecondaryColor {
Orange,
Green,
Purple,
}
}
pub mod utils {
use crate::kinds::*;
/// ๋ ๊ฐ์ ์ฃผ ์์์ ์กฐํฉํด์
/// ๋ณด์กฐ ์์์ ์์ฑํ๋ค.
pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
// -- ์๋ต --
}
}
- kinds์ utils ๋ชจ๋๋ก ๊ตฌ์ฑ๋ art ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํฌ๋ ์ดํธ๋ use ๊ตฌ๋ฌธ์ ์ด์ฉํด art ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฌ ๋ฒ์๋ก ๊ฐ์ ธ์จ ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์๋ ๋ชจ๋ ๊ตฌ์กฐ์ ๋ฐ๋ผ ์์ดํ ์ ์ฌ์ฉํด์ผ ํจ
use art::kinds::PrimaryColor;
use art::utils::mix;
fn main() {
let red = PrimaryColor::Red;
let yellow = PrimaryColor::Yellow;
mix(red, yellow);
}
- art ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ฐ๋ผ ํ์ํ ํญ๋ชฉ ์ฌ์ฉ
- kinds ๋ชจ๋๊ณผ utils ๋ชจ๋์ ๋๋์ด ๊ตฌ์ฑ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ art ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๋๊ตฐ๊ฐ์๊ฒ๋ ๊ทธ๋ค์ง ์ ์ฉํ ์ ๋ณด๊ฐ ์๋
- ์ฌ์ฉ์๊ฐ ์ง์ ํ์ํ ์์ดํ ์ ์์น๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก ๋ชจ๋ ๊ตฌ์กฐ๋ ํผ๋์ ๊ฐ์ค์ํฌ ๋ฟ๋ง ์๋๋ผ, use ๊ตฌ๋ฌธ์ ๋ชจ๋์ ์ด๋ฆ์ ๋ชจ๋ ๋ช ์ํด์ผ ํ๋ฏ๋ก ๋ถํธํ๊ธฐ๋ ํจ
//! # Art
//!
//! ๋ฏธ์ ํ์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pub use self::kinds::PrimaryColor;
pub use self::kinds::SecondaryColor;
pub use self::utils::mix;
- pub use ๊ตฌ๋ฌธ์ ์ด์ฉํด ์์ดํ ์ ์ต์์ ์์ค์ผ๋ก ๋ค์ ๋ ธ์ถ
use art::PrimaryColor;
use art::mix;
fn main() {
let red = PrimaryColor::Red;
let yellow = PrimaryColor::Yellow;
mix(red, yellow);
}
- ๋ค์ ๋
ธ์ถ๋ ์์ดํ
์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ
- ์ค์ฒฉ ๋ชจ๋์ด ๋ง์ ๋ pub use ๊ตฌ๋ฌธ์ ์ด์ฉํด ํ์ ์ ์ต์์๋ก ๋ค์ ๋ ธ์ถํ๋ฉด ํฌ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ ํจ์ฌ ํธ๋ฆฌํ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์
- pub use ๊ตฌ๋ฌธ ์ฌ์ฉ ์ ํฌ๋ ์ดํธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ง์๋๋ก ๊ตฌ์ฑํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ฉด์๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ค์ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถํ์ง ์์
๐ค crate.io ๊ณ์ ์์ฑํ๊ธฐ
cargo login [API ํค]
- ~/.cargo/credentials ํ์ผ์ ์ ์ฅ
๐ค ์ ํฌ๋ ์ดํธ์ ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐ
- ๋ฐํ์ ์์ Cargo.toml ํ์ผ์ [package] ์น์ ์ ์ถ๊ฐํด์ ํฌ๋ ์ดํธ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํจ
[package]
name = "guessing_game"
- ํฌ๋ ์ดํธ๋ ์ ์ผํ ์ด๋ฆ์ด ํ์ํจ
- ๋ก์ปฌ์์ ๊ฐ๋ฐ ์ค์ด๋ผ๋ฉด ์ํ๋ ์ด๋ฆ์ ๋ถ์ฌํด๋ ๋จ
- crates.io์์ ๋ฑ๋กํ ์ด๋ฆ์ด ์ ์ ๋์ง ์์๋ค๋ฉด Cargo.toml ํ์ผ์ [package] ์น์ ์ ๋ฐํํ ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋จ
- ์ ์ผํ ์ด๋ฆ๋ง ์ ํ๊ณ cargo publish ๋ช
๋ น ์ํ ์ ์๋ฌ ๋ฐ์
- ํธ๋ ์ดํธ์ ๋์๊ณผ ์ฌ์ฉ ๊ท์ฝ์ ์ดํดํ๊ธฐ ์ํ ์ค๋ช ๋ฐ ๋ผ์ด์ ์ค ์ ๋ณด๋ฅผ ํ์๋ก ์ ๊ณตํด์ผ ํจ
[package]
name = "guessing_game"
license = "MIT"
- ๋ผ์ด์ ์ค์๋ ๋ผ์ด์ ์ค ์๋ณ์(license identifier) ๊ฐ์ ์ง์ ํด์ผ ํจ
- ๋ฆฌ๋ ์ค ์ฌ๋จ์ ์ํํธ์จ์ด ๋ฐ์ดํฐ ์ต์ค์ฒด์ธ์ง(SPDX, Software Package Data Exchange) ํ์ด์ง๋ฅผ ํตํด ์๋ณ์ ์ ํ ๊ฐ๋ฅ
- SPDX์ ๋์ด๋์ง ์์ ๋ผ์ด์ ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋ผ์ด์ ์ค์ ๋ด์ฉ์ ๋ณ๋์ ํ์ผ์ ์์ฑํด์ ํ๋ก์ ํธ์ ์ถ๊ฐํ ํ ๋ผ์ด์ ์ค ํค ๋์ ํ์ผ์ ์ด๋ฆ์ license-file ํญ๋ชฉ์ ์ง์ ํจ
- ๋ฌ์คํธ ์ปค๋ฎค๋ํฐ์ ๋ง์ ๊ฐ๋ฐ์๋ MIT์ Apache-2.0 ๋์ผ ๋ผ์ด์ ์ค๋ฅผ ์ ์ฉํจ
[package]
name = "guessing_game"
version = "0.1.0"
authors = ["์์ฑ์ ์ด๋ฆ <you@example.com>"]
description = "์ปดํจํฐ๊ฐ ์ ํํ ์ซ์๋ฅผ ๋งํ๋ ๊ฒ์"
license = "MIT OR Apache-2.0"
edition = "2018"
[dependencies]
- ๋ฐํ ์ค๋น๊ฐ ๋ ํ๋ก์ ํธ์ Cargo.toml ํ์ผ
๐ค crates.io์ ๋ฐํํ๊ธฐ
- ํฌ๋ ์ดํธ ๋ฐํ์ ์๊ตฌ์ ์ด๋ฏ๋ก ๋ฐํ ์์๋ ์ถฉ๋ถํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํจ
- ๋ฒ์ ์ ์ ๋ ๋ฎ์ด์ธ ์ ์์ผ๋ฉฐ ์ฝ๋ ์ญ์ ์ญ์ ํ ์ ์์
- ๋์ ๋ฐํ ํ์์ ๋ํ ์ ํ ์์ด ์ํ๋ ๋งํผ์ ํฌ๋ ์ดํธ๋ฅผ ๋ฐํํ ์ ์์
๐ค ๋ฑ๋กํ ํฌ๋ ์ดํธ์ ์ ๋ฒ์ ๋ฐํํ๊ธฐ
- ํฌ๋ ์ดํธ ์์ ํ ์ ๋ฒ์ ์ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ค๋นํ ๊ฒฝ์ฐ Cargo.toml ํ์ผ์ ์ง์ ํ ๋ฒ์ ๊ฐ์ ์์ ํด์ ๋ค์ ๋ฐํํ๋ฉด ๋จ
- https://semver.org/ ์ ์๋งจํฑ ๋ฒ์ ๋(Semantic Versioning) ๊ท์น์ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ ๋ค์ ๋ฒ์ ์ ์ ์ ํ๊ฒ ์ง์
๐ค cargo yank ๋ช ๋ น์ ์ด์ฉํด crates.io์์ ๋ฒ์ ์ ๊ฑฐํ๊ธฐ
- ์ด์ ๋ฒ์ ์ ํฌ๋ ์ดํธ๋ฅผ ์ญ์ ํ ์๋ ์์ง๋ง, ๋ค๋ฅธ ํ๋ก์ ํธ๋ค์ด ์์ผ๋ก ์ด์ ๋ฒ์ ์ ์๋ก ์์กด ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ง์ ์ ์์
- ํฌ๋ ์ดํธ๋ฅผ ์ค๋จํ๋ฉด ๊ธฐ์กด ํ๋ก์ ํธ๋ ๊ณ์ํด์ ํด๋น ๋ฒ์ ์ ๋ด๋ ค๋ฐ์ ์ ์์ง๋ง, ์ ํ๋ก์ ํธ์ ์ถ๊ฐํ ์ ์์
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋จ์ Cargo.lock ํ์ผ์ด ์์ฑ๋ ๋ชจ๋ ํ๋ก์ ํธ๋ ๋ฌธ์ ์์ด ๋์ํ๋๋ก ์ง์ํ๋, ํฅํ ์์ฑ๋๋ Cargo.lock ํ์ผ๋ค์ ์ค๋จ๋ ๋ฒ์ ์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ํ๋ ๊ฒ
cargo yank --vers 1.0.1
- ํน์ ๋ฒ์ ์ ํฌ๋ ์ดํธ ์ค๋จ ๋ช ๋ น
cargo yank --vers 1.0.1 --undo
- ํน์ ๋ฒ์ ์ ํฌ๋ ์ดํธ ์ค๋จ ์ทจ์ ๋ช ๋ น
3๏ธโฃ ์นด๊ณ ์์ ๊ณต๊ฐ
- ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ์ ํฌ๊ธฐ๊ฐ ๊ณ์ ์ฆ๊ฐํด์ ํจํค์ง๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ๋ก ๋๋์ด์ผ ํ ์๊ธฐ๊ฐ ์ด
- ์นด๊ณ ๋ ๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์์ ๊ณต๊ฐ(workspaces)์ด๋ผ๋ ๊ธฐ๋ฅ ์ ๊ณต
๐ค ์์ ๊ณต๊ฐ ์์ฑํ๊ธฐ
- ์์ ๊ณต๊ฐ์ ๊ฐ์ Cargo.lock ํ์ผ๊ณผ ์ถ๋ ฅ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ํจํค์ง์ ์งํฉ
- ํ๋์ ๋ฐ์ด๋๋ฆฌ์ ๋ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ์์
๊ณต๊ฐ
- ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๋ฐ์ด๋๋ฆฌ๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํจ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ add_one ํจ์๋ฅผ ์ ๊ณต
- ๋ ๋ฒ์งธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ add_two ํจ์๋ฅผ ์ ๊ณต
[workspace]
members = [
"adder",
]
- add ๋๋ ํฐ๋ฆฌ ์ ์ฒด ์์
๊ณต๊ฐ์ ์ค์ ์ ์ง์ ํ Cargo.toml
- ๋ค๋ฅธ Cargo.toml ํ์ผ๊ณผ ๋ฌ๋ฆฌ [package] ์น์ ์ด๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ง ์์
- ๋์ [workspace] ์น์ ์ ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ์ ๊ฒฝ๋ก adder๋ฅผ ์ถ๊ฐํจ
- ์ถ๊ฐ ํ add ๋๋ ํฐ๋ฆฌ ์์์ cargo new ๋ช
๋ น์ผ๋ก adder ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ ์์ฑ
- ์ด ์์ ์ ์ cargo build ๋ช ๋ น์ผ๋ก ์์ ๊ณต๊ฐ ๋น๋ ๊ฐ๋ฅ
add
โโโ Cargo.lock
โโโ Cargo.toml
โโโ adder
โ โโโ Cargo.toml
โ โโโ src
โ โโโ main.rs
โโโ target
- ์์
๊ณต๊ฐ์ ์ต์์์ ํ๋์ target ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ์ง๋ฉฐ ์ฌ๊ธฐ์ ๋ชจ๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ชจ์
- adder ํฌ๋ ์ดํธ๋ ๋ ๋ฆฝ์ ์ธ target ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ์ง ์์
๐ค ์์ ๊ณต๊ฐ์ ๋ ๋ฒ์งธ ํฌ๋ ์ดํธ ์์ฑํ๊ธฐ
[workspace]
members = [
"adder",
"add-one",
]
- [workspace] ์น์ ์ add-one ์ถ๊ฐ ํ add-one์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ ์์ฑ
add
โโโ Cargo.lock
โโโ Cargo.toml
โโโ add-one
โ โโโ Cargo.toml
โ โโโ src
โ โโโ lib.rs
โโโ adder
โ โโโ Cargo.toml
โ โโโ src
โ โโโ main.rs
โโโ target
- ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ adder์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ add-one์ ๋ํ ์์กด์ฑ ์ถ๊ฐ ๊ฐ๋ฅ
[dependencies]
add-one = { path = "../add-one" }
- adder/Cargo.toml ํ์ผ์ add-one ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฒฝ๋ก ์ถ๊ฐ
- ์นด๊ณ ๋ ์์ ๊ณต๊ฐ ์์ ํฌ๋ ์ดํธ๊ฐ ์๋ก ์์กด์ฑ์ด ์๋ค๊ณ ๊ฐ์ ํ์ง ์์ผ๋ฏ๋ก ํฌ๋ ์ดํธ ๊ฐ ์์กด ๊ด๊ณ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด ์ฃผ์ด์ผ ํจ
cargo run -p adder
- add ๋๋ ํฐ๋ฆฌ์์ ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ๋ฅผ ์คํํ๋ ค๋ฉด cargo run ๋ช ๋ น์ -p ์ธ์๋ฅผ ์ด์ฉํด ์์ ๊ณต๊ฐ์์ ์คํํ ํจํค์ง์ ์ด๋ฆ์ ์ง์ ํด์ผ ํจ
(1) ์์ ๊ณต๊ฐ์ ์ธ๋ถ ํฌ๋ ์ดํธ ์์กด์ฑ ์ถ๊ฐํ๊ธฐ
- ์์
๊ณต๊ฐ์ ์ต์์ ๋๋ ํฐ๋ฆฌ์ ํ๋์ Cargo.lock ํ์ผ์ ๊ฐ์
- ๋ชจ๋ ์์กด์ฑ์ ๋ํด ๊ฐ์ ๋ฒ์ ์ ์ฉ ๊ฐ๋ฅ
- ์์ ๊ณต๊ฐ ๋ด์ ํฌ๋ ์ดํธ ๊ฐ ํธํ์ฑ ํ๋ณด ๊ฐ๋ฅ
- ํ์ง๋ง ํน์ ํฌ๋ ์ดํธ์ Cargo.toml ํ์ผ์ ์ธ๋ถ ํฌ๋ ์ดํธ๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฉด ์์ ๊ณต๊ฐ์ ๋ค๋ฅธ ํฌ๋ ์ดํธ์์๋ ์ฌ์ฉํ ์ ์์
(2) ์์ ๊ณต๊ฐ์ ํ ์คํธ ์์ฑํ๊ธฐ
- ์ต์์ ๋๋ ํฐ๋ฆฌ์์ cargo test ๋ช ๋ น ์คํ ์ ์์ ๊ณต๊ฐ ๋ด์ ๋ชจ๋ ํฌ๋ ์ดํธ์ ๋ํ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํจ
- -p ํ๋๊ทธ์ ์ํ๋ ํฌ๋ ์ดํธ์ ์ด๋ฆ ์ง์ ์ ์์ ๊ณต๊ฐ ๋ด ํด๋น ํฌ๋ ์ดํธ์ ํ ์คํธ๋ง ๋ณ๋๋ก ์คํํจ
- ์์ ๊ณต๊ฐ์ ํฌ๋ ์ดํธ๋ฅผ ๋ณ๋๋ก ๋ฐํํ๋ ค๋ฉด ๋ฐ๋์ ํด๋น ํฌ๋ ์ดํธ์ ๋๋ ํฐ๋ฆฌ์์ cargo publish ๋ช ๋ น์ ์คํํด์ผ ํจ
4๏ธโฃ cargo install ๋ช ๋ น์ ์ด์ฉํด crates.io์์ ๋ฐ์ด๋๋ฆฌ ์ค์นํ๊ธฐ
- cargo install ๋ช
๋ น ์ด์ฉ ์ ๋ฐ์ด๋๋ฆฌ ํฌ๋ ์ดํธ๋ฅผ ๋ก์ปฌ์ ์ค์นํด ์ฌ์ฉํ ์ ์์
- ๋ช ๋ น์ผ๋ก ์ค์นํ ๋ชจ๋ ๋ฐ์ด๋๋ฆฌ๋ ๋ฃจํธ์ bin ํด๋์ ์ค์น๋จ
- rustup์ ์ด์ฉํด ๋ฌ์คํธ๋ฅผ ์ค์นํ๊ณ ๋ณ๋๋ก ์ค์ ์ ์ฌ์ ์ํ์ง ์์๋ค๋ฉด ์ด ๋๋ ํฐ๋ฆฌ๋ $HOME/.cargo/bin ์
- ํด๋น ๋๋ ํฐ๋ฆฌ๋ฅผ $PATH ํ๊ฒฝ๋ณ์์ ์ถ๊ฐํด์ผ์ง ์ค์นํ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์
5๏ธโฃ ์ฌ์ฉ์ ์ ์ ๋ช ๋ น์ ์ด์ฉํด ์นด๊ณ ํ์ฅํ๊ธฐ
- $PATH ๋ณ์์ cargo-something ๋ฐ์ด๋๋ฆฌ๊ฐ ์ง์ ๋์ด ์๋ค๋ฉด ์ด ๋ฐ์ด๋๋ฆฌ๋ cargo something๊ณผ ๊ฐ์ด ์นด๊ณ ์ ํ์ ๋ช ๋ น์ผ๋ก ์คํํ ์ ์์
- ์ฌ์ฉ์ ์ ์ ๋ช ๋ น์ cargo --list๋ก ํ์ธ ๊ฐ๋ฅ
Summary
- ์นด๊ณ ์ https://crates.io ๋ฅผ ์ด์ฉํด ์ฝ๋ ๊ณต์ ์ ๋ค์ํ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด ๋ฌ์คํธ ์ปค๋ฎค๋ํฐ์ ๋งค์ฐ ์ ์ตํจ
- ๋ฌ์คํธ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๊ณ ์์ ์ ์ด์ง๋ง, ํฌ๋ ์ดํธ๋ ๊ณต์ ์ ์ฌ์ฌ์ฉ์ด ์ฌ์ฐ๋ฉฐ ์ธ์ด์๋ ๋ค๋ฅด๊ฒ ๊ณ์ ๊ฐ์ ๋จ
728x90
๋ฐ์ํ
'Development Study > Rust' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Rust] Start Rust (Day 22) - Functional Language Features: Iterators and Closures (2) | 2023.11.20 |
---|---|
[System] The Elements of Computing System - 4 (0) | 2023.11.08 |
[System] The Elements of Computing System - 3 (1) | 2023.11.08 |
[System] The Elements of Computing System - 2 (1) | 2023.11.04 |
[System] The Elements of Computing System - 1 (1) | 2023.10.31 |
Comments