Programming

Rust 기초 알기 - 2.2 Rust 개발 도구 소개

IT오이시이 2023. 5. 24. 21:51
728x90



Rust기초알기 - 2.2 Rust 개발 도구 소개

 

Rust기초알기(2) - 개발환경 설정
2.1 Rust 설치
2.2 Rust 개발 도구 소개 (Cargo, rustup 등)
2.3 Rust 개발 IDE 에디터 소개

[목차] Rust Programming - Rust 기초 알기 목차.Zip

#Rust프로그래밍  #Rust언어기초 #Rust기초문법 #Rust기초알기

 

 
2.2 Rust 개발 도구 소개

Rust 개발 도구는 Rust 언어를 사용하여 프로그래밍을 보다 쉽고 효율적으로 할 수 있도록 도와주는 다양한 도구들로 구성됩니다. 이러한 도구들은 개발 환경 구축, 코드 편집, 빌드, 테스트, 디버깅 등 다양한 작업을 지원합니다.

Rust는 개발을 보다 편리하고 효율적으로 만들어주는 핵심 도구들이 있습니다.

 

1. Rustup: Rust 언어의 설치와 버전 관리를 담당하는 도구입니다.

rustup을 사용하면 여러 Rust 버전을 관리하고 필요한 버전을 선택하여 프로젝트에 적용할 수 있습니다. 또한, Rust의 채널 (Stable, Beta, Nightly)을 변경하거나 업데이트하는 기능도 제공합니다.

 

2. Cargo: Rust의 기본 빌드 시스템 및 의존성 관리 도구입니다.

Cargo는 프로젝트의 구성 파일인 Cargo.toml을 사용하여 프로젝트의 의존성을 관리하고, 빌드, 테스트, 실행 등의 작업을 자동화합니다. Cargo는 간단하면서도 강력한 기능을 제공하여 Rust 프로젝트의 생산성을 향상시킵니다.

 

3. Rust Language Server (RLS): IDE와 통합하여 Rust 코드 편집을 지원하는 도구입니다.

RLS는 코드 자동 완성, 신택스 하이라이팅, 오류 표시, 리팩토링 지원 등 다양한 기능을 제공하여 개발자가 효율적으로 Rust 코드를 작성할 수 있도록 도와줍니다.

 

4. Rust Analyzer: RLS의 대안으로 개발된 Rust 코드 분석 도구입니다.

Rust Analyzer는 더 빠르고 정확한 코드 분석을 제공하며, IDE와의 통합에서 높은 성능을 발휘합니다. 현재 Rust 개발자 커뮤니티에서 많은 관심을 받고 있습니다.

 

5. Rustfmt: Rust 코드 포맷터로, 코드의 일관성과 가독성을 유지하도록 도와줍니다.

Rustfmt를 사용하면 개발자가 특정한 스타일 가이드에 따라 코드를 포맷팅할 수 있으며, 코드의 일관성을 유지하기 위해 규칙에 따라 자동으로 코드를 조정할 수 있습니다.

 

6. Clippy: Rust의 정적 분석 도구로, 잠재적인 버그나 개선 가능한 코드 패턴을 찾아주고 개발자에게 권고사항을 제공합니다.

Clippy는 Rust 개발자들 사이에서 널리 사용되며, 코드 품질 향상에 도움을 줍니다.

이 외에도 다양한 Rust 개발 도구와 라이브러리들이 있으며, Rust 개발 커뮤니티에서는 지속적으로 새로운 도구와 기술들이 개발되고 있습니다.

 

1. Rustup

* Rustup 버전 확인하기

`rustc --version`은 현재 설치된 Rust 컴파일러의 버전을 확인합니다. Rust는 특정 주기별도 릴리즈 되므로 버전은 x.y.z와 같은 날짜 형식으로 표시됩니다.

# Rust 버전 확인하기:
$ rustc --version
rustc x.y.z (abcabcabc yyyy-mm-dd)

C:\Users\WD250>rustc --version
rustc 1.71.0-nightly (77f4f828a 2023-05-20)
 

 

* Rustup 채널 변경하기

rust는 stable, beta, nightly 등 3가지 릴리즈 채널을 가지고 있습니다. nightly은 매일 밤마다 생성되는 버전이고, 매 6주마다 Beta를 생성하여 테스트가 완료 되면 Stable로 릴리스를 합니다. nightly 버전은 최신의 기능들을 가지고 릴리즈가 되므로 새로운 기능을 개발에 테스트가 가능하고 beta는 stable 릴리즈를 위해서 테스트 하므로 버전 업그레이드 전에 사용하면 좋을듯 합니다.

