환경 변수의 활용은 고정된 값의 구현에 의존하지 않고 정보 전송을 통해 애플리케이션 동작을 조정하고 개인화할 수 있기 때문에 현대 소프트웨어 설계에서 필수 불가결한 측면이 되었습니다.

환경 변수는 레이블과 해당 값의 변경 가능한 쌍으로, 운영 체제의 분위기 또는 런타임에 활용하기 위한 별도의 파일 내에 설정됩니다. 명시적으로 정의된 상수와는 달리 환경 변수는 쉽게 수정할 수 있기 때문에 더 큰 다양성과 조정 가능성을 제공합니다.

Rust는 환경 변수와 쉽게 인터페이스할 수 있도록 설계된 다양한 패키지와 모듈을 자랑하며, 여기에는 고유의 std::env 모듈의 활용과 함께 dotenv, envy, config와 같은 타사 크레이트가 포함됩니다.

dotenv 크레이트 소개

dotenv 크레이트의 활용은 Rust 기반 프로젝트 내에서 환경 변수를 효율적으로 관리할 수 있게 해줍니다. 이 크레이트는 원활한 통합과 사용자 친화적인 작업을 제공하므로 지정된 파일에서 환경 변수를 로드하고 검색하는 데 이상적인 선택입니다.

dotenv 크레이트는 환경 변수를 손쉽게 로드하고, 해당 변수가 없을 때 발생할 수 있는 오류를 처리하며, 표준 라이브러리의 환경 모듈과의 호환성 및 추가 기능 등 여러 가지 유용한 기능을 제공합니다.

환경 변수 처리를 위해 이 패키지를 사용하려면 “Cargo.toml” 파일의 “의존성” 섹션에 “dotenv” 패키지를 추가하세요.

 [dependencies]
dotenv = "0.15.0"

터미널을 사용하여 프로젝트 디렉터리 내에서 다음 명령을 실행하여 환경 변수 파일을 생성하고 키-값 쌍을 통합합니다.

 echo DATABASE_URL=database.db > .env

본 개시는 환경 파일에 저장된 값에 액세스하는 방법을 제공한다. 이 프로세스는 환경 파일을 로드하고 지정된 키(예: DATABASE\_URL 키)와 관련된 데이터를 검색하는 것을 포함한다.

 use std::env;
use dotenv::dotenv;

fn main() {

    dotenv().ok(); // Load the .env file

    // Read the value from the .env file
    let database_url = env::var("DATABASE_URL").expect("You've not set the DATABASE_URL");

    // Print the value
    println!("Database URL: {}", database_url);

}

이 코드의 주요 목적은 `ok()` 함수를 사용하여 `.env` 파일을 로드하고, `env::var()` 함수를 사용하여 내용을 추출하는 것입니다.

이 글도 확인해 보세요:  Rust의 제네릭 형식 알아보기

std::env 모듈 소개

외부 패키지에 의존하지 않고 컴퓨터에서 환경 변수를 읽기 위해 Rust에 내재된 std::env 모듈을 활용하는 대안이 있습니다.

Rust 프로그램에서 환경 변수를 활용하려면 먼저 다음 구문을 사용하여 코드 내에 ‘env’ 모듈을 통합해야 합니다:

 use std::env;

std::env 모듈을 도입하면 환경 변수를 인식하고 조작할 수 있는 기능을 갖추게 됩니다.

다음은 std::env 모듈을 사용하여 PWD(현재 작업 디렉토리) 환경 변수로 표시되는 현재 작업 디렉토리에 정교한 방식으로 액세스하는 방법입니다:

 use std::env;

fn main() {

    // Retrieve the value of the "PWD" environment variable
    let variable = env::var("PWD").expect("Error: Working directory environment variable not found");

    // Print the value associated with the "PWD" key
    println!("Value associated with the PWD key: {}", variable);

}

제공된 코드의 주요 목적은 `env::var` 함수를 사용하여 환경 변수에서 PWD 키에 할당된 값을 추출하여 표시한 다음 Python의 `print` 명령을 사용하여 인쇄하는 것입니다.

주어진 텍스트를 표준 영어로 좀 더 세련되게 표현하려면 아래 수정 버전을 참조하세요. 수정되었습니다: 또한 `std::env` 모듈은 환경 변수를 설정하는 데 사용할 수 있는 `set_var()` 함수를 제공합니다.

 use std::env;

fn main() -> Result<(), Box<dyn std::error::Error>> {

    // Set the environment variable "DATABASE_URL" to "database.db"
    env::set_var("DATABASE_URL", "database.db");

    // Retrieve the value of the "DATABASE_URL" environment variable
    let env_variable = env::var("DATABASE_URL");

    // Check if retrieving the environment variable was successful
    if env_variable.is_err() {

        // If the environment variable was not found, print an error message
        println!("Error: DATABASE_URL not found");

    } else {

        // If the environment variable was found, print its value
        println!("DATABASE_URL set to: {}", env_variable.unwrap());

    }

    Ok(())
}

이 코드의 주요 목적은 환경 변수 내의 지정된 키에 지정된 값을 할당하는 set\_var 함수를 활용하여 고유 식별자와 해당 값 간의 매핑을 설정하는 것입니다. 이 키-값 쌍을 지정한 후 함수는 해당 키와 연관된 해당 값을 출력합니다.

이 글도 확인해 보세요:  Nextra를 사용하여 Next.js로 기술 문서 사이트 구축하기

환경 변수는 다재다능하다

환경 변수는 동적으로 변화하는 데이터를 효율적으로 관리할 수 있는 수단을 제공하며, 다양한 상황에서 데이터를 손쉽게 수정하고 테스트 케이스를 실행할 수 있어 테스트 중심 개발을 촉진할 수 있습니다.

환경 변수를 활용하면 데이터베이스 사용자 이름, 비밀번호, URL 연결과 같은 기밀 데이터가 소스 코드에 포함되는 것을 방지할 수 있으므로 애플리케이션의 보안 태세를 강화하는 동시에 구성 관리가 용이해집니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.