본문 바로가기
Program Development Tips/Git

API 키를 Git에 노출되지 않도록 하는 방법

by Maccrey Coding 2025. 1. 9.
반응형

API 키는 외부 서비스와의 통신에서 중요한 역할을 합니다.

하지만 이 키가 노출되면 보안 문제가 발생할 수 있으므로, Git과 같은 공개적인 저장소에 API 키를 포함시키지 않도록 해야 합니다.

이 글에서는 API 키를 안전하게 관리할 수 있는 방법들을 단계별로 설명하겠습니다.

1. API 키의 위험성

API 키가 노출되면 다음과 같은 보안 위협을 초래할 수 있습니다:

  • 무단 사용: 악의적인 사용자가 API 키를 이용해 서비스에 불법으로 접근할 수 있습니다.
  • 서비스 남용: 키를 통해 서비스의 한도를 초과하거나 악용될 수 있습니다.
  • 데이터 유출: 민감한 데이터나 사용자 정보를 외부에서 훔칠 수 있습니다.

따라서 API 키를 Git과 같은 공개된 저장소에 저장하지 않고, 안전하게 관리해야 합니다.

2. Git에 API 키 노출 방지 방법

2.1. local.properties 파일 사용하기 (Android)

local.properties 파일은 Android 프로젝트에서 API 키를 안전하게 저장할 수 있는 방법 중 하나입니다. 이 파일은 기본적으로 Git에 커밋되지 않으며, 각 개발자 환경에 맞게 설정할 수 있습니다.

 

1. local.properties 파일에 API 키 저장:

Android 프로젝트의 루트 디렉토리에 local.properties 파일을 생성하거나 기존 파일을 열어, 여기에 API 키를 저장합니다.

google_maps_api_key=AIzaSyBJzxNtFyK19

 

  • 파일 위치: <프로젝트 루트>/local.properties

2. .gitignore에 local.properties 추가:

Git에 local.properties 파일이 커밋되지 않도록 .gitignore에 추가합니다.

local.properties는 각 개발자가 로컬에서만 사용할 수 있도록 설정됩니다.

# Ignore local.properties file which contains sensitive API keys
local.properties

 

  • 파일 위치: <프로젝트 루트>/.gitignore

3. build.gradle 파일에서 API 키 읽기:

build.gradle 파일에서 local.properties에 저장된 API 키를 읽어옵니다.

다음과 같이 google_maps_api_key 값을 불러올 수 있습니다.

def googleMapsApiKey = project.hasProperty('google_maps_api_key') ? project.google_maps_api_key : ""
  • 파일 위치: <프로젝트 루트>/android/build.gradle

4. AndroidManifest.xml에서 API 키 사용:

AndroidManifest.xml에서 ${googleMapsApiKey}를 참조하여 API 키를 사용합니다.

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${googleMapsApiKey}"/>
  • 파일 위치: <프로젝트 루트>/android/app/src/main/AndroidManifest.xml

2.2. 환경 변수 사용하기

환경 변수는 시스템에 설정된 값을 코드에서 읽어오는 방법입니다.

환경 변수에 API 키를 저장하면 Git에 노출되지 않도록 할 수 있습니다.

 

1. 환경 변수 설정

  • Windows: 시스템 환경 변수에 GOOGLE_MAPS_API_KEY와 같은 이름으로 API 키를 저장합니다.
  • Mac/Linux: ~/.bashrc 또는 ~/.zshrc 파일에 환경 변수를 추가합니다.
export GOOGLE_MAPS_API_KEY="AIzaSyBJzxNtFyK19"

 

  • 파일 위치 (Mac/Linux): ~/.bashrc 또는 ~/.zshrc 파일
  • 파일 위치 (Windows): 시스템 환경 변수 설정 화면에서 추가

2. build.gradle에서 환경 변수 읽기

Gradle 파일에서 환경 변수를 읽어옵니다.

def googleMapsApiKey = System.getenv("GOOGLE_MAPS_API_KEY")

 

 

  • 파일 위치: <프로젝트 루트>/android/build.gradle

3. AndroidManifest.xml에서 API 키 사용.

AndroidManifest.xml에서 환경 변수로 저장된 API 키를 참조합니다.

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="${googleMapsApiKey}"/>

 

  • 파일 위치: <프로젝트 루트>/android/app/src/main/AndroidManifest.xml

2.3. 비공개 Git 리포지토리 및 비밀 관리 서비스 활용

비공개 Git 리포지토리와 비밀 관리 서비스를 사용하여 API 키를 관리할 수 있습니다.

클라우드 서비스에서는 API 키와 같은 민감한 정보를 안전하게 저장하고 관리할 수 있는 도구를 제공합니다.

  • AWS Secrets Manager: AWS의 비밀 관리 서비스로, 안전하게 API 키를 저장하고 애플리케이션에서 동적으로 키를 가져올 수 있습니다.
  • Azure Key Vault: Microsoft Azure의 비밀 관리 서비스로, API 키와 같은 민감한 정보를 안전하게 저장하고 관리합니다.
  • HashiCorp Vault: 클라우드와 온프레미스 환경에서 API 키를 안전하게 관리할 수 있는 오픈소스 도구입니다.

이 방법을 사용하면 API 키를 소스 코드와 분리하여 안전하게 관리할 수 있습니다.

2.4. .env 파일 사용하기 (Node.js, React Native 등)

Flutter 외에도 .env 파일을 사용하는 방법이 있습니다.

.env 파일에 API 키를 저장하고 이를 코드에서 참조하는 방법입니다.

이 방법은 Node.js, React Native 프로젝트 등에서도 사용됩니다.

 

  1. .env 파일에 API 키 저장:
  2. 프로젝트 루트에 .env 파일을 만들고 API 키를 저장합니다.
GOOGLE_MAPS_API_KEY=AIzaSyBJzxNtFyK19
  • 파일 위치: <프로젝트 루트>/.env

2. .gitignore에 .env 파일 추가:

.env 파일을 Git에 커밋하지 않도록 .gitignore에 추가합니다.

# Ignore .env file containing sensitive API keys
.env

3. 환경 변수로 API 키 읽기:

dotenv 패키지를 사용해 .env 파일에서 API 키를 읽습니다.

예를 들어, Node.js에서 dotenv 패키지를 사용하여 API 키를 읽어올 수 있습니다.

require('dotenv').config();
const apiKey = process.env.GOOGLE_MAPS_API_KEY;
  • 파일 위치: <프로젝트 루트>/index.js 또는 관련 파일

3. 기타 유용한 보안 팁

  • API 키 최소화: API 키에 대한 권한을 최소화하여 외부에서 악용될 가능성을 줄입니다. 예를 들어, IP 주소나 도메인에 대한 액세스 제한을 설정하세요.
  • API 키 주기적인 갱신: 보안 사고 발생 시, API 키를 주기적으로 갱신하는 것이 좋습니다.
  • 개발/테스트 환경과 프로덕션 환경 분리: 개발 환경과 프로덕션 환경에서 서로 다른 API 키를 사용하여 보안을 강화할 수 있습니다.

API 키는 중요한 인증 정보이므로 Git에 노출되지 않도록 관리해야 합니다. local.properties 파일, 환경 변수, 비밀 관리 서비스 등을 사용하여 API 키를 안전하게 관리할 수 있습니다.

또한, .gitignore를 활용하여 민감한 파일이 Git에 커밋되지 않도록 주의해야 합니다.

이러한 방법을 통해 보안 위협을 최소화하고 애플리케이션의 안전성을 높일 수 있습니다.

 

구독!! 공감과 댓글,

광고 클릭은 저에게 큰 힘이 됩니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형