728x90

업무에 따라 다르겠지만 개인적으로는 DNS 에 대한 핸들링이 무척 많이 필요합니다. 커맨드라인에서 Shell 스크립트를 이용해서 여러가지를 만들어 사용하고 있긴 하지만, 가능하면 Python 이나 node.js 로 필요한 기능을 만들어 사용하는 것이 좋지 않을까 생각하고 있었습니다.

Python 쪽에서 사용할 수 있는 DNS 패키지가 어떤것이 있는지 살펴보다보니 `dnspython` 이라는 걸출한 물건이 있는 것을 발견했습니다. 패키지 공식 페이지에서 이야기 하는 것처럼 dnspython 은 DNS Toolkit 을 표방하고 있습니다. 정말 많은 기능들을 제공하고 있기 때문에 DNS 관련한 도구 개발에 무척 도움이 될 것 같습니다. 

간단하게는 Resolver 역할을 수행하는 것에서 시작할 수 있고, 좀 멀리 나가면 Zone 에 대한 핸들링도 수행할 수 있는 것 같습니다. 개인적으로 사용해 본 내용이 Resolver 중심이고 도메인 이름에 대한 핸들링 정도여서, 실제 필요한 과제에 맞도록 Research 는 조금 더 해봐야 할 것 같습니다. PyPi 에 패키지가 등록되어 있기 때문에 pip 로 패키지를 설치하면 편리하게 사용해 보실 수 있습니다. 

 

dnspython | dnspython

17 July, 2020 at 06:30 PDT Dnspython 2.0.0 is now available on PyPI. See “What’s New” for all the features in this major release. Thanks to the many people who have contributed to this release! Python 2.x support ended with 1.16.0. Dnspython 2.0.0 re

www.dnspython.org

 

728x90
728x90

어떤 언어를 사용하던 문자열 포맷팅은 꽤 짜증스러운 부분입니다. 화면에 출력을 하던 파일에 내용을 쓰던 다양한 문자열 포맷팅을 사용해야만 합니다. 문자열 포맷팅이 데이터베이스와 같이 민감한 요소를 액세스 하는데 사용된다면 (가령 쿼리 문장 같은...) 포맷팅 이전에 SQL Injection 과 같은 악의적인 공격도 감안해야 하기 때문에 더 신경을 써야만 합니다. 

