개발

Go Viper로 환경변수를 config에 주입하는 도중 문제 - Windows와 Linux에서의 차이

마크맨 2021. 6. 10. 15:27

일어난 일

  • 코드 상에 Config 변수를 CamelCase로 만들어놓고, viper로 환경변수를 읽어서 주입하도록 되어있다.

  • 임시대응을 위해 코드상에서 환경변수를 바로 주입해서 사용해야 했는데 윈도우 머신에서는 환경변수를 똑같이 카멜 케이스로 주입해도 문제 없이 작동했다.

    • 예를들어 Config 변수 이름이 MyName 이었는데 엔트리포인트 Go 파일에서 다음과 같이 override 할 수있다.

      os.Setenv("MyName", "Not markman")
    • 윈도우에서는 이렇게 해도 viper가 해당 envvar를 잘 읽어서 config에 넣어줬다

  • 이제 배치로 여러 프로세스를 한번에 돌리기 위해 Ubuntu 18로 ec2를 셋업하고 돌리는데 환경변수가 적용이 안되더라

  • 이것저것 삽질하다가, 혹시 몰라서 라이브 배포 설정 파일의 환경변수를 보니 다 대문자로(ex. MYNAME) 적혀있어서 그렇게 설정하니 되더라 ㅜㅜ

      os.Setenv("MYNAME", "Not markman")

원인 탐구 - WIP

가설들

  • Windows 환경변수와 Linux 환경변수 동작 방식이 다르다
  • viper가(또는 go 컴파일시) os마다 환경 변수를 받아오는 방식이 다르다