[1편] .env 파일 관리, 환경변수 공유 쉽게 하기 - 도플러 (Doppler)

메디스트림·2024년 1월 2일
41

데브옵스

목록 보기
1/2
post-thumbnail

최초 작성일: 2021-08-15

레파지토리 50+ 개, 환경변수 1000+ 개

메디스트림에 입사하고 맨 처음 컴퓨터에 개발 환경 세팅을 하면 개발에 필요한 도구를 설치하고 형상 관리되어 있는 프로젝트의 코드들을 풀 받아서 실행하였습니다. 하지만 실행이 바로 될 리가 없는 게 보안 측면에서 dotenv(.env) 환경변수 파일은 레파지토리에 올리지 않죠. 그래서 보통 동료에게 도움을 받아서 환경변수에 대한 정보를 얻게 되는데, 여기저기 산재되어 있는 수 많은 환경변수를 구전으로 받자고 하자니, 너무 많아서 번거롭고, 슬랙으로 보내고자 하니 이 또한 보안상에 찝찝하고 파일이 깨져서 오는 경우도 많습니다. 그래서 파일들을 압축하고 암호를 걸어서 보내는 방식으로 하고 있었습니다.

이것이 현실이다.

.env 공유로는 해결 불가

파일을 받는 거까지는, 좋은데 문제는 환경변수가 변경되었을 때 어떻게 하느냐입니다. 개발자가 소규모일 때는 슬랙으로 환경변수 추가/변경되었다고 하고 얘기하고 하면 빠를 수 있지만 여차 휴가를 갔거나 변경된 내용을 놓쳤을 때도 있습니다. 또 일일이 파일을 압축하고 암호를 걸어서 매번 보내는 것도 귀찮습니다.

그래서 이러한 문제들을 해결하고자 많은 서비스가 있는데 대표적으로 AWS Secrets Manager, AWS Parameter Store, GCP Secret Manager 등이 있습니다. 이러한 서비스들도 개발환경에 도입하여 좋은 퍼포먼스를 낼 수 있는 훌륭한 서비스들입니다. 하지만 SDK를 설치해서 각각 로직을 추가해야 해야 하고, 쉽고 편하게 환경변수를 관리 할 수 있어야 하는데 UI가 클라우드를 사용 많이 못 해본 개발자들은 어려울 수 있습니다.

클라우드로 통합 관리할 수 있다면?

도플러(Doppler) 도입

그래서 많은 서비스를 참고하고 비교하고 선택한 것이 Doppler 라는 클라우드 서비스입니다. (도플러 효과는 어떤 파동의 파동원과 관찰자의 상대 속도에 따라 진동수와 파장이 바뀌는 현상을 가리킨다.)

보안 및 이력 관리

이 서비스를 사용하게 되면 먼저 프로젝트별로 환경 변수를 동기화 할 수 있다는 장점이 있습니다. 그렇게 되면 누군가 변경하면 한 번만 업데이트 하면 됩니다. 또한, 환경변수 이력 관리가 되고 잘못된 변경 사항을 롤백할 수 있습니다.
고객의 민감한 환경변수 정보를 관리하는 SaaS 서비스이다 보니 보안을 매우 중요하게 생각하여 SOC2 보고서 요청 라던지 해킹 방어에 대한 고민을 많이 하는 것 같습니다.

환경변수 주입

아래의 명령어로 현재의 레파지토리에 맞는 환경변수를 주입하여 사용할 수 있습니다.

아래의 명령어를 사용하면 Serverles Framework 배포 시에도 적용할 수 있습니다.

doppler run -- sls deploy

메디스트림 팀 내에서의 도입 과정

  1. 현재 사용하는 환경변수 모으기
    • 각 개발자에게 구글 드라이브 링크 드려서 .env, .yaml 등 환경변수 파일을 모았습니다.
  2. 도플러 프로젝트 세팅
    • 현재 기준으로 프로젝트에 환경변수를 사용하고 있는 프로젝트는 도플러 세팅을 해놓습니다.
    • 구글 시트를 활용하여 프로젝트별로 어떻게 세팅되었는지 기록합니다.
  3. 도플러 팀원 초대
    • 현재 팀 모두 초대합니다. 이메일 초대로 팀원 관리 가능합니다.
  4. 사용가이드
    • (이 페이지 하단에 작성할 예정입니다.)
  5. 프로젝트별 불필요 로직 및 파일제거
    • 도플러가 성공적으로 도입 되면 dotenv 패키지와 .env 파일이 필요 없어집니다. 각자 프로젝트 담당자가 삭제합니다.
  6. 환경변수로부터 해방 😀

