API 키 유출 걱정될 때? 맥 환경변수 & .env 설정으로 안전하게

파이썬으로 API를 활용하는 개발자라면 누구나 한 번쯤 API 키를 코드에 직접 넣고는, ‘혹시 이대로 GitHub에 푸시해서 전 세계에 공개되면 어쩌지?’라는 생각에 가슴이 철렁했던 경험이 있을 겁니다. 매번 터미널에서 export 명령어를 입력하는 것도 여간 번거로운 일이 아니었을 테고요.

이러한 걱정은 민감한 인증 정보를 소스코드와 분리하여 안전하게 관리하는 것이 개발 보안의 핵심 원칙이기 때문에 발생합니다.

이 글에서는 macOS 환경에서 API 키를 시스템 환경변수로 영구 설정하는 방법부터, 프로젝트별로 유연하게 관리할 수 있는 .env 파일 활용법까지, 총 3가지 실용적인 해결책을 단계별로 자세히 설명합니다.

이 글의 핵심

– API 키와 같은 민감 정보는 코드에서 분리하여 보안 사고를 예방하는 것이 필수입니다.
– macOS에서 .zshrc 또는 .bash_profile을 통해 시스템 환경변수로 API 키를 영구 설정할 수 있습니다.
– python-dotenv 라이브러리와 .env 파일을 활용하면 프로젝트별로 API 키를 안전하고 유연하게 관리할 수 있습니다.

왜 API 키를 숨겨야 할까요? 민감 정보 노출의 위험성

수많은 개발 프로젝트에서 외부 API를 사용하기 위해 고유한 API 키를 활용하지만, 이를 코드에 직접 하드코딩하는 경우가 많습니다. 이렇게 되면 프로젝트 코드가 공개 저장소(예: GitHub)에 올라가는 순간 API 키는 전 세계에 노출되어 심각한 보안 위험에 직면하게 됩니다. API 키 유출은 무단 접근, 서비스 남용, 개인 정보 및 결제 정보 탈취 등 돌이킬 수 없는 피해를 초래하므로, 민감한 정보는 절대로 코드에 직접 넣어서는 안 됩니다.

주의
API 키 유출은 단순한 개발 실수를 넘어, 잠재적으로 수천만원에서 수억원의 금전적 피해와 기업의 신뢰도 하락을 초래할 수 있습니다. API 키 유출 사고는 대부분 개발 과정에서의 부주의로 발생하며, 코드 내 직접 삽입이 주된 원인입니다.
맥에서 API 키 환경변수 & .env 파일 설정 가이드

Photo by Rahul Pandit on Pexels

macOS 시스템 환경변수로 API 키 설정하기 (영구 적용)

macOS에서 API 키를 시스템 환경변수로 설정하면, 해당 키는 모든 터미널 세션과 응용 프로그램에서 접근 가능해집니다. 이는 시스템 전반에서 특정 키를 공유해야 할 때 특히 유용하며, 한 번 설정하면 재부팅 후에도 유지되므로 매우 편리합니다.

이 방법은 4단계로 간단하게 적용할 수 있습니다. 주로 사용하는 셸(Zsh 또는 Bash)의 설정 파일을 수정하여 환경변수를 영구적으로 등록하는 방식입니다.

  1. 터미널 열기 및 설정 파일 편집 — 터미널을 열고 nano ~/.zshrc (macOS Catalina 이후 기본 셸인 Zsh 사용 시) 또는 nano ~/.bash_profile (Bash 사용 시) 명령어를 입력하여 해당 파일을 엽니다. nano 대신 vi나 code 등의 편집기를 사용해도 무방합니다.
  2. API 키 추가 — 파일의 맨 아래에 다음 형식으로 API 키를 추가합니다. export MY_API_KEY=”YOUR_ACTUAL_API_KEY_HERE” 여기서 MY_API_KEY는 당신이 사용할 환경변수 이름이고, 따옴표 안의 내용은 실제 API 키입니다. 여러 개의 키를 추가할 수 있습니다.
  3. 변경사항 적용 — 파일을 저장하고 편집기를 종료한 후, 터미널에 source ~/.zshrc 또는 source ~/.bash_profile 명령어를 입력하여 변경사항을 현재 세션에 적용합니다. 이 과정은 새로운 터미널을 열 때마다 자동으로 실행됩니다.
  4. 환경변수 확인 — echo $MY_API_KEY 명령어를 입력하여 API 키가 제대로 설정되었는지 확인합니다. 올바르게 설정되었다면, 설정했던 API 키 값이 출력될 것입니다.
