끄적거림

built-in file 참조하여 활용하기 in PyCharm(feat. API key 관리 및 지역정보 관리) 본문

Python/pyCharm

built-in file 참조하여 활용하기 in PyCharm(feat. API key 관리 및 지역정보 관리)

Signing 2020. 3. 5. 14:22
728x90
반응형

그동안 만들어 놓은 여러 공공데이터 API를 연계한 코드들이 있었다.

 

그러다 보니 각 API들을 호출할 때마다 요청할 url과 사용자key값들이 다들 제각기고 관리하기 힘들다는 것을 몸소 느꼈다.

또한, 일부 API는 지역코드별로 요청하는 것들도 있기에 csv파일로 된 지역 코드 관리도 필요함을 느꼈다.

 

이러한 불편함을 줄이고자 resource를 관리할 수 있는 작업을 진행하려 한다.

 

 

 

 

1. PyCharm 프로젝트 구조 관리

나는 개발 툴로써 pyCharm을 사용했다. 프로젝트 구성은 사진과 같다.

프로젝트 구성

여기서 빨간색 표시한 부분이 새로 만든 하위 폴더(directory) 및 패키지이다. 쉽게 생각하면 eclipse의 package라고 생각하면 되겠다.

 

먼저, apisrc는 내가 그동안 만든 api연계 코드들을 함수화하여 get_*( ), 이런식으로 main에서 호출하면 api와 연계하여 동작할 수 있게끔 캡슐화를 진행한 것이다.

 

다음으로, common은 일반적으로 많이 쓰일 함수나 클래스들을 목적에 맞게 사용할 코드들을 모아둔 곳이다.

 

마지막으로, resource에는 apisrc에서 api를 호출할 때 필요한 정보들을 적어둔 것이다.

 

그래서 Scripts 패키지에서 Main.py 코드를 실행시킬때 common, apiscr, resource를 import하여 사용할 수 있게끔하였다.

 

2. resource 관리

1) resource 패키지 우클릭 - New - File 클릭 - 이름 입력

2) 리소스 파일 형식 고르기

여기서 원하는 형식의 파일을 고르면 된다. python, Json, text 등등 다양한 자료구조들이 있다.

여기서 나는 python을 골랐고 python의 Dictionary 자료구조를 활용하여 API 키 관리를 할 생각이었다.

 

 

 

2.1. Python 파일) resource 관리 - API url 및 key

내가 필요한 resource를 다음과 같이 목적과 상황에 맞게 나누어서 dictionary 구조로 만들어 저장시켰다.

필요한 dict을 불러서 그 해당 key를 선언하면 그에 상응하는 value값으로 쉽게 리소스 관리를 할 수 있다.

물론 이때, .py 코드로 작성해도 좋고, 다른 파일 형태로 저장시켜도 좋다. 다만 그럴때는 import하는 과정이 살짝 달라지긴하지만 어렵지 않으니 잠시후에 살펴보기로 하자.

 

 

3. API 호출 코드

리소스 코드를 작성했다면 해당 파일을 어떻게 읽어오는지 살펴보자

import ~~

import resource.apikey as api			# 참조할 리소스


#  Area Data(Meta Data)
def getMovie_AreaCode():
    #  01. URL parsing
    url_for_areaCode = api.Movie_AreaCode['url']		# 참조
    params_for_areaCode = '?' + urlencode({
        quote_plus("key"): api.Movie_AreaCode['key'],  # 발급키
        quote_plus("comCode"): "0105000000"  # 조회하고자하는 상위 코드
    })
    req_for_areaCode = urllib.request.Request(url_for_areaCode + unquote(params_for_areaCode))

    #  02. get Data
    for_areaCode = urlopen(req_for_areaCode).read()  # get bytes data

    #  03. Convert Readable Data
    data_for_areaCode = json.loads(for_areaCode)
    area_code = pd.DataFrame(data_for_areaCode['codes'])

    return(area_code)

먼저, 위와 같은 코드로 import를 해준다. python 코드를 참조했기 때문에 해당 python file 안에 있는 모든 자료구조, 함수들과 같은 리소스를 가져다 사용할 수 있다.

 

다음으로, 나는 Dictionary 형을 사용했기 때문에 원하는 key를 입력하고 그에 상응하는 value를 가져와 사용한다.

 

 

 

 

 

 

2.2. resource 관리 - 지역코드관리 csv file

2.1에서는 python 형태의 파일을 참조하는 것을 알아보았지만 때로는 csv file로 관리를 할 때도 있다.

이때, 빌트인 되어있는 csv file을 어떻게 읽는지 살펴보자.

 

 

내가 원하는 csv파일을 해당 장소에 넣어둔다.

 

 

3.2. csv파일 읽어오기

import pandas as pd

def read_built_in_CSV():
    with open('resource/META_관측지점정보.csv', 'r') as f:
        meta = pd.read_csv(f, encoding="CP949")
    return meta

해당 경로로 파일을 열어서 읽어온다.

 

 

이로써 리소스 관리를 빌트인 파일로 관리하는 법을 알 수 있었다.

 

 

그럼 왜 굳이 이렇게 관리를 해야할까?

 

이유는 단순하다.

 

첫 번째로, 관리에 용이하다.

key, url과 같이 외우기도 어렵고, 전부 목적에 따라 값도 각자 다르기 때문에 소스코드마다 산재되어 있다. API 서비스가 중단되거나 변경사항이 생길때, 혹은 key를 재발급 받아야할 때 어느 소스코드로 들어가 몇번째 줄에서 사용되고 있는지를 일일히 찾아내기는 어려운 작업이다.

따라서, 이를 따로 빼우어 참조형식으로 활용한다면 보다 유기적이고 깔끔한 코딩이 될 것이다.

 

두 번째로, 한 눈에 보기 편하다.

산재되어있는 모든 리소스들은 소스코드 속에 숨어있기 때문에 찾아내기가 어렵다.

반면에, 한 곳에 모아 관리를 하게되면 가독성도 좋아지고 일의 효율성도 상승한다.

 

 

여타 이러한 이유로 리소스 관리에 대해 알아보았다.

 

 

 

728x90
반응형

'Python > pyCharm' 카테고리의 다른 글

[Tips] pyCharm editor 창에서 원하는 문자 바꾸기  (0) 2020.10.27
Comments