블로그 이미지
자유로운설탕

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2017. 2. 13. 20:19 프로그래밍

 3 번째 시간이다. 이제 부터 전에 얘기했던 몇 개의 외부 환경을 사용하는 간단한 파이썬 프로그램들을 만들면서 구글을 통해 문제를 해결하는 예를 보이려고 한다. 이번 예제는 "DB에 암호화 할 평문 값 하나를 넣어놓고, 그 값을 불러와서 암호화 후 다시 복호화를 하고, 해당 값 들을 DB 로 다시 저장 후, 전체 값들을 가져와 화면에 표시"하려 한다. 이러한 부분을 나누어 해결하기(Divide and conquer) 방법을 사용하여 만들어 보자.

 

[목차]

0. 왜 파이썬 공부에 구글을 이용하는게 좋은가?

1. 언어를 바라보는 방법. 파이썬을 어떻게 바라봐야 할까?

2. 파이썬 설치와 환경, 버전 선택 하기의 이유.

3. 만들고자 하는 기능을 모르는 조각으로 나눠 조사해 보기

4. 데이터 베이스에서 내용 가져와 출력하기

5. 암호화 모듈을 이용해 암복호화 해보기

6. 퍼즐 조각들을 합쳐보기

7. 엑셀 파일 사용해 보기 -> 부록 : fuction 을 이용해서, 코드 정리해 보기

8. 정규표현식을 왜 사용해야 할까? 언어속의 미니 언어 정규표현식 살펴보기

9. 입력과 결과를 GUI 화면과 연결해 보기

10. Whois API 이용해 보기

11. 웹페이지 호출해 내용 파싱 하기(BeautifulSoup 그리고 한계)

12. 자동화 - 웹 자동화(with Selenium)

13. 자동화 - 윈도우즈 GUI 자동화(with pywinauto)

14. 자동화 - 작업 자동화

15. 수학 라이브러리 살펴보기

16. 그래픽 라이브러리 살펴보기

17. 머신러닝에서의 파이썬의 역활

18. 웹 프로그래밍 - Legacy Web

19. 웹 프로그래밍 - Flask 살펴보기(feat. d3.js)

20. 웹 프로그래밍 - Django 살펴보기

21. 정리 - 이런저런 이야기

 

 

 

  위에서 하려는 내용을 그림으로 표시하면 아래와 같다.

 

 

 

[문제 나누기]

  그럼 해당 문제를 풀려면 어떻게 해야 할까? 일단 자신이 모르는게 뭔지 정리해야 한다. 해당 문제를 구현하려면 아래와 같은 부분들이 필요하다.

1) 우선 SQL 에서 데이터를 불러오고 저장하는(정확하게 여기서는 업데이트 하는) 방법을 알아야 한다. (적절한 Database 를 설치해야 하고, 해당 Database 에 맞는 SQL 문을 만들어야 한다.)

2) AES256 방식을 사용해 불러온 값을 암, 복호화 해야 하다.

3) 최종으로 디비에 저장된 값 들을 가져와 cmd 화면에 출력해야 한다.

 

 

  일단 SQL 에서 데이터를 불러오고 저장하는 방법을 알아보자. 일반적으로 리눅스에서 돌아가는 MySQL 이 예제로 많이 사용되지만, 윈도우와 제일 친숙하고, 개인적으로 제일 익숙한 MSSQL 을 기준으로 구현을 하도록 하려한다. 나중에 해당 코드를 MySQL 과 Oracle 로 어떻게 변환 할수 있느냐에 대한 예제도 다루어 보려고 한다. MSSQL 은 유료 Database 가 아니냐고 얘기할 수도 있지만, MS 도 많이 개방 적이 되어서 소규모로는 기능제한이 거의 없는 express 버전을 제공한다(이 부분은 오라클도 마찬가지다). 그럼 MSSQL 연결을 지원하는 모듈을 찾기위해 구글에서 'python 3 mssql' 이라고 검색해 본다. 스택 오버플로우 글을 보면 pyodbc 와 pymssql 을 사용하라는 2개의 제안이 보인다.

http://stackoverflow.com/questions/17411362/connecting-python-3-3-to-microsoft-sql-server-2008