참고
macOS Catalina부터 기본 셸이 Bash에서 Zsh로 변경되었습니다. 따라서 대부분의 최신 macOS 사용자라면 .zshrc 파일을 편집하는 것이 일반적입니다. 어떤 셸을 사용하는지 확실하지 않다면 echo $SHELL 명령어로 확인할 수 있습니다.
맥에서 API 키 환경변수 & .env 파일 설정 가이드

Photo by Al Nahian on Pexels

프로젝트별 API 키 관리를 위한 .env 파일 활용

시스템 환경변수는 전역적으로 적용되지만, 특정 프로젝트에서만 사용하는 API 키나, 팀원마다 다른 키를 사용해야 하는 경우 .env 파일을 활용하는 것이 훨씬 유연하고 효율적입니다. .env 파일은 프로젝트 루트 디렉토리에 위치하며, 해당 프로젝트에서만 사용될 환경변수를 정의하는 데 사용됩니다.

.env 파일의 가장 큰 장점은 프로젝트별로 독립적인 환경을 구축할 수 있고, .gitignore에 추가하여 버전 관리 시스템에서 완벽하게 제외할 수 있다는 점입니다. 이는 API 키 유출 위험을 획기적으로 줄여줍니다.

  1. .env 파일 생성 — 프로젝트의 최상위 디렉토리에 .env라는 이름의 파일을 생성합니다. 파일 이름은 반드시 .env여야 합니다.
  2. API 키 정의 — .env 파일 내부에 KEY=VALUE 형식으로 API 키를 정의합니다. 예를 들어, MY_PROJECT_API_KEY=another_secret_key_12345 와 같이 작성합니다. 따옴표는 사용하지 않아도 되지만, 공백이나 특수 문자가 포함된 값이라면 따옴표를 사용하는 것이 좋습니다. 각 키-값 쌍은 새 줄에 작성합니다.
  3. .gitignore에 추가 — 가장 중요한 단계입니다. 프로젝트의 .gitignore 파일에 .env를 추가하여 이 파일이 Git 저장소에 업로드되지 않도록 합니다. 예를 들어:
    # Environment variables
    .env
    만약 이 단계를 건너뛴다면, .env 파일 역시 공개 저장소에 그대로 노출될 위험이 있습니다.
주의
.env 파일은 git clone 시 자동으로 포함되지 않으므로, 팀원들과 프로젝트를 공유할 때는 .env.example 파일을 만들어 어떤 환경변수들이 필요한지 명시하고, 각 팀원이 자신의 환경에 맞게 .env 파일을 생성하도록 안내해야 합니다. 민감 정보가 포함된 .env 파일을 직접 공유해서는 안 됩니다.
맥에서 API 키 환경변수 & .env 파일 설정 가이드

Photo by Sora Shimazaki on Pexels

파이썬 프로젝트에서 API 키 안전하게 불러오기

이제 .zshrc에 등록했거나 .env 파일을 통해 정의한 API 키를 파이썬 프로젝트에서 어떻게 안전하게 불러와 사용할 수 있는지 알아보겠습니다. 파이썬의 os 모듈과 함께 python-dotenv 라이브러리를 사용하면 이 과정을 매우 쉽게 처리할 수 있습니다.

python-dotenv는 .env 파일의 내용을 읽어 시스템 환경변수로 로드하는 역할을 합니다. 만약 시스템 환경변수와 .env 파일에 동일한 이름의 변수가 존재한다면, 시스템 환경변수가 우선적으로 적용됩니다. 이 점을 활용하면 개발 환경과 배포 환경에서 유연하게 API 키를 관리할 수 있습니다.

  1. python-dotenv 라이브러리 설치 — 터미널에서 pip install python-dotenv 명령어를 입력하여 필요한 라이브러리를 설치합니다. 이 라이브러리는 3초 이내에 설치가 완료될 것입니다.
  2. 파이썬 코드에 적용 — 프로젝트의 파이썬 파일(예: main.py 또는 app.py)에서 다음 코드를 추가하여 API 키를 불러옵니다.
    import os
    from dotenv import load_dotenv
    
    # .env 파일에서 환경변수를 로드합니다.
    # 이 함수는 스크립트 실행 초기에 호출하는 것이 좋습니다.
    load_dotenv()
    
    # 환경변수 'MY_API_KEY'를 불러옵니다.
    api_key = os.getenv("MY_API_KEY")
    
    if api_key:
        print(f"API 키가 성공적으로 로드되었습니다: {api_key[:5]}*****") # 보안상 일부만 출력
        # 이제 api_key 변수를 사용하여 안전하게 외부 API를 호출할 수 있습니다.
    else:
        print("API 키를 찾을 수 없습니다. .env 파일 또는 시스템 환경변수를 확인하세요.")

