github에 코드를 올리다보니, apikey를 github에 노출시키면 안되겠다는 생각을 했다.
안그래도 전에 그냥 apikey를 올렸더니 github security인가 거기서 메일을 계속 받았던 경험이 있었다.
django의 env처럼 apikey를 따로 관리하는 기능이 있을거라고 생각하고, 구글링을 시작했다.
이런 저런 자료를 찾아보다가, android에는 local.properties 파일에 비밀키를 보관한다는 것을 알 수 있었다. 확인해보니 local.properties 파일이 프로젝트 생성이 되면 기본으로 만들어진다.
local.properties 파일에 비밀키를 적고,
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/Users/mksoo/Library/Android/sdk
OPENAI_API_KEY = sk-...
gradle에 local.properties 파일을 등록해서 써야한다. 그런데 kotlin-kts 방식이랑 groovy 방식이랑 local.properies 를 불러오는 방식이 다르다. 그리고 설명이 충분하게 되어있지 않았던 것 같다. 찾다가 그냥 chatGPT에게 바로 물어보았다.
그래서… 정답을 찾았다!
Gradle에서 apikey.properties 파일 읽기
프로젝트의 build.gradle.kts 파일(앱 수준)에서 apikey.properties 파일의 내용을 읽어 변수로 저장하는 코드를 추가한다. kotlin DSL을 사용하는 경우 아래와 같이 작성:
kotlinCopy code
val apiKeysPropertiesFile = rootProject.file("local.properties")
val apiKeys = Properties().apply {
load(apiKeysPropertiesFile.inputStream())
}
android {
...
}
민감한 정보를 안전하게 사용하기
build.gradle.kts 파일에서 읽은 변수를 앱 코드에서 사용할 수 있도록 **buildConfigField**를 통해 BuildConfig 필드에 추가한다.:
build.gradle.kts
kotlinCopy code
android {
...
defaultConfig {
...
// API 키를 BuildConfig 필드로 추가
buildConfigField("String", "OPEN_API_KEY", "\\"${apiKeys["OPEN_API_KEY"]}\\"")
}
}
앱 코드에서 사용하기
이제 BuildConfig 클래스를 통해 **API_KEY**에 접근할 수 있다.. Kotlin에서는 다음과 같이 사용할 수 있다:
val apiKey = BuildConfig.OPEN_API_KEY
👉 만약 BuildConfig가 인식이 안된다면 clean project → rebuild project를 진행해보도록 하자.
그래도 안되면 캐시를 지워보고 다시 시작해보자.
참고
'진행중' 카테고리의 다른 글
[프로젝트] 지역 공공 포스터를 포스팅해보자. 6) 기타 이슈 및 추가 작업 사항 (0) | 2024.04.09 |
---|---|
[프로젝트] 지역 공공 포스터를 포스팅해보자. 5) 네이버 카페에 글 올리기 (4) | 2024.04.09 |
[프로젝트] 지역 공공 포스터를 포스팅해보자. 4) chatGPT api에 prompt와 이미지를 전송해서 답변을 받아내기 (0) | 2024.04.09 |
[프로젝트] 지역 공공 포스터를 포스팅해보자. 3) 갤러리에서 이미지를 불러오기 (0) | 2024.04.09 |
[프로젝트] 지역 공공 포스터를 포스팅해보자. 2) 네이버 아이디로 로그인(네아로) 구현 (0) | 2024.04.08 |