서버 API를 활용하다 보면 API KEY를 헤더에 함께 담아 사용하게 되는 경우가 많다.

이때 API KEY를 Object 클래스로 관리하거나 하드코딩을 하고, 깃허브와 같은 레파지토리에 코드를 올리게 되면 타인에게 내가 발급받은 API KEY를 노출하게 되므로 의도치 않게 악용될 수 있다.
따라서 gradle과 local.properties 파일을 활용하여 안전하게 관리할 수 있다.

local.properties를 함께 사용하는 이유는 gitignore 파일을 보면 local.properties는 기본으로 정의되어 있기 때문이다.
따라서 오픈된 레파지토리에는 해당 파일의 정보가 없으니 타인이 프로젝트를 분석하여 API_KEY를 탈취할 수 없게 된다.
혹시라도 임의로 빼진 않았는지 확인이 필요하다.

.gitignore 의 구성

*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
/compose_compile
.externalNativeBuild
.cxx
local.properties

 

1. local.properties에 Key값 정의

 

2. App 수준의 build.gradle에 Field 정의

buld.gradle.kts(Module:app)

val prop = Properties().apply {
    load(FileInputStream(File(rootProject.rootDir, "local.properties")))
}

android {
	buildConfigField("String", "NAVER_CLIENT_ID", prop.getProperty("naver_client_id"))
    buildConfigField("String", "NAVER_CLIENT_SECRET", prop.getProperty("naver_client_secret"))

    buildFeatures {
       buildConfig = true
    }
}

 

3. Gradle Sync, Rebuild Project 실행

BuildConfig.java 파일에 정의한 Key와 Value가 잘 들어갔는지 확인한다.

BuildConfig.java

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.mj.app.bargainprice";
  public static final String BUILD_TYPE = "debug";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  public static final String NAVER_CLIENT_ID = "your api key";
  public static final String NAVER_CLIENT_SECRET = "your api key";
}

 

여기까지 잘 적용 되었다면 해당 API KEY 참조가 필요한 곳에서 BuildConfig.NAVER_CLIENT_ID와 같은 방식으로 사용하면 된다.

+ Recent posts