.env와 시스템 환경변수, 어떤 것을 선택할까?

구분 시스템 환경변수 (.zshrc) .env 파일
적용 범위 전역 (모든 프로젝트, 모든 터미널 세션) 개별 프로젝트에 한정
주요 용도 자주 사용하거나 시스템 전반에 필요한 공통 키 프로젝트별 고유 키, 개발/배포 환경별 상이한 키
관리 편의성 한 번 설정하면 편리하나, 수정 시 재적용 필요 프로젝트 내에서 직관적으로 관리, .gitignore로 Git 제외 용이
협업 용이성 개인 환경 설정에 의존, 팀원 간 공유가 어렵고 통일성 부족 .env.example로 필요한 변수 명시, 팀원별 설정 용이

대부분의 경우, 프로젝트 고유의 API 키는 .env 파일을 통해 관리하고, 개발 환경 전반에 걸쳐 공통적으로 필요한 키(예: AWS 자격 증명)는 시스템 환경변수로 설정하는 이중 전략이 가장 효율적입니다. 이렇게 하면 개발 효율성과 보안을 모두 확보할 수 있습니다.

정리

API 키와 같은 민감 정보는 코드로부터 반드시 분리하여 관리해야 합니다. macOS 환경에서는 .zshrc를 통해 시스템 환경변수로 영구 설정하거나, .env 파일을 이용해 프로젝트별로 유연하게 관리하는 두 가지 주요 방법이 있습니다. python-dotenv 라이브러리를 활용하면 파이썬 프로젝트에서 이 값들을 안전하게 불러와 사용할 수 있어, 잠재적인 보안 위협을 99% 이상 줄일 수 있습니다.

지금 바로 적용해 보세요.

참고 자료

  • Python os module documentation — 파이썬에서 환경변수를 다루는 기본 모듈에 대한 공식 문서입니다.
  • python-dotenv PyPI page — .env 파일을 로드하는 python-dotenv 라이브러리에 대한 공식 정보입니다.
  • Git – gitignore Documentation — .gitignore 파일 설정 및 활용 방법에 대한 공식 가이드입니다.

자주 묻는 질문

Q. API 키를 코드에 직접 넣으면 왜 안 좋은가요?

A. API 키를 코드에 직접 하드코딩하면 코드가 외부에 노출되거나 공개 저장소에 업로드될 경우 키가 유출될 위험이 매우 큽니다. 이는 악의적인 사용자가 키를 탈취하여 무단으로 서비스를 이용하거나 과금 폭탄을 초래할 수 있기 때문에 반드시 피해야 합니다.

Q. Mac 환경변수와 .env 파일 방식의 주요 차이점은 무엇인가요?

A. Mac 환경변수는 시스템 전반에 걸쳐 전역적으로 사용되는 변수로, 여러 프로젝트에서 공통적으로 사용하는 키에 적합합니다. 반면, .env 파일은 특정 프로젝트 내에서만 유효하며, 프로젝트별로 다른 키를 관리하거나 gitignore로 쉽게 제외하여 보안을 유지하는 데 용이합니다.

Q. 설정된 환경변수 또는 .env 파일의 API 키를 제 코드에서 어떻게 사용할 수 있나요?

A. 파이썬에서는 os.environ.get(‘YOUR_API_KEY’)를, Node.js에서는 process.env.YOUR_API_KEY를 사용하여 설정된 환경변수를 가져올 수 있습니다. .env 파일을 사용하는 경우, dotenv와 같은 라이브러리를 프로젝트에 추가하여 파일 내용을 로드한 후 동일한 방식으로 접근합니다.

Q. .env 파일만 사용하면 보안상 충분한가요, 아니면 추가 조치가 필요한가요?

A. .env 파일은 API 키를 코드로부터 분리하는 좋은 방법이지만, 반드시 .gitignore 파일에 추가하여 버전 관리 시스템에 업로드되지 않도록 해야 합니다. 또한, 실제 서비스 배포 환경에서는 .env 파일 대신 클라우드 서비스의 환경변수 관리 기능(예: AWS Secrets Manager, Heroku Config Vars)을 활용하는 것이 더욱 안전합니다.

댓글 남기기

Mebys Blog에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기