📒 도플러 5분 매뉴얼

모든 내용은 공식 홈페이지 Docs를 참고하여 작성하였습니다. 내용이 잘 이해 안 되시면 참고하시면 됩니다. 잘못된 내용이 있으면 다음 사람을 위해서 댓글 달아주세요!
Install CLI

사내 모든 개발자들이 5분만 투자하면 도플러를 활용하여 환경변수를 편리하게 관리할 수 있도록 초간단 가이드를 작성 했습니다.
이 가이드에서는 로컬 개발에서 운영 환경에 Doppler CLI를 설치하고 사용하는 방법을 알려 드리도록 하겠습니다.

설치

Mac OS

brew install gnupg
brew install dopplerhq/cli/doppler

Windows

winget install doppler.doppler
scoop bucket add doppler https://github.com/DopplerHQ/scoop-doppler.git
scoop install doppler
mkdir -p $HOME/bin
curl -Ls --tlsv1.2 --proto "=https" --retry 3 https://cli.doppler.com/install.sh | sh -s -- --install-path $HOME/bin

이제 버전을 확인하여 Doppler CLI가 설치되었는지 확인합니다.

doppler --version

또한, 언제든지 CLI를 최신 버전으로 업그레이드할 수 있습니다.

doppler update

도플러 로그인 (1회 인증)

Doppler CLI가 프로젝트의 비밀에 액세스하려면 액세스 토큰이 필요합니다. 로컬 개발은 브라우저 창을 열고 구글 로그인하시면 됩니다. 이것은 한 번만 발생 됩니다.

doppler login

각 프로젝트에 대해 일반적으로 저장소 루트 수준에서 설정 명령을 실행해야 합니다.

# Change to your project's directory
cd ./your/project/directory

# Select project and config
doppler setup

# 한번에 프로젝트와 환경을 선택하여 세팅
doppler setup -p medistream-namu -c dev

핵심 명령어

run 명령을 사용하여 프로젝트 및 선택한 구성에 대한 최신 버전의 보안 비밀을 가져와서 명령 또는 스크립트에서 실행 중인 프로세스에 환경 변수로 주입합니다.

Doppler는 비밀을 환경 변수로 주입하기 때문에 모든 언어, 프레임워크, 플랫폼 및 클라우드 공급자에서 작동합니다.

doppler run -- sls deploy

.env 파일 제거

만약, 운영환경까지 변경이 이루어졌다면, 로컬에 여전히 파일에 의존하는 모든 애플리케이션 코드를 제거하는 것이 가장 좋습니다. 이렇게 하면 환경 변수를 로드하기 위한 출처가 무엇인지에 대한 잠재적인 혼란을 피할 수 있습니다.

플러스

  • 도플러에서 잘 쓰고 있는 기능 중의 하나가 Share Secret입니다. ID, 비밀번호, API 키 등 슬랙으로 팀원한테 보낼 때 열람 수와 만료일을 지정하여 URL로 만들어 줍니다.
    Share Secret
  • 다음 아티클에서는 메디스트림에서 도플러를 활용하여 CI/CD를 어떻게 하는지 정리해보겠습니다.

메디스트림 데브옵스 리드 권정빈

profile
메디스트림 기술 블로그

6개의 댓글

comment-user-thumbnail
2024년 1월 3일

하시코프 Vault 와 비교해보셨을까요? 각 장단점이 뭔지 궁금하네요

1개의 답글
comment-user-thumbnail
2024년 1월 4일

doppler 너무 편해요 ~ 데브옵스팀 최고 👍

1개의 답글
comment-user-thumbnail
2024년 1월 4일

비슷한 고민을 하고 있었는데 이런 서비스가 있었네요 🤩
좋은 정보 공유 감사합니다 😀

1개의 답글