D - 유용한 개발 도구
러스트 학습이 깊어질수록 문법 지식만큼 도구 활용 능력이 생산성을 좌우합니다.
rustfmt, cargo fix, 린터, IDE 통합 도구는 반복 실수를 줄이고 코드 품질을 일정하게 유지하는 데 핵심 역할을 합니다.
이 부록은 단순 설치 안내가 아니라, 어떤 문제를 어떤 도구로 해결하는지가 빠르게 떠오르도록 정리한 실전 참고 자료입니다.
본문 학습 중 반복되는 작업이 많아질수록 이 절의 가치가 더 크게 느껴질 것입니다.
도구를 팀 표준으로 맞추면 코드 리뷰에서 스타일 논쟁을 줄이고 본질적인 로직 검토에 더 집중할 수 있습니다.
또한 자동화 도구는 학습 초기에 실수 패턴을 빠르게 피드백해 주기 때문에 입문자에게도 효과가 큽니다.
이 절을 참고해 자신의 개발 루틴에 맞는 최소 도구 세트를 먼저 고정하는 것을 권장합니다.
도구 체인이 안정되면 학습과 실무 모두에서 반복 작업의 피로가 크게 줄어듭니다.
부록 D - 유용한 개발 도구
아래 다이어그램은 이 절의 핵심 흐름을 역할과 상태 전환 중심으로 정리한 것입니다.
이 부록에서는 러스트 프로젝트가 제공하는 유용한 개발 도구에 대해 알아보겠습니다. 자동 포맷팅, 경고 수정을 적용하는 빠른 방법, 린터(linter), IDE와의 통합 등을 살펴보겠습니다.
그림 D-1: 문제 유형과 실행 순서로 정리한 Rust 개발 도구 체인아래 다이어그램은 문제 유형별로 어떤 명령과 피드백을 확인해야 하는지 정리한 것입니다.
rustfmt로 자동 포맷팅하기
rustfmt 도구는 커뮤니티 코드 스타일에 따라 여러분의 코드를 다시 포맷합니다.
많은 협업 프로젝트는 rustfmt를 사용하여 러스트를 작성할 때 사용할 스타일에
대한 논쟁을 방지합니다. 모든 사람이 이 도구를 사용하여 코드를 포맷합니다.
rustfmt 도구를 설치하려면 다음을 입력하세요.
$ rustup component add rustfmt이 명령은 rustc와 cargo처럼 rustfmt와 cargo-fmt를 제공합니다.
어떤 Cargo 프로젝트를 포맷하려면, 다음을 입력하세요.
$ cargo fmt이 명령을 실행하면 현재 크레이트의 모든 러스트 코드를 다시 포맷합니다.
이 명령은 코드의 의미를 변경하지 않고 코드 스타일만 변경합니다.
rustfmt에 대한 자세한 내용은 문서를 참고하세요.
rustfix로 코드 수정하기
rustfix 도구는 러스트 설치에 포함되어 있으며 원하는 문제를 해결할
수 있는 명확한 방법이 있는 컴파일러 경고를 자동으로 수정할 수
있습니다. 컴파일러 경고를 이미 본 적이 있을 것입니다. 예를 들어,
다음 코드를 살펴보겠습니다.
fn do_something() {}
fn main() {
for i in 0..100 {
do_something();
}
}여기서는 do_something 함수를 100번 호출하지만, for 루프의 본문에서
i 변수를 사용하지 않습니다. 러스트는 이것에 대해 경고합니다.
$ cargo build
Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: unused variable: `i`
--> src/main.rs:4:9
|
4 | for i in 0..100 {
| ^ help: consider using `_i` instead
|
= note: #[warn(unused_variables)] on by default
Finished dev [unoptimized + debuginfo] target(s) in 0.50s이 경고는 대신에 _i라는 이름을 사용하라고 제안합니다. 밑줄은 이
변수를 사용하지 않을 것이라는 의도를 나타냅니다. cargo fix 명령을
실행하면 rustfix 도구를 사용하여 이 제안을 자동으로 적용할 수
있습니다.
$ cargo fix
Checking myprogram v0.1.0 (file:///projects/myprogram)
Fixing src/main.rs (1 fix)
Finished dev [unoptimized + debuginfo] target(s) in 0.59ssrc/main.rs를 다시 살펴보면, cargo fix가 코드를 변경했음을 알 수
있습니다.
fn do_something() {}
fn main() {
for _i in 0..100 {
do_something();
}
}for 루프 변수가 이제 _i라는 이름이 되었고, 경고는 더 이상 나타나지 않습니다.
또한 cargo fix 명령을 사용하여 코드에 대해 서로 다른 러스트 에디션 간
변경을 적용할 수도 있습니다. 에디션은 부록 E에서 다룹니다.
Clippy로 더 많은 린트 사용하기
Clippy 도구는 코드를 분석하여 일반적인 실수를 잡고 러스트 코드를 개선할 수 있도록 하는 린트(lint) 모음입니다.
Clippy를 설치하려면 다음을 입력하세요.
$ rustup component add clippyClippy의 린트를 어떤 Cargo 프로젝트에 실행하려면 다음을 입력하세요.
$ cargo clippy예를 들어 다음과 같이 수학적 상수(예: pi)의 근사치를 사용하는 프로그램을 작성했다고 가정해보겠습니다.
fn main() {
let x = 3.1415;
let r = 8.0;
println!("the area of the circle is {}", x * r * r);
}cargo clippy를 이 프로젝트에 실행하면 다음과 같은 오류가 발생합니다.
error: approximate value of `f{32, 64}::consts::PI` found
--> src/main.rs:2:13
|
2 | let x = 3.1415;
| ^^^^^^
|
= note: `#[deny(clippy::approx_constant)]` on by default
= help: consider using the constant directly
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant이 에러는 러스트에 이미 더 정확한 PI 상수가 정의되어 있으며, 프로그램이
이 상수를 대신 사용하도록 수정하면 더 정확해진다는 것을 알려줍니다.
그러면 여러분이 PI 상수를 사용하도록 코드를 변경할 수 있습니다.
다음 코드는 Clippy에서 어떠한 오류나 경고도 발생하지 않습니다.
fn main() {
let x = std::f64::consts::PI;
let r = 8.0;
println!("the area of the circle is {}", x * r * r);
}Clippy에 대한 더 많은 정보를 보려면 Clippy 문서를 참조하세요.
rust-analyzer를 사용한 IDE 통합
러스트 커뮤니티는 IDE 통합을 돕기 위해 rust-analyzer를
추천합니다. 이 도구는 언어 서버 프로토콜(Language Server Protocol)을
사용하는 컴파일러 중심의 유틸리티 세트인데, 이 프로토콜은 IDE와
프로그래밍 언어가 서로 통신할 수 있도록 하는 사양입니다.
Visual Studio Code의 Rust analyzer 플러그인과 같은
다른 클라이언트에서도 rust-analyzer를 사용할 수 있습니다.
설치 방법을 보려면 rust-analyzer 프로젝트의 홈페이지를
방문하고, 여러분의 IDE에 특정한 언어 서버 지원을 설치하세요.
여러분의 IDE는 자동 완성, 정의로 이동, 인라인 오류 등과 같은
기능을 얻게 될 것입니다.
개발 도구 부록은 Cargo, rustfmt, Clippy, rust-analyzer를 하나의 반복 루틴으로 묶어 사용할 때 효과가 큽니다.
마지막으로 문제 증상별로 어떤 도구부터 실행할지 빠르게 고를 수 있도록 실행 순서 색인을 정리했습니다.