본문 바로가기

Android

[ 안드로이드 - Kotlin ] API KEY 관리

728x90

[ API KEY 관리법 ]

API KEY를 관리하는 이유

api key 같은 상수들을 관리하는 다양한 이유가 많지만 여기서는 두 가지 정도 이야기를 해보면 첫째로 코드에 그대로 작성하는 것은 보안상의 이유로 좋지 않습니다. 두 번째는 api키를 여러 곳에서 사용하는 경우 한 번에 관리하기 쉽도록 한 곳에서 관리하는 것이 좋습니다.

사용법

안드로이드에서는 보통 api key를 local.properties에 작성 후 build.gradle (:app)에서 BuildConfig에 변수를 추가하면 끝입니다.

여기서 추가로 git에 코드를 올리는 경우 .gitignore에도 local.properties를 적어주시면 됩니다. 기본적으로 git init 명령어를 사용하시면 local.properties를 포함하여 다양한 파일들이 .gitignore에 추가되어 따로 추가를 하지 않아도 됩니다.

(맨 아래로 가시면 코드만 확인하실 수 있습니다~)

 

  • local.properties에 key 작성

test key 3개 추가

  • build.gradle(Module:app)에 변수 추가

build.gradle에 변수 추가

출력 예시

MainActivity.kt 안에 onCreate시에 로그 출력
MainActivity에서 출력한 log


[.gitignore추가]

  • .gitignore 추가

기본적으로 설정되어있는 .gitignore

  • git status 확인

local.properties 변경해도 git 에는 영향없음


[전체 코드]

local.properties

# api key
api.key.test1="this is test1 key"
api.key.test2="this is test2 key"
api.key.test3="this is test3 key"

 

build.gradle (:app)

plugins {
	// 생략
}

// local.properties 사용을 위함
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

android {

    defaultConfig {
    	// 생략

        // api key 변수 지정
        buildConfigField "String", "APIKEY1", properties['api.key.test1']
        buildConfigField "String", "APIKEY2", properties['api.key.test2']
        buildConfigField "String", "APIKEY3", properties['api.key.test3']
    }
    //생략
}

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // api key 출력
        Log.d("API KEY TEST", "${BuildConfig.APIKEY1}")
        Log.d("API KEY TEST", "${BuildConfig.APIKEY2}")
        Log.d("API KEY TEST", "${BuildConfig.APIKEY3}")
    }
}

 

.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
.externalNativeBuild
.cxx
local.properties

 

제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻‍💻

감사합니다~😄

728x90