stable 대신 beta나 nightly를 사용하여 다른 채널로 변경할 수도 있습니다.

아래와 같이 `rustc default stable`명령으로 stable 버전으로 쉽게 변경됩니다. Python Venv 와 같이 하나의 개발 버전만 가지고 사용하는 것이 아니라 여러 버전을 동시에 사용 가능하므로 새로운 릴리즈가 나오기 전에 테스트를 쉽게 할수 있게 되었습니다.

# Rust버전 변경하기 : 
$ rustup default stable

C:\Users\WD250>rustup default stable
info: using existing install for 'stable-x86_64-pc-windows-msvc'
info: default toolchain set to 'stable-x86_64-pc-windows-msvc'

  stable-x86_64-pc-windows-msvc unchanged - rustc 1.69.0 (84c898d65 2023-04-16)
C:\Users\WD250>rustc --version
rustc 1.69.0 (84c898d65 2023-04-16)
 

 

* Rustup으로 업데이트 하기

Rustup과 설치된 Rust 도구 체인을 최신 버전으로 업데이트합니다. Rust의 새로운 버전이나 업데이트가 있는 경우 이 명령을 실행하여 업데이트할 수 있습니다.

# Rust버전 업데이트하기 : 
$ rustup update

C:\Users\WD250>rustup update
info: syncing channel updates for 'stable-x86_64-pc-windows-msvc'
info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc'
info: latest update on 2023-05-24, rust version 1.71.0-nightly (5ea3f0ae0 2023-05-23)
info: downloading component 'cargo'
 stable-x86_64-pc-windows-msvc unchanged - rustc 1.69.0 (84c898d65 2023-04-16)
 nightly-x86_64-pc-windows-msvc updated - rustc 1.71.0-nightly (5ea3f0ae0 2023-05-23) (from rustc 1.71.0-nightly (77f4f828a 2023-05-20))

info: cleaning up downloads & tmp directories
 

* rust nightly 버전이 (77f4f828a 2023-05-20) 에서 1.71.0-nightly (5ea3f0ae0 2023-05-23)로 업데이 되었습니다.

* rust 릴리즈 정보 확인 : https://forge.rust-lang.org/infra/other-installation-methods.html

 

2. Cargo

Cargo는 Rust 언어의 기본 빌드 시스템 및 의존성 관리 도구입니다. Rust 개발자들이 프로젝트를 관리하고 빌드하는 데 필요한 작업들을 자동화하여 개발 생산성을 높이는 역할을 합니다.


Cargo의 기본적인 용법 정리

1. cargo new 를 사용하여 프로젝트를 만들 수 있습니다
2. cargo build 를 사용하여 프로젝트를 빌드할 수 있습니다.
3. cargo run 은 NET을 사용하여 한 번에 프로젝트를 빌드하고 실행할 수 있습니다
4. cargo check 는 .NET을 사용하여 오류를 확인하기 위해 바이너리를 생성하지 않고 프로젝트를 빌드할 수 있습니다.
5. Cargo는 빌드 결과를 코드와 같은 디렉토리에 저장하는 대신 이를 target/debug 디렉토리에 저장합니다.

# my_project라는 이름의 새로운 Rust 프로젝트를 생성
$ cargo new my_project
$ cd my_project


# Cargo.toml 파일을 이용한 의존성관리 
- [dependencies] 섹션에 사용할 라이브러리의 의존성을 추가하면 build 실행시 자동으로 다운로드 됩니다.
[dependencies]
rand = "0.8"

# 빌드를 통해 프로젝트 필요한 라이브러리의 의존성을 확인하고 실행 파일을 생성합니다. 
$ cargo build

# 빌드를 수행하고 생성된 실행 파일을 실행합니다. 
$ cargo run

# 프로젝트 내의 단위 테스트를 실행하고 테스트 결과와 커버리지 정보를 출력합니다.
$ cargo test

# 최적화된 바이너리를 생성하여 릴리스 모드로 프로젝트를 빌드합니다. 실행 파일의 크기와 실행 속도가 개선됩니다.
$ cargo build --release

# 문서화 생성은 다음 명령을 사용합니다:
$ cargo doc
 

 

