API Key를 properties 파일로 관리하기

한바울·2023년 3월 25일
0

Java

목록 보기
3/4

카카오톡 API나 Google 메일 서비스 그리고 현재 디스코드 Bot 개발을 하면서

API Key나 Token Key 등등 Secret Key는 외부에 유출되면 안된다는 경고성 글귀를 많이 접했다.

Git hub에 업로드 하고 싶은데 프로젝트에서 단순히 String 변수에 저장해둔 key들을 일일히 지우기는 번거로워서 분명히 방법이 있을거라 생각했고

여러가지 방법을 제시해 놓은 글을 찾았다.

https://itnext.io/how-to-store-passwords-and-api-keys-in-project-code-1eaf5cb235c9

내가 선택한건 내 프로젝트에 Properties 확장자로 파일을 만들어 key들을 저장해놓고 이 파일만 .gitignore에 추가하는 방법이다.
현재 프로젝트가 혼자 간단히 하는 프로젝트이기에 상관 없지만 실제 버전관리를 해야하는 서비스에서는 불가능한 방법인듯 하다.

apikey.properties 접근 방법 2가지

  1. root 경로에서 찾는 방법
  2. ClassLoader를 이용하여 컴파일된 bin 폴더에서 찾는 방법

apikey.properties 파일 내용 및 경로 이미지

# /config/apikey.properties 내용
TEST_TOKEN = ROOT_PATH_SUCCESS
# app/bin/main/apikey.properties 내용
TEST_TOKEN = RESOURCE_PATH_SUCCESS

/config/apikey.properties 접근하기

package com.paulhan.discord;

import java.io.IOException;
import java.net.URL;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException {
        String protocol = "file:/";
        String rootPath = System.getProperty("user.dir");
        String propertiesPath = "/config/apikey.properties";

        StringBuilder filePath = new StringBuilder(protocol)
                                    .append(rootPath)
                                    .append(propertiesPath);

        URL propURL = new URL(filePath.toString());

        Properties properties = new Properties();
        properties.load(propURL.openStream());

        System.out.println(properties.getProperty("TEST_TOKEN"));
	}
}
출력 : ROOT_PATH_SUCCESS

app/bin/main/apikey.properties 접근하기

package com.paulhan.discord;

import java.io.IOException;
import java.net.URL;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        String propFile = "apikey.properties";
        URL props = ClassLoader.getSystemResource(propFile);
        properties.load(props.openStream());
        
        System.out.println(properties.get("TEST_TOKEN"));
    }
}
출력 : RESOURCE_PATH_SUCCESS
profile
몰두하는 사람

0개의 댓글