Python 에서 secret 키 값 이용하기 - json

크롤링, 데이터 베이스 연결등에 사용자 인증번호를 사용하는데 코드 자체에 아이디/비밀번호를 입력해서 사용하면 유출의 염려가 있으므로 이를 외부 파일에 두고 관리하고자 한다.

여러가지 방법이 있겠지만 여기서는 json 을 사용한다.

key:value 형식의 properties, 윈도우 ini 같은 형식을 지원하는 configparser 모듈도 좋은 선택 같다.

json 이용 키 관리

외부에 아래 형식의 secret 파일을 생성한다.

  • 디렉토리: .api_keys/ 폴더 사용
  • 파일: secret_keys.json

secret_keys.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{   "naver.com" : {
"userid": "UR_ID",
"password" :"votmdnjem" },
"apple.net": {
"userid": "UR_ID",
"password" : "votmdnjem" },
"api.twitter.com": {
"CONSUMER_KEY" : "unJgTOc0aZkk7NoX4LlD5g",
"CONSUMER_SECRET":"uHdmctDcPM66s9OasrKnr2x3pu88",
"ACCESS_TOKEN" : "98948674-J9auHiBiOGoWUJOzRafp",
"ACCESS_TOKEN_SECRET" : "kKgT9tlSY2rCIAbWJrCEEiTsR37" },
"my_database" : {
"userid" : "UR_ID",
"password" : "votmdnjem"}
}

파일 사용

json 모듈을 사용해서 해당 파일을 읽으면 키:값 형식으로 참조해서 사용할 수 있다.

1
2
3
4
import json

with open('../../.api_keys/secret_keys.json') as f:
secrets = json.loads(f.read())

이렇게 읽어들인 json 은 dict 같이 사용할 수 있다.

1
DB_USER, DB_PW = secrets['my_database']['userid'], secrets['my_database']['password']

MariaDb 10/ MySQL 8 - data 디렉토리 변경 (Ubuntu)

data 폴더 위치를 변경해 이동한다.

  • 여기서는 MariaDB 를 사용하고 있다.
  • rsync 를 사용해서 복사한다.

위치 이동

my.cnf 에 있는 기본 디렉토리를 /data 폴더로 변경하고 적용한다.

  1. 기본 data 디레토리 확인

my.cnf 에서 datadir 로 지정된 항목을 찾아 보자.

1
2
~$ grep datadir /etc/mysql/mariadb.conf.d/*
/etc/mysql/mariadb.conf.d/50-server.cnf:#datadir = /var/lib/mysql

기본으로 Ubuntu 종류에서는 /var/lib/mysql 를 기본 데이터 디렉토리로 지정하고 있다.

  1. data 디렉토리를 /data 로 변경한다.

my.cnf 를 수정해서 /data로 변경하자

1
~$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
  1. data 폴더 권한

mysqld / mariadbd 데몬은 mysql 사용자, mysql 그룹으로 사용권이 실행되고 있다. 데이터베이스에서 접근하는 모든 자원(폴더, 파일, 로그 등등)은 mysql 사용자로 접근이 가는해야 한다. 그래서 /data 디렉토리 권한을 변경한다.

mysql 사용자와 그룹 확인한다.

1
2
3
4
5
$ grep mysql /etc/passwd
mysql:x:111:117:MySQL Server,,,:/nonexistent:/bin/false

$ grep mysql /etc/group
mysql:x:117:

소유권을 mysql 사용자로 변경한다.

1
2
3
4
5
$ sudo chown -R mysql:mysql /data
[sudo] 암호:
$ ls -al /data
drwxr-xr-x 3 mysql mysql 4096 5월 6 22:35 .
drwxr-xr-x 20 root root 4096 5월 6 17:15 ..
  1. data 이동

rsync 를 사용해서 /var/lib/mysql 데이터를 /data 아래로 복사한다.

1
$ sudo rsync -avzph /var/lib/mysql/ /data/
  1. mysqld 데몬을 재시작하고 확인한다.
1
2
3
4
$ sudo systemctl restart mysql
$ sudo systemctl status mysql

● mariadb.service - MariaDB 10.11.2 database server

데이터베이스에 접속해 데이터를 확인해 보자. @@datadir 환경변수를 출력해서 /data 가 출력되면 my.cnf 의 설정이 잘 구성된 상태를 확인할 수 있다.

1
2
3
4
5
6
7
8
$ sudo mysql -u root -p

> select @@datadir;
+-----------+
| @@datadir |
+-----------+
| /data/ |
+-----------+

rsync 로 복사한 실제 데이터들은 각 스키마에서 확인해 보자.