프로젝트/비트코인 자동매매

비트코인 자동매매 프로그램 환경변수 파일로 빼기 - 보안 강화

Tech&Fin 2022. 1. 25. 16:55
반응형

비트코인 자동매매 프로그램을 만들다보면 업비트 API 액세스 키 및 시크릿 키 그리고 텔레그램 키 등 여러가지 보안 정보들을 사용해야 합니다. 지금까지는 제일 간편한 방법으로 각종 Key를 공통모듈에 넣고 저장하여 사용하였는데요.

 

이런 경우 코드를 공유할 때 해당 부분을 제거하는 것을 깜빡하는 경우 자신의 Key가 그대로 노출되어 자산이 위험에 빠질 수 있습니다.

 

이번 시간에는 각종 Key를 공통 코드가 아닌 특정 파일로 빼서 보관하고 필요한 시점에 파일을 읽어 Key를 조회하는 방법으로 공통 모듈을 변경해 보도록 하겠습니다.

 

 

목차 - 클릭하면 이동합니다.

     

    보안 정보 파일로 관리하기

    폴더 및 파일 생성하기

    trade_bot 폴더 아래에 env 폴더를 하나 생성하고 env.txt 파일을 생성합니다.

     

    {'access_key': '업비트 액세스 키', 'secret_key': '업비트 시크릿 키', 'p_username': '오라클 DB ID', 'p_password': '오라클 DB 비밀번호', 'p_service': '오라클 DB 이름', 'line_token': '라인 메신저 토큰', 'telegram_token': '텔레그램 토큰', 'telegram_id': '텔레그램 ID'}

    생성한 파일안에 딕셔너리 형태로 사용하는 Key를 입력하고 저장합니다.

     

    환경 파일 읽어오는 함수 추가

    from ast import literal_eval
    
    # -----------------------------------------------------------------------------
    # - Name : get_env_keyvalue
    # - Desc : 환경변수 읽어오기
    # - Input
    #   1) key : key
    # - Output
    #   1) Value : 키에 대한 값
    # -----------------------------------------------------------------------------
    def get_env_keyvalue(key):
        try:
            path = './env/env.txt'
    
            f = open(path, 'r')
            line = f.readline()
            f.close()
    
            env_dict = literal_eval(line)
            logging.debug(env_dict)
    
            return env_dict[key]
    
        # ----------------------------------------
        # 모든 함수의 공통 부분(Exception 처리)
        # ----------------------------------------
        except Exception:
            raise

    기존에 사용하던 upbit.py 공통 모듈에 위의 환경 변수를 읽어오는 부분을 추가합니다. 이때 text 형태로 되어 있는 데이터를 파이썬 딕셔너리 형태로 변경하기 위해 literal_eval 함수 사용이 필요합니다.

     

    KEY 값 가져오기

    payload = {
        'access_key': get_env_keyvalue('access_key'),
        'nonce': str(uuid.uuid4()),
        'query_hash': query_hash,
        'query_hash_alg': 'SHA512',
    }

    기존에 Key를 가져오던 부분을 위와 같이 함수로 한번 감싸주면 env.txt 파일에서 Key에 대한 Value를 읽어오게 됩니다.

     

    공통모듈 전체 파일

    upbit.py
    0.07MB

     

    마치며

    이번 시간에 살펴본 내용을 통해 지금까지 긴 코드의 공통 모듈 코드를 전부 텍스트 형태로 블로그에 포스팅해서 본문 길이가 너무 길었었는데 이제부터는 간편하게 위와 같이 파일을 업로드할 수 있을 것 같습니다.

     

    기존 방식으로 사용하는데도 문제는 없으나 이왕이면 별도 파일로 빼서 관리하는 것이 더 보안적으로 안전할 것 같으니 가능하면 반영하시는 것이 좋을 것 같습니다.

     

    블로그를 구독하면 소식을 조금 더 빨리 받아 보실 수 있습니다. 감사합니다.

    반응형