👩‍💻 Develope/Python

[Python] 민감 정보 분리해서 사용하기 (config 파일 분리)

heywantodo 2023. 4. 7. 17:01
728x90
반응형

[Python] 민감 정보 분리하기 

 

파이썬에서 데이터를 가져오거나 활용하려고 할 때, DB를 사용하는 경우가 많음

 

연동할 때 코드에 DB Host와 사용자의 Passwd를 적는 것이 불안하기도 했고,

매번 엔드포인트를 연결하려고 하니 귀찮은 점도 많았음

 

다양한 방법이 많은데, 여기서는 DB의 연결 정보를 Json 파일로 분리하는 방법을 사용 


Json 파일 생성

db.json이란 파일명으로 json 파일을 생성

{
"host": "my db host",
"user": "my user",
"passwd":"my password",
"port" : "my db port"
}

✔ 사용할 데이터베이스 정보를 넣어줘도 됨

 

모듈 Import

config 파일이 있는 위치를 지정해주는 os

json 라이브러리를 import

import os
import json

 

경로 지정

config 파일이 위치한 경로를 지정해주면 됨,

나는 ubuntu 환경을 사용하고 있기 때문에 ubuntu 홈에 폴더를 생성해서 경로를 지정해줌 

 

그리고 생성한 폴더에, 위에서 생성한 db.json 파일을 넣어주고 아래와 같이 코드 작성 

 

  •  CONF_DIR : Config 파일이 위치 할 폴더 경로
  •  config_file : 사용 할 config 파일명
CONF_DIR = "/home/ubuntu/config"
config_file = os.path.join(CONF_DIR, 'db.json')

 

Json 파일에서 Config 정보 불러오기

with open을 사용해서 json 파일을 읽어온 후 db_conf란 변수에 저장

with open(config_file) as f:
    db_conf = json.loads(f.read())

json의 요소를 가져오는 함수 생성

🔎 json 파일에 설정 값이 있으면 return하고 없으면 err 메시지 출력

def get_conf(set, conf=db_conf):
    try:
        return conf[set]
    except KeyError:
        err_msg = f"set the {set} enviroment variable"
        raise print(err_msg)

설정값 가져오기 

각각 config 값들을 변수에 저장

db_host = get_conf("host")
db_user = get_conf("user")
db_passwd = get_conf("passwd")

 

DB연결

저장한 변수들을 connect 값에 넣어줌 

import pymysql 

def conn_mysql():
    conn = pymysql.connect(
        host = db_host,
        user = db_user,
        password= db_passwd,
        port = 3306,
        db = 'test_db',
        charset='utf8'
    )
    return conn

연결 확인

import pandas as pd

sql = 'select * from test1'
test = pd.read_sql(sql, conn_mysql())
print(test)
    _id  name  age grade
0  1000   jon   25     A
1  1001  sara   20     B
2  1002   may   23     F
3  1003   jay   21     C

👍 정상적으로 연결이 잘 된 모습 확인 가능 

꼭 DB 연동이 아니더라도, 민감 정보를 코드에 사용하고 싶지 않을 때 사용하면 좋을듯

 

 

참조

https://scv-life.tistory.com/34

https://stackoverflow.com/questions/11174024/why-do-i-get-str-object-has-no-attribute-read-when-trying-to-use-json-loa

728x90
반응형