환경변수 파일 읽기

2023. 6. 21. 23:17Language/Rust

개요

프로젝트를 하다보면 프로그램 내부에서 사용 할 환경 설정 파일을 따로 관리하는 경우가 있습니다.

이럴 때 우리는 .env 파일을 만들어서 사용합니다.

 

오늘은 .env 파일을 읽는 방법에 대해 알아보도록 하겠습니다.

 

dotenv 추가

.env 파일을 읽고 환경변수를 가져오도록 하는 Crate 중 유용한 게 dotenv라는 crate가 있습니다.

 

먼저 Cargo.toml에 추가합니다.

 

[dependencies]
dotenv = "0.15.0"

 

.env 파일 셋팅

저는 postgres에 접속 할 수 있는 Database 연결 정보를 설정해보도록 하겠습니다.

 

NAME='TEST'
AGE=13

 

환경변수 불러오기

환경 변수를 불러오는 방법은 간단합니다. dotenv().ok(); 를 추가만 해주면 .env 파일을 읽을 수 있습니다.

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

fn main() {
    dotenv().ok();
    for(key, value) in env::vars(){
        println!("{} : {}", key, value);
    }
}
$ cargo run
...
...
XDG_SESSION_CLASS : user
XDG_SESSION_DESKTOP : cinnamon
XDG_SESSION_ID : c1
XDG_SESSION_PATH : /org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE : x11
XDG_VTNR : 7
XMODIFIERS : @im=ibus
NAME : TEST
AGE : 13

cargo run을 해보면 내가 .env 파일에 설정한거 말고도 많이 나오는데, 이건 기본적으로 환경변수가 설정 된 것을 모두 가져오기 때문입니다.

 

원하는 환경변수만 불러오기

위에 보면 서버에 설정 된 환경변수까지 모두 가져오는 것을 볼 수 있습니다. 이 많은 환경변수 중 내가 원하는 환경변수만 가져오는 방법에 대해 알아보겠습니다.

 

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


fn main() {
    dotenv().ok();
    let name = std::env::var("NAME").expect("NAME must be set.");
    let age = std::env::var("AGE").expect("AGE must be set.");

    println!("name : {}", name);
    println!("age : {}", age);
}
$ cargo run
name : TEST
age : 13

위에서 .env 파일에 age 같은 경우는 숫자로 입력하였지만, 똑같이 string으로 나오는 것을 볼 수 있습니다.

 

좀더 쉽게 불러오는 방법은 dotnetenv! 매크로를 사용하는 방법 입니다.

Cargo.toml에 dotenv_codegen 을 추가 합니다.

[dependencies]
dotenv = "0.15.0"
dotenv_codegen = "0.15.0"
use dotenv::dotenv;
use dotenv_codegen::dotenv;
fn main() {
    dotenv().ok();
    println!("name : {}", dotenv!("NAME"));
    println!("age : {}", dotenv!("AGE"));
}

매크로를 사용하면 좀 더 편리하게 사용 할 수 있습니다.

 

만약 없는 환경변수를 사용 한다면 에디터에서 자동으로 감지가 됩니다.

 

$ cargo run
   Compiling env v0.1.0 (/home/bak/Temp/rust/env)
error: proc-macro derive panicked
 --> src/main.rs:7:27
  |
7 |     println!("TEST : {}", dotenv!("TEST"));
  |                           ^^^^^^^^^^^^^^^
  |
  = help: message: environment variable `TEST` not defined
  = note: this error originates in the macro `dotenv` (in Nightly builds, run with -Z macro-backtrace for more info)

 

'Language > Rust' 카테고리의 다른 글

Rust 문자열  (0) 2023.06.24
cargo diesel_cli 설치 에러  (0) 2023.06.22
Rust 명령줄의 인수 받기  (0) 2023.06.18
Rust의 HashMap 소개  (1) 2023.06.15
Rust Shuffle  (0) 2023.06.11