안드로이드 스튜디오 프로젝트 api 키 기본 관리법
안드로이드 스튜디오로 프로젝트를 진행할 때 특정 API를 사용하게 되면 API Key값을 가지고 통신을 하게 된다.
이때 API Key값을 프로젝트 내에 작성을 해야 하는데 Git Hub에 해당 키를 그대로 Push 하여 누구나 접근이 가능하게 되면 상당히 곤란해질 수가 있다.
그러면 어떻게 해야될까?

사진 속에 보이는 local.properties 파일에 Key값을 저장하면 된다.
기본적으로 local.properties 파일은 버전 관리 대상에서 제외를 하기 때문에 여기에 Key값을 저장하면 Key를 안전하게 관리할 수 있다.
- .gradle/ 및 /build
그리고 빌드 시 생성되는 캐시나 산출물은 불필요하게 커밋될 필요가 없고, 특히 build 폴더 안의 BuildConfig 파일에 API Key가 저장되어 노출될 수 있으므로 반드시 제외해야 한다.


local.properties 파일에는 아래와 같이 코드를 작성하면 된다.
// local.properties
sdk.dir=Android SDK 경로
api_key="나의 API KEY"
local.properties 파일은 빌드 시스템의 로컬 환경 속성을 구성하기 위해 존재하는 파일이며, SDK의 경로도 기재되어 있다.
local.properties에 sdk.dir 바로 밑에 API Key 값을 저장하는데 값은 꼭 큰 따옴표""로 저장해야한다. 이래야 문자열로 인식되어서Gradle 에서 제대로 읽어올 수 있다. 참고로 local.properties 파일은 프로젝트 루트 디렉토리에 위치한다.
그리고 key 저장 후 build.gradle(app)에서 local.properties에 새로 등록한 키값을 Load해야한다.
build.gradle파일에서 Properties를 선언하고 local.properties에 등록된 Key값을 Load 하면 된다.
plugins {
// 사용 중인 플러그인들
}
// 추가: Properties 객체를 생성하여 local.properties 파일에서 API Key 값을 load
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
// 기존 android 설정들...
defaultConfig {
// 기존 defaultConfig 설정들...
// BuildConfig에 API Key를 상수로 추가
buildConfigField "String", "API_KEY", properties['api_key']
}
}
이렇게 빌드 스크립트에 추가하면 빌드 시 자동으로 BuildConfig 클래스가 생성되고 그 안에 API_KEY 상수가 추가된다. 이로 인해 코드 내에서는 다음과 같이 언제든지 API Key에 접근할 수 있게된다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// API_KEY 사용 예시
val key = BuildConfig.API_KEY
// API 호출 시 key를 활용할 수 있음
}
companion object {
// 필요시 BuildConfig.API_KEY를 재할당하여 사용
private const val API_KEY = BuildConfig.API_KEY
}
}
이렇게 하면 컴파일 타임에 API Key 값을 삽입하기 때문에 실행 중에 키가 변경될 가능성이 없고, 코드 내에 민감한 정보가 노출되지 않는다.
++ 추가 팁 - 협업 시 주의사항
- local.properties 파일 공유:
각 개발자는 자신의 로컬 환경에 맞게 local.properties 파일을 별도로 작성해야 한다. API Key와 SDK 경로 등은 개발 환경마다 다를 수 있으므로, 파일 자체를 버전 관리에 포함시키지 않고 문서나 안전한 채널을 통해 공유하는 것이 좋다. - 빌드 산출물 관리:
BuildConfig에 포함된 민감 정보는 빌드 시 자동 생성되므로, 빌드 폴더를 Git에 커밋하지 않도록 .gitignore에 반드시 포함해야 한다. - 보안 강화:
팀 내부에서 API Key를 관리할 때, 만약 키가 외부에 유출될 가능성이 있다면 별도의 보안 조치(예: 환경 변수, 암호화된 저장소, CI/CD 파이프라인에서의 안전한 주입 등)를 고려해 볼 필요가 있다. - gradle.properties 파일 활용:
local.properties 대신 gradle.properties 파일을 사용하는 방법도 있다. 이 파일은 프로젝트 수준에서 공통으로 적용되지만, 역시 보안상의 이유로 공개 저장소에 포함시키지 않아야 한다. - 프로가드(ProGuard) 적용:
릴리즈 빌드 시에는 난독화 및 최적화 도구인 ProGuard 또는 R8을 사용하여 API Key가 노출될 가능성을 더욱 낮출 수 있다. 단, 이미 BuildConfig에 삽입된 상수는 컴파일 타임에 결정되므로 이 부분에 대해서는 별도의 관리가 필요하다. - 서버 사이드 키 관리:
가능한 경우, 민감한 API 호출은 서버를 통해 프록시하여 클라이언트에 API Key가 직접 노출되지 않도록 설계하는 것도 고려해 볼 수 있다.