Rust logoRust Korea
Menu
<- Series contents

3. 개발환경 설정

14 min read

This chapter has not been translated into English yet. The Korean original is shown below.

Polars Rust 완전 정복 매뉴얼

3. 개발 환경 설정

이제 직접 Polars를 사용해 보기 위한 환경을 구성해 봅시다.

3.1 Rust 설치 (rustup, cargo)

Rust의 공식 설치 도구는 rustup입니다. rustup은 Rust 컴파일러(rustc), 표준 라이브러리, 패키지 매니저인 cargo를 함께 설치하고 관리해 줍니다.

3.1.1 Linux/macOS 설치

터미널에서 다음 명령을 실행합니다:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

설치 스크립트가 진행되면 기본 옵션(1)을 선택하면 됩니다. 설치가 끝나면 환경 변수를 로드합니다:

source "$HOME/.cargo/env"

3.1.2 Windows 설치

Windows에서는 https://www.rust-lang.org/tools/install 에서 제공하는 rustup-init.exe를 다운로드하여 실행합니다. 설치 과정에서 Visual Studio C++ 빌드 도구가 필요하다는 안내가 나올 수 있는데, 이 경우 “Desktop development with C++” 워크로드를 설치해야 합니다.

3.1.3 설치 확인

설치가 잘 되었는지 확인합니다:

rustc --version
cargo --version

버전 정보가 출력되면 정상입니다. 예를 들어 다음과 같이 나옵니다:

rustc 1.78.0 (9b00956e5 2024-04-29)
cargo 1.78.0 (54d8815d1 2024-03-26)

3.1.4 rustup으로 버전 관리

rustup을 사용하면 Rust의 안정(stable), 베타(beta), 야간(nightly) 버전을 전환할 수 있습니다. Polars는 보통 안정 버전에서 잘 작동하지만, 일부 실험적 기능은 nightly가 필요할 수 있습니다.

# stable 설치 (기본) {#stable-설치-기본}
rustup default stable

# nightly 설치 {#nightly-설치}
rustup toolchain install nightly

# 특정 프로젝트에서만 nightly 사용 {#특정-프로젝트에서만-nightly-사용}
rustup override set nightly

3.2 프로젝트 생성 (cargo new)

Rust 프로젝트는 cargo new 명령으로 만듭니다. Polars를 실험해 볼 새 프로젝트를 만들어 봅시다.

cargo new my_polars_project
cd my_polars_project

생성된 디렉토리 구조는 다음과 같습니다:

my_polars_project/
├── Cargo.toml      # 프로젝트 설정 파일 (의존성, 메타데이터)
├── src/
│   └── main.rs     # 프로그램 진입점
├── .gitignore
└── target/         # (빌드 후 생성) 컴파일된 산출물

Cargo.toml의 초기 내용은 다음과 같습니다:

[package]
name = "my_polars_project"
version = "0.1.0"
edition = "2021"

[dependencies]

src/main.rs의 초기 내용은 다음과 같습니다:

fn main() {
    println!("Hello, world!");
}

이제 cargo run을 실행하면 “Hello, world!“가 출력됩니다:

cargo run

3.3 Polars 크레이트 추가 (Cargo.toml 설정)

Polars를 사용하려면 Cargo.toml의 [dependencies] 섹션에 polars 크레이트를 추가해야 합니다. 가장 단순한 방법은 cargo add 명령을 사용하는 것입니다:

cargo add polars

이 명령은 자동으로 최신 버전의 polars를 찾아 Cargo.toml에 추가합니다. 수동으로 편집하려면 다음과 같이 작성합니다:

[package]
name = "my_polars_project"
version = "0.1.0"
edition = "2021"

[dependencies]
polars = "0.45"

참고: 버전 번호는 시간이 지남에 따라 올라갑니다. 이 책을 집필하는 시점의 최신 버전은 0.45 부근이며, crates.io에서 항상 최신 버전을 확인할 수 있습니다. 중요한 API 변경은 마이너 버전에서 일어날 수 있으므로, 실제 프로젝트에서는 정확한 버전을 명시하는 것이 좋습니다.

3.4 피처 플래그 (features) 상세 설명

Polars는 매우 모듈화된 크레이트로, 사용하지 않는 기능은 컴파일에서 제외할 수 있습니다. 이를 통해 컴파일 시간과 바이너리 크기를 줄일 수 있습니다. 이를 피처 플래그(feature flag) 라고 부릅니다.

Cargo.toml에서 피처를 명시하는 방법은 다음과 같습니다:

[dependencies]
polars = { version = "0.45", features = ["lazy", "csv", "parquet"] }

또는 cargo add 명령에 -F 플래그를 사용할 수 있습니다:

cargo add polars -F lazy,csv,parquet

3.4.1 주요 피처 플래그

다음은 자주 사용되는 피처 플래그들입니다:

