자바앱에서 환경변수를 읽을 수 없었다.
스프링 서버(OCI)에 SSH 로 접속한뒤 환경변수를 설정하고 자바앱을 실행하도록 했다. 그 과정중에 자바앱에서 환경변수를 읽지 못하는 문제가 발생했다.
...
export OCI_OBJECT_STORAGE_USER_ID='${OCI_OBJECT_STORAGE_USER_ID}'; \
export REDIS_HOST='${REDIS_HOST}'; \
export REDIS_PASSWORD='${REDIS_PASSWORD}'; \
export SSL_KEY_STORE_PATH='${SSL_KEY_STORE_PATH}'; \
export SSL_KEY_STORE_PASSWORD='${SSL_KEY_STORE_PASSWORD}'; \
sudo nohup java -Dspring.profiles.active=prod -jar /opt/tag/tag-1.0.0.jar > /dev/null 2>&1 &"
export 명령어를 실행한 사용자와 nohup 명령어를 실행한 사용자가 달랐기 때문이다.
export 를 실행한 사용자는 opc 였고 nohup 은 위의 스크립트와 같이 관리자 계정으로 실행했다.
기본적으로 환경변수는 사용자간 공유될 수 없다. 그 이유는 다른 사용자의 환경변수에 접근할 수 있다면 보안 문제를 야기하기 때문이다.
sudo 뒤에 -E(preserve environment) 옵션을 추가하여 환경변수가 공유되도록 했다.
sudo 를 사용한 이유는 해당 스프링앱을 443 포트로 실행하기 위함이다. OS 에서는 1024 번 이하의 포트를 사용하기 위해서는 관리자 권한을 요구하도록 구현되어 있다. 그 이유는 1024 번 이하에 주요 포트들(22, 80, 443 등 )이 포진해 있기 때문이다.