자바스크립트를 오랫동안 사용하면서 유레카를 외쳤던 때가 있었습니다. 물론 자바스크립트도 계속 진화하고 있기 때문에 Wow 한 순간들이 여러번 있었지만, 그 중에서도 가장 기억에 남는 것은 ES6 에서 도입된 템플릿 문자열이었습니다. 일반적으로 변수를 선언하거나 문자열을 만드는 과정에 백틱(`)을 이용해 변수나 메서드를 변수에 직접 바인딩 할 수 있게 해주는 방법이었습니다. 

// Javascript ES6 에 도입된 템플릿 문자열
console.log(`Default ENV value is ${process.env.MY_VALUE}`);

파이썬으로 코드를 만들면서도 <당연히> 문자열을 핸들링 해야 하는 상황이 계속 발생했습니다. 디버깅 로그에서부터 사용자 콘솔 화면에 뿌려줄 응답 결과, 데이터베이스 쿼리문에 까지 당연한 일이었습니다. 오래전 방식으로 문자열을 + 로 연결하는 작업을 하다보니  `ES6 에서의 템플릿 문자열 같은게 없을까?`하는 궁금증이 생겼습니다. 네, 이 글을 적고 있으니 당연히 방법을 찾았겠지요?


자바스크립트에서 ES6 이상에서만 템플릿 문자열을 쓸 수 있는 것처럼 파이썬 역시 Python 3.6 이후 버전에서 비슷한 역할을 하는 f-Strings 가 추가되었습니다. f-Strings 라고 이름 붙인 연유는 찾아보지 않았지만 문자열을 묶어주는 따옴표 앞에 f 를 붙여야만 이 기능을 쓸 수 있기 때문에 그냥 그렇게 이름을 지었구나... 참 엔지니어스럽다 라는 생각을 하고 넘어갔습니다. 

# Print 문에서 f-Strings 사용하기
print(f"- Start update : {_domain}/{_property}")

# 문자열에서 f-Strings 사용하기
log += f"- Start update : {_domain}/{_property}\n"

# f-Strings 로 LIST 바인딩하기
log += f"- No metadata found ({result['title']})\n"

 대표적으로 f-Strings 를 사용한 예시들입니다. 문자열이 필요한 모든 곳에 사용할 수 있습니다. 자바스크립트 ES6 에서는 ${} 였다면 파이썬 에서는 {} 입니다. 브레이스 안쪽에는 직접 변수명이 들어가거나 내부 함수, 메서드 등이 모두 활용될 수 있습니다. 이런 형태의 문자열 조립이 좋은 이유는 정확하게 출력되는 결과를 인지할 수 있다는 점이겠지요? 아래와 같은 형태에서는 가독성도 떨어지고 무슨일이 일어날지 짐작하기가 어려우니까요.

print("- Start update : " + _domain + "/" + {_property})
log += "- No metadata found (" + result['title'] + ")\n"

[ 윤작가님의 베스트셀러 파이썬 서적으로 고고씽! ]

 

혼자 공부하는 파이썬:파이썬 최신 버전 반영

COUPANG

www.coupang.com

 

 

python, JSON 타입과 DICT 타입의 자료형 변환

JSON 으로 데이터를 표현하는 것은 굉장히 일반화 되어 있습니다. 많은 API 의 응답이 JSON 형태를 가지고 있을 뿐만 아니라 서버의 설정이나 개발된 코드의 환경 정보도 JSON 으로 쓰는 경우가 많습�

ondemand.tistory.com

 

 

Python 에는 증감연산자가 있다, 없다?

전통적인(?) 많은 개발 언어에서 <증감연산자>를 사용해 왔습니다. ++ 혹은 -- 로 표기되는 <증감연산자>는 <3항 연산자>와 마찬가지로 코드의 양을 많이 줄여줄 수 있는 장점이 있어 널리 사용됩니

ondemand.tistory.com

 

728x90
728x90

여러 문서들에 따르면 Python 2 의 경우 2.7.9 이상의 버전, Python 3 의 경우 3.4 버전 이상이 설치된 경우 파이썬 패키지 매니저인 pip 가 이미 설치되어 있을 거라고 합니다. 하지만 늘 예외가 있는 법이고, 그 예외는 본인에게 해당되는 경우가 많죠. 설치된 파이썬의 버전 조건이 맞지만 pip 가 설치되어 있지 않다면 아래의 순서대로 pip 를 쉽게 설치할 수 있습니다. 맥을 쓰고 있다보니 brew 로 pip 설치를 하려고 했으나, 파이썬이 중복되어 설치될 수 있다는 경고때문에 따로 설치를 진행했습니다.


먼저, curl 을 이용해서 pip 를 설치하기 위한 파이썬 코드를 다운로드 받습니다. 뭐, 브라우저를 이용해서 소스코드를 로딩하고 파일로 따로 저장하겠다 하시면... 그리 하셔도 말리진 않겠습니다.


$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py


소스코드가 다운로드 되었다면 실행을 해보겠습니다. 사용중인 환경에 따라 sudo 로 권한 상승을 할 필요가 있다는 점 참고하시기 바랍니다. 


$ sudo python get-pip.py

Collecting pip

  Downloading pip-8.1.2-py2.py3-none-any.whl (1.2MB)

    100% |████████████████████████████████| 1.2MB 927kB/s

Collecting wheel

  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)

    100% |████████████████████████████████| 71kB 4.5MB/s

Installing collected packages: pip, wheel

Successfully installed pip-8.1.2 wheel-0.29.0


이제 pip 를 실행해보겠습니다. 잘 되는군요.


$ pip


Usage:

  pip <command> [options]


Commands:

  install                     Install packages.

  download                    Download packages.

  uninstall                   Uninstall packages.

  freeze                      Output installed packages in requirements format.

  list                        List installed packages.

  show                        Show information about installed packages.

  search                      Search PyPI for packages.

  wheel                       Build wheels from your requirements.

  hash                        Compute hashes of package archives.

  completion                  A helper command used for command completion

  help                        Show help for commands.



728x90

+ Recent posts