[Android] API Key 숨기기

박주호·2022년 1월 19일
1

Hi, Android

목록 보기
7/7
post-thumbnail

💁‍♂️ Key를 숨기는 이유

개발을 하다 보면 API키를 통해 연동을 하는 경우가 있다. 가령 구글 로그인을 구현하려는 경우가 그렇다.
이때 평소와 같이 API키를 코드상에 하드코딩하거나 string.xml 에 입력 후 불러온다면 어떻게 될까?
로컬에만 작업한다면 문제없겠지만 대부분의 경우 깃을 통해 깃허브에 소스코드를 저장해둘 것이다.
그 코드가 저장된 프로젝트가 공개된 프로젝트라면 누군가 당신의 API키를 볼 수 있고 이를 악용할 우려가 있다.
그래서 우리는 API키를 비롯한 중요한 정보를 숨길 필요가 있다.
우리는 몇가지 간단한 과정을 통해 키를 숨길 수 있다.

local.properties 키 저장 → build.gradle(app) 타입, 키, 값 설정 → 빌드 → 코드에서 사용


💡 gitignore란

gitignore는 말그대로 깃을 무시하는걸로 원치않는 파일이나 폴더를 깃에 담지 않는 것을 말한다.
이 파일은 프로젝트 수준에 존재하며 기본으로 다음과 같이 세팅이 되어있다.

그중에서도 local.properties를 이용해서 Git push를 하더라도 숨기려고하는 키를 올리지않고 로컬에만 저장하는 방법을 알아보자.


📍 local.properties 키 저장

여기에 사용할 키를 입력해준다. 예시로 보여주기 위해 스크린샷 키는 랜덤문자를 넣었다.


📍 build.gradle(app) 타입, 키, 값 설정

plugins {
    id 'com.android.application'
    . . .
}

// 선언 및 키값을 불러오기
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

repositories {
    . . .
}

android {
   . . .
   defaultConfig {
       . . .
       
       // 프로젝트에서 사용
       // 타입 - 키 - 값
       buildConfigField "String", "GOOGLE_API_KEY", properties['google_id_token']
       
       // 매니페스트에서 사용
       manifestPlaceholders = [GOOGLE_API_KEY: google_api_key]
   }
}

📍 빌드

Sync 눌러주고 빌드를 한번 해주자 그러면 BuildConfig에 저장된다.

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.dongyang.android.aob";
  public static final String BUILD_TYPE = "debug";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";

  // Field from default config.
  public static final String GOOGLE_API_KEY = ". . . ";
}

BuildConfig 파일은 위에 gitignore에 적혀있는 build 폴더내에 있기 때문에 원격저장소에 저장되지 않는다.


📍 코드에서 사용

1. manifest에서 사용

"${GOOGLE_API_KEY}"와 같이 "${변수}"를 사용해주면 된다.

2. 코드상에서 사용

BuildConfig.GOOGLE_API_KEY 와 같이 BuildConfig.변수 를 사용해주면 된다.


🧑‍💻 마치며

원격 저장소에 저장되지 않으므로 협업 시 값을 공유해주면 된다.
과정이 간단하기 때문에 어려운 점은 없었고 앞으로 키 값은 로컬에만 저장하자


참고 및 출처
API 키 숨기기

profile
항상 배우려는 자세로

2개의 댓글

comment-user-thumbnail
2022년 5월 5일

좋은 정보 감사합니다!!!

1개의 답글