http://stackoverflow.com/questions/33326023/python-3-5-using-pymssql

 

  ODBC(Open DataBase Connectivity) 란 mssql, mysql, oracle 등 여러 db 에 대한 호출을, 각 databse 회사에서 윈도우에 지원하는 공통된 드라이버(뭐 API 가 정확한 표현이겠지만)을 통해서, 사용하는 개념이다. 비디오 카드 종류가 틀리더라도, 윈도우 드라이버가 잡히면 프로그램은 비디오 카드 종류만 세팅하면, 공통된 코드로 해당 비디오 카드들을 사용할 수 있는 것과 같은 개념이다. 전문 적인 설명은 아래의 링크를 참고한다.

http://dumaclub.tistory.com/entry/ODBC%EB%9E%80

 

 

  근데 ODBC 로 구현하게 되면, 아래와 같이 ODBC 세팅하는 방법도 소개해야 하고, 그럼 코드와 DB에 연결하는 계정 문자열이 분리되게 되어서, 설명하기가 더 어려워 지기 때문에, ODBC 방식이 아닌 직접 연결을 하는 라이브러리로 설명하려 한다. (사실 연결 방식은 ODBC 든 아니든 연결 계정이 노출된다는 면에서는 보안적으로는 바람직하진 못하다) 그래서 pymssql 모듈을 사용하기로 결정 한다. odbc 를 사용해 본적 없는 심심하신 분은 나중에 pyodbc 모듈을 이용해 구현해 보심 좋을듯 하다.

http://blog.danggun.net/1003

 

 

  2 번째로, aes256으로 암, 복호화 하기 위한 모듈을 찾아보자. 구글에서 'python 3 aes256' 로 찾으면 처음에 스택오버플로우 글이 나오고, 두번째로 우리나라 분이 정리한 문서가 하나 나온다.

http://blog.dokenzy.com/archives/1997

 

  읽어보니 파이썬 3.4에서 돌아간다고 하고, 스택오퍼플로우 글들을 참고해서 만든 코드를 테스트 하는 코드까지 추가되어 자세히 만들어져 있기 때문에 가져다 사용하기 적절해 보인다. 물론 실제로 필요한 프로그램을 만들때는 암호화 라이브러리 같은 경우, 샘플 코드가 인자 값들을 적절하게 세팅하여 사용했는지를 따져보고, 해당 라이브러리가 취약점이 없고 계속 유지보수 되고 있는 지를 따져봐야 할 거이다. 하지만 지금은 학습을 위해 프로그램을 만들고 있는 중이기 때문에, 특별한 문제는 없다고 가정하고 가져와 사용하기로 한다.

 

 

  3 번째는 가져온 내용을 프린트 하는 부분으로 문법 문제와 같지만 DB 에서 가져온 내용을 프린트 하는 부분이므로, DB 조회 샘플을 찾다보면 자연 스럽게 같이 해결 날것 같다.

 

 

 

[여담 - 문법 공부하기]

  여담이지만 개인적인 의견인데, 어떤 언어를 퀵하게 참조해서 사용해야 할때는(예전에 상용 자동화 솔루션을 사용하기 위해 공부 할 때 그랬었다), 메뉴얼이 어느정도 잘 정리되어 있다면 목차위주로 훝으면서 보게되면 언어가 지원하는 기능의 범위를 대충 알수 있게 된다. 예를 들어 파이썬 문법을 훝어 보기 위해서 구글에 'python 3 manual' 을 쳐서 나온 아래의 tutorial 을 한번 관심 있는 항목을 하나씩 예문 위주로 보는 것도 나쁘지 않다. 혹시 지금의 진행이 너무 구현위주로 빠져있어서 중요한 문법 요소들을 놓치는 기분이 들어 불안한 경우 아래 튜토리얼은 꼼꼼히, 나머지 레퍼런스는 대충 함 보셔도 괜찮을 듯하다. (절대 자세히 읽으라는 말은 아니고, 전체적인 흐름 파악 측면에서 보았음 한다.)

https://docs.python.org/3/tutorial/

https://docs.python.org/3/library/index.html

https://docs.python.org/3/reference/index.html

 

 

  그럼 여기서 글을 마무리 하고, 다음 시간에는 mssql 을 설치해서 계정, 테이블 등을 세팅 하고, pymssql 을 사용해서 DB를 조회하는 내용을 다루려고 한다. 그러면서 database 간의 차이에 대한 짧은 지식도 교양 차원에서 얘기하려 한다.

 

 

2017.2.13 by 자유로운설탕
cs

 

 

posted by 자유로운설탕