1) 의존성 관리: Cargo는 Cargo.toml 파일을 사용하여 프로젝트의 의존성을 쉽게 관리하고 필요한 라이브러리를 자동으로 다운로드합니다.

2) 빌드 시스템: Cargo는 `cargo build` 명령을 사용하여 필요한 라이브러리와 의존성을 검사하고 수정된 파일만 컴파일하여 실행 파일을 생성합니다. 빌드 오류가 발생한 경우 오류 메시지와 함께 알려줍니다.

3) 테스트: Cargo는 `cargo test` 명령은 프로젝트의 단위 테스트를 자동으로 실행하고 결과와 커버리지 정보를 제공하여 성공 실패을 알려줍니다..

4) 실행: Cargo는 `cargo run` 명령은 프로젝트를 간편하게 실행하고 릴리스 모드로 최적화된 바이너리를 생성하여 배포할 수 있습니다. 최신 빌드를 수행하고 실행 파일을 실행하여 프로그램을 실행합니다.

5) 배포: Cargo는 `cargo build --release` 명령은 릴리스 모드로 최적화된 바이너리를 생성하며, 실행 파일의 크기와 실행 속도를 개선합니다. 배포에 필요한 파일들을 프로젝트를 패키지로 묶는 기능도 제공합니다.

6) 확장 기능: Cargo는 더 많은 기능을 제공합니다. 예를 들어, cargo doc 명령은 프로젝트의 문서화를 쉽게 생성하여 문서를 제공합니다. cargo clean 명령은 빌드 중에 오래전에 생성된 파일들을 정리합니다. Cargo는 또한 다양한 확장 기능을 통해 프로젝트를 커스터마이징하고 빌드 프로세스를 확장할 수 있는 기능도 제공합니다.

 

 

3. Rust Language Server (RLS)

Rust 개발 환경에서 사용되는 프로그램입니다. RLS의 주요 기능은 다음과 같습니다:

코드 분석 및 인덱싱: RLS는 Rust 코드를 분석하여 프로젝트의 모듈, 구조체, 함수, 메서드 등의 정보를 추출하고 인덱싱합니다. 이를 통해 코드 내부 구조에 대한 풍부한 정보를 얻을 수 있습니다.

1) 자동 완성:

RLS는 코드 내용과 컨텍스트를 분석하여 자동 완성 기능을 제공합니다. 개발자가 코드를 작성하는 동안 함수, 메서드, 변수 등의 제안을 보여주어 개발 속도와 정확성을 향상시킵니다.

2) Syntax 하이라이팅:

RLS는 코드의 Syntax를 분석하여 문법적으로 중요한 요소를 강조 표시하여 가독성을 높입니다. 이를 통해 코드의 구조를 시각적으로 파악할 수 있습니다.

3) 오류 검사:

RLS는 코드를 정적으로 분석하여 잠재적인 오류를 검출합니다. 변수의 사용 오류, 타입 불일치, 잘못된 함수 호출 등의 문제를 식별하여 개발자에게 피드백을 제공합니다.

4) 코드 내비게이션:

RLS는 프로젝트의 코드를 탐색할 수 있는 기능을 제공합니다. 함수나 구조체의 정의 위치로 이동하거나, 코드에서 참조하는 위치로 이동하는 등의 내비게이션을 지원하여 코드를 효율적으로 탐색할 수 있습니다.

RLS는 Rust 개발에 있어서 중요한 도구로 사용되며, 다양한 IDE와 텍스트 에디터에서 통합되어 개발자에게 편리한 작업 환경을 제공합니다.

 

4. Rust analyzer

 

1) 코드 분석:
Rust Analyzer는 Rust 코드를 정적으로 분석하여 코드베이스의 구조, 식별자, 타입 등에 대한 풍부한 정보를 제공합니다. 이를 통해 코드 내부 구조를 이해하고 탐색할 수 있습니다.

2) 자동 완성:
Rust Analyzer는 코드 작성 중에 함수, 메서드, 변수 등의 자동 완성 기능을 제공합니다. 코드 컨텍스트를 분석하여 개발자에게 필요한 기능과 식별자를 제안해줌으로써 개발 생산성을 향상시킵니다.

3) 코드 리팩터링:
Rust Analyzer는 코드 리팩터링을 지원합니다. 코드의 구조를 변경하거나 기능을 개선하는 작업을 수행할 때, 코드베이스의 다른 부분에 영향을 미치는 변경 사항을 자동으로 감지하고 이에 맞게 수정 제안을 제공합니다.

 