피처설명
lazyLazyFrame, 지연 평가 엔진, 쿼리 최적화기
csvCSV/TSV 파일 읽기와 쓰기
parquetApache Parquet 파일 읽기와 쓰기
jsonJSON, NDJSON 파일 읽기와 쓰기
ipcApache Arrow IPC 파일 입출력
avroApache Avro 파일 입출력
temporal날짜/시간 타입 관련 연산(Datetime, Date, Time 등)
strings문자열 연산 네임스페이스(str)
dtype-full모든 데이터 타입 지원(기본은 일부 타입만)
dtype-structStruct 타입 지원
dtype-categoricalCategorical(범주형) 타입 지원
dtype-decimalDecimal(고정 소수점) 타입 지원
fmtDataFrame 예쁜 출력 포매팅
round_seriesSeries 반올림 연산
is_inis_in() 연산 (값이 목록에 있는지 검사)
sort_multiple다중 열 기준 정렬
cross_join크로스 조인
asof_joinASOF 조인(시계열에서 가장 가까운 값과 조인)
dynamic_group_by동적 그룹화(rolling, group_by_dynamic)
rolling_window롤링 윈도우 연산
moment통계 모멘트(kurtosis, skew 등)
random난수 생성
ndarrayndarray와의 변환
polars-io(내부) IO 서브 크레이트
polars-ops(내부) 연산 서브 크레이트
docs문서 생성용
streaming스트리밍 실행 엔진(일부 연산에서 메모리 절약)

3.4.2 추천 피처 조합

데이터 분석용 프로젝트라면 다음 조합을 추천합니다:

[dependencies]
polars = { version = "0.45", features = [
    "lazy",
    "csv",
    "parquet",
    "json",
    "temporal",
    "strings",
    "fmt",
    "round_series",
    "is_in",
    "sort_multiple",
    "dtype-full",
] }

dtype-full은 모든 데이터 타입을 활성화하는 편의 피처입니다. 실제 프로덕션에서는 필요한 타입만 선택적으로 켜서 컴파일 시간을 단축할 수 있습니다.

3.4.3 컴파일 시간과 피처

Polars는 큰 크레이트이므로 모든 피처를 켜면 컴파일 시간이 길어질 수 있습니다(최초 빌드 1~3분). 다음 팁이 도움이 됩니다:

  1. 필요한 피처만 켜기: 실제로 사용하는 입출력 포맷과 연산만 활성화.
  2. cargo check 활용: 빌드 대신 타입 체크만 할 때는 cargo check가 훨씬 빠릅니다.
  3. sccache 사용: 반복되는 컴파일 결과를 캐싱.
  4. incremental 컴파일: 개발 중에는 CARGO_INCREMENTAL=1 환경 변수로 점진적 컴파일 활성화(디버그 모드에서는 기본 켜져 있음).

3.4.4 피처 관련 자주 발생하는 문제

코드를 작성할 때 “메서드를 찾을 수 없다“는 컴파일 에러가 발생하면, 십중팔구 필요한 피처가 켜져 있지 않기 때문입니다. 예를 들어 col("name").str()이 없다고 나오면 strings 피처를, df.round()가 없다고 나오면 round_series 피처를 추가해야 합니다.

3.5 에디터 설정 (rust-analyzer, VSCode)

Rust 개발을 위한 최적의 에디터 환경을 구성합니다.

3.5.1 Visual Studio Code

가장 널리 쓰이는 선택지입니다. 다음 확장을 설치합니다:

  1. rust-analyzer(Mathematic Inc 제공): 공식 LSP(Language Server Protocol) 구현. 코드 자동 완성, 정의로 이동, 인라인 타입 표시, 리팩토링 등 핵심 기능 제공.
  2. Even Better TOML: Cargo.toml 편집 시 구문 강조와 자동 완성.
  3. CodeLLDB: 디버거(Rust 프로그램 디버깅용).
  4. crates(Sergey.fatalix 제공): Cargo.toml에서 크레이트 버전을 확인하고 업데이트.

VSCode 설정(settings.json)에서 다음 항목들을 추천합니다:

{
    "rust-analyzer.check.command": "clippy",
    "rust-analyzer.cargo.features": "all",
    "rust-analyzer.inlayHints.parameterHints.enable": true,
    "rust-analyzer.inlayHints.typeHints.enable": true,
    "editor.formatOnSave": true,
    "[rust]": {
        "editor.defaultFormatter": "rust-lang.rust-analyzer"
    }
}

3.5.2 rust-analyzer의 역할

rust-analyzer는 단순한 문법 강조기가 아니라, 코드를 실시간으로 분석하여 다음 기능을 제공합니다:

  • 자동 완성: 타입과 스코프를 이해한 정확한 완성 제안.
  • 인라인 힌트: 변수 타입, 함수 매개변수 이름을 코드 옆에 표시.
  • 진단: 컴파일하지 않아도 에러와 경고를 인라인으로 표시.
  • 정의로 이동, 참조 찾기, 이름 바꾸기 등 리팩토링 기능.
  • Cargo.toml 연동: 활성화된 피처에 따라 코드 분석 결과가 달라짐.

Polars처럼 피처가 많은 크레이트를 다룰 때 특히 중요한데, rust-analyzer.cargo.features 설정을 통해 어떤 피처를 분석에 사용할지 결정할 수 있습니다. "all"로 설정하면 모든 피처를 고려하므로 모든 API가 보이지만, 분석 시간이 길어질 수 있습니다.

3.5.3 다른 에디터

  • IntelliJ Rust(CLion, IntelliJ IDEA): JetBrains의 Rust 플러그인. 강력한 리팩토링과 디버거.
  • Neovim/Emacs: rust-analyzer를 LSP 클라이언트로 연결하여 사용.
  • Zed: 최신 Rust 기반 에디터로, rust-analyzer를 내장.

어떤 에디터를 선택하든 rust-analyzer가 핵심이므로, 자신에게 익숙한 환경을 선택하면 됩니다.


Log in to save progress<- Back to series contents
<- Previous chapter
2. Rust와 Polars