Ruby on Jets : 환경변수 등록
Jets에서 환경변수 설정에 있어 Figaro Gem과 연동해서 쓰려 할 경우 이상하게 Jets에서는 Figaro Gem을 제대로 설치했음에도 불구하고 인식을 못합니다.
하지만 다행스럽게도 Jets에는 기본적으로 환경변수를 지원을 합니다.
이번 시간에서는 Jets에서 기본적으로 지원하는 기능을 통해 환경변수를 등록하는 법에 대해 알아보겠습니다.
-
환경변수 개념
환경변수는 쉽게 말하면 "치환" 입니다.
만약 코드 내 중요한 정보에 있어 숨겨야할 경우 정보의 표현을 치환을 통해 은닉처리할 때 많이 쓰입니다.
예를들어, Jets 내 데이터베이스를 설정하는 database.yml 파일을 살펴보겠습니다.
## config/database.yml
default: &default
adapter: postgresql
encoding: utf8
host: "15.163.72.42"
username: "kcm4674"
password: "123456a"
pool: 5
위 코드가 Github에 배포 후, database.yml 파일 내에 데이터베이스 정보가 그대로 드러나기에는 너무나도 큰 리스크입니다.
그래가지고 개발자들은 환경변수를 이용해서 다음과 같이 표현을 합니다.
## [환경변수 적용] config/database.yml
default: &default
adapter: postgresql
encoding: utf8
host: <%= ENV['DATABASE_HOST'] %>
username: <%= ENV['DATABASE_USER_ID'] %>
password: <%= ENV['DATABASE_USER_PASSWORD'] %>
pool: 5
그럼 치환된 내용은 어디있냐?
바로 환경변수를 설정하는 파일 안에 등록을 해놓습니다.
## .env
DATABASE_HOST: "15.163.72.42"
DATABASE_USER_ID: "kcm4674"
DATABASE_USER_PASSWORD: "123456a"
그러면 이런 의문이 생길겁니다.
"아니, 어차피 환경설정을 설정한 .env 파일이 Github에 업로드 되면 말짱 꽝 아닌가요?"
하지만 이러한 중요 정보가 담긴 파일이 Github에 업로드되는걸 방지하는 것이 있는데, 그것은 바로 .gitignore 입니다.
.gitignore에 대한 개념은 다음 문서를 참고해주세요.
부록 .gitignore 개념 [클릭]
-
환경변수 파일 설명
Jets에서는 프로젝트를 생성 시 다음과 같은 기본 (숨김)파일들이 존재합니다 : .env, .env.development, .env.test
참고 혹시 .env 와 같은 숨김파일이 안보인다면 우측에 보이는 톱니바퀴 아이콘을 클릭 후, Show Hidden Files 를 클릭(숨김파일 활성화)
1) .env
Environment에 관계없이 어떤 환경에서든 환경변수가 적용되는 파일입니다.
## .env
DB_TYPE: "postgresql"
## 터미널
ubuntu:~/environment/catch (master) $ JETS_ENV=production jets c
2.5.3 :001 > ENV['DB_TYPE']
=> "postgresql"
ubuntu:~/environment/catch (master) $ JETS_ENV=development jets c
2.5.3 :001 > ENV['DB_TYPE']
=> "postgresql"
ubuntu:~/environment/catch (master) $ JETS_ENV=test jets c
2.5.3 :001 > ENV['DB_TYPE']
=> "postgresql"
2) .env.development
Development Environment에만 환경변수가 적용되는 파일입니다.
## .env
DB_TYPE: "postgresql"
## 터미널
ubuntu:~/environment/catch (master) $ JETS_ENV=production jets c
2.5.3 :001 > ENV['DB_TYPE']
=> nil
ubuntu:~/environment/catch (master) $ JETS_ENV=development jets c
2.5.3 :001 > ENV['DB_TYPE']
=> "postgresql"
ubuntu:~/environment/catch (master) $ JETS_ENV=test jets c
2.5.3 :001 > ENV['DB_TYPE']
=> nil
3) .env.test
Test Environment에만 환경변수가 적용되는 파일입니다.
## .env
DB_TYPE: "postgresql"
## 터미널
ubuntu:~/environment/catch (master) $ JETS_ENV=production jets c
2.5.3 :001 > ENV['DB_TYPE']
=> nil
ubuntu:~/environment/catch (master) $ JETS_ENV=development jets c
2.5.3 :001 > ENV['DB_TYPE']
=> nil
ubuntu:~/environment/catch (master) $ JETS_ENV=test jets c
2.5.3 :001 > ENV['DB_TYPE']
=> "postgresql"
-
.gitignore 정의
Ruby on Jets에서는 다행히도 환경변수 파일(.env, .env.development, .env.test)에 대해 기본적으로 설정이 되어있습니다.
-
AWS Lambda Deploy
.env 파일에 환경변수가 작성된 채로 AWS Lambda에 Deploy 시, 모든 람다 함수에 자동으로 환경변수가 적용이 됩니다.
-
관련자료
1. Jets Docs : Environment Variable [클릭]