Computer >> 컴퓨터 >  >> 시스템 >> Android

안드로이드 앱에서 API 키를 안전하게 보호하는 방법: Secrets Gradle 플러그인 활용 가이드

버전 관리 시스템을 사용하면서 프로젝트에 API 키가 필요한 서비스를 연동해야 하는 상황을 생각해 봅시다. 코드가 로컬 머신에만 있을 때는 아무 문제가 없지만, 저장소(repository)에 업로드할 때 API 키가 외부에 노출되는 것은 원하지 않을 겁니다.

그렇다면 애플리케이션 내부에서는 API 키를 평소처럼 사용하면서도, 코드를 저장소에 올릴 때는 숨기려면 어떻게 해야 할까요?

시크릿(Secrets)이란 무엇일까?

바로 이럴 때 시크릿(secrets)이 등장합니다. 이름 그대로 '나만 알고 있어야 하는 비밀'을 개발자의 관점에서 구현한 개념이라고 이해하면 됩니다.

시크릿은 애플리케이션이 정상적으로 동작하기 위해 반드시 필요하지만, 프로젝트 외부의 사람에게는 보여서는 안 되는 핵심 정보를 의미합니다.

API 키나 인증 토큰이 대표적인 예입니다. 본질적으로 시크릿이란 오직 자신만 사용해야 하는 인증 정보를 뜻합니다. 웹사이트 비밀번호를 다른 사람과 절대 공유하지 않는 것과 같은 원리죠.

🚨 주의: 이 글에서 소개하는 방법은 버전 관리 시스템으로부터 시크릿을 보호하는 데 효과적입니다. 하지만 시크릿은 여전히 애플리케이션의 일부이므로, APK를 디컴파일하면 노출될 수 있다는 점은 유념해야 합니다.

시크릿을 안전하게 지키는 방법

먼저 프로젝트의 루트 디렉터리에 local.properties 파일이 있는지 확인하세요.

이 파일이 버전 관리 시스템에서 제외되어 있는지 확인하려면 .gitignore 파일을 열어 해당 항목이 포함되어 있는지 살펴보면 됩니다.

다음으로, 프로젝트에 Secrets Gradle 플러그인을 추가해야 합니다.

프로젝트 루트의 build.gradle 파일을 열고 아래 내용을 추가하세요.

buildscript {
 dependencies {
 id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
 }
}

그다음, 앱 모듈의 build.gradle 파일에 아래 줄을 추가합니다.

plugins {
 ...
 id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}

이제 local.properties 파일에 API 키를 입력하세요.

AndroidManifest.xml 파일에서 application 태그 안에 meta-data 태그를 추가하면 시크릿을 활용할 수 있습니다.

<application
 android:allowBackup="true" 
 .....
 >
 <activity>
 ....
 </activity>
 <meta-data
 android:name="YOUR_API_KEY_NAME" /// 원하는 값으로 자유롭게 설정
 android:value="${API_KEY_NAME}"/> /// local.properties 파일에 작성한 이름 입력
</application>

코드에서 API 키에 접근하는 두 가지 방법

첫 번째 방법은 PackageManager를 통해 메타데이터를 가져오는 것입니다.

val applicationInfo: ApplicationInfo = application.packageManager
 .getApplicationInfo(application.packageName, PackageManager.GET_META_DATA)
val apiKey = applicationInfo.metaData["YOUR_API_KEY_NAME"]

두 번째 방법은 BuildConfig 객체를 활용하는 것으로, 훨씬 간단합니다.

BuildConfig.YOUR_API_KEY_NAME

이것으로 끝입니다. 이제 버전 관리 시스템에 의해 시크릿이 노출될 걱정 없이 마음 편히 개발에 집중할 수 있습니다.

안전하게 시크릿을 관리하는 즐거움을 누려보세요! ㊙️

필자도 최근 진행한 프로젝트 중 하나에 이 방법을 적용했으며, 시크릿을 제외한 소스 코드는 공개되어 있습니다. 또한 필자가 작성한 다른 글들도 확인해 보시길 권합니다.

참고로, freeCodeCamp의 오픈소스 커리큘럼은 무료로 코딩을 배울 수 있는 기회를 제공하며, 이미 4만 명 이상의 사람들이 개발자로 취업하는 데 성공했습니다. 지금 바로 시작해 보세요!