5. Rustfmt

Rustfmt는 Rust 코드의 형식을 일관되고 규칙에 맞게 자동으로 포맷팅해주는 도구입니다. Rustfmt를 사용하면 코드의 가독성과 일관성을 유지할 수 있습니다.

 

1. Rustfmt 설치
$ cargo install rustfmt

2. 코드 포맷팅 :  main.rs 파일의 코드를 자동으로 포맷팅하고, 형식에 맞지 않는 부분을 수정
$ rustfmt main.rs

3. Rustfmt는 다양한 코드 스타일 옵션을 지정
  - .rustfmt.toml 파일을 프로젝트 루트 디렉토리에 생성하여 코드 스타일 옵션을 설정
# .rustfmt.toml 파일 내용
tab_spaces = 4

3. 에디터 통합
  - 대부분의 Rust 편집기 및 IDE에서 Rustfmt 플러그인 또는 확장 기능을 제공하고 있으며,
    저장 시 자동 포맷팅을 설정할 수 있습니다.
 

 

6. Clippy

 

Clippy는 Rust 코드를 정적으로 분석하여 잠재적인 문제나 개선할 수 있는 부분을 감지하고 개발자에게 경고 및 권고 사항을 제공하는 도구입니다.

 

1. Clippy 설치 - Rust의 패키지 관리자인 Cargo를 통해 설치
$ cargo install clippy

2. Rust 코드 파일인 main.rs 의 코드를 분석합니다.
$ cargo clippy --all-targets


3. 경고 해결:
Clippy가 제공하는 경고 메시지를 통해 개선할 수 있는 부분을 파악하고 이를 수정합니다. 

4. Clippy 플러그인 및 통합:
Clippy는 다양한 텍스트 에디터와 통합하여 코드 분석과 경고를 실시간으로 제공할 수 있습니다.
 
 

이와 같이 Rust는 커뮤니티를 통해서 개발 환경에 대한  코드의 안전성과 효율성을 개선하는 데 유용한 도구들이 제공 됩니다.

 

[ Rust의 미래] 

문득 생각 나는 내용을 추가로 적어 봅니다.

Rust 언어가 향후 C언어를 대체 할 것인가? 인데요  그것은 최근 ChatGPT와 같은 인공지능이 개발자들이 대체하는 프로그램을 대신해 줄 시대가 머지 않았다는 점으로 생각을 해보았습니다.

개발자가 하는일은 프로그램 을 작성할때  업무의 흐름을 생각하면서 함수들을 만들어 갑니다. 이를 두고 우리는 Component (업무) Based Development,  Domain(업무) Driven Development,  Module(업무, 기능) , Object (객체, 업무+기능) Oriented Programming ,  MVC(Model (데이터,업무) + View + Control(흐름) ) 등 다양한 용어들이 있지만 결국  업무의 단위기능을 흐름에 맞게 이어 가는 것입니다.

여기에 프로그램이 오류나 예외 사항을 반영하여 로직을 구성하는데 이를  Process Flow  control 라고 합니다.

소개 드리는 Rust를 보면서 프로그램의 오류를 미리 점검해보고 문제 있는 부분에 대한 개선 방향을 보여 주는 "Rus Analyze" 나 프로그램의 가독성을 개선해 주는 "Rustfmt"  소스의 오류나 개선 점을 알려주는  "Clippy"  같은 도구가  인공지능에 의해서 관리 된다면  프로그램도 작성을 할수 있겠다 싶습니다.

바로 인공지능과 연결해서  정확한 데이터를 주고 그것을 보고 AI가 다시 프로그램을 재작성 하면서 품질을 높이는 것이   인공지능 협업 개발 방법론 (AI Collaboration Development) 이  등장 할 날이 얼마 남지 않아보입니다.

좋은 내용들 로 채워 보겠습니다.  감사합니다.
 

 

[참고]

(Rust 기초 알기 목차)
 
https://couplewith.tistory.com/pages/learningrust
o Rust 기초 알기 - 2.1 Rust 설치
  
https://couplewith.tistory.com/444
o Rust 기초 알기 - 2.2 Rust 개발 도구 소개
   
https://couplewith.tistory.com/445
o Rust기초 알기 - 2.3 Rust 개발 IDE에디터 소개
   
https://couplewith.tistory.com/447
 - RUST 기초 배우기 (https://couplewith.tistory.com/pages/learningrust)
 

728x90
반응형