환경변수 파일 읽기
2023. 6. 21. 23:17ㆍLanguage/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 |