경험있는 프로그래머를 위한 머릿글

Flask에서 쓰레드 로컬

Flask에 적용된 설계 원칙 중 하나는 단순한 업무는 단순해야한다는 것이다. 그런 종류의 업무들은 많은 코드를 요구하지 않아야 하지만, 여러분을 제약해서도 안된다. 그런 이유로 Flask는 놀랄만 하거나, 비전통적이라 할만한 몇개의 설계 원칙을 갖고 있다. 예를 들면, Flask는 내부적으로 쓰레드로컬 객체들(thread-local objects)을 사용한다. 그래서 쓰레드-안전한(threadsafe) 상태를 유지하기 위해 하나의 요청에서 함수들끼리 돌아가며 객체를 주고받을 필요가 없다. 이런 접근은 편리하지만, 의존 주입(dependency injection)을 하거나 요청에 고정된 값을 사용하는 코드를 재사용하려할 때 유효한 요청 문맥을 요구한다. Flask 프로젝트는 쓰레드로컬변수들(thread-locals)에 대해 투명하고, 숨기지 않고, 심지어 코드와 문서에 어디서 쓰이는지 드러내고 있다.

웹개발에서 주의점

웹 어플리케이션을 개발할때에는 항상 보안에 대해 신경써야한다.

여러분이 웹 어플리케이션을 만들 때, 이용자들이 개인정보를 여러분의 서버에 등록하고 저장할 수 있도록 했을 것이다. 사용자는 데이타에 있어서 여러분을 신뢰한다는 것이다. 만약 여러분이 직접 작성한 어플리케이션의 유일한 사용자라 할지라도, 자신의 데이타가 안전하기를 원할 것이다.

불행히도, 웹 어플리케이션의 보안이 타협되는 여러 가지 경우가 있다. Flask는 현대의 웹 어플리케이션의 가장 일반적인 보안 문제인 XSS로 부터 여러분을 보호한다. 굳이 여러분이 안전하지 않게 작성된 HTML을 안전하게 변환하지 않더라도, Flask와 그 하부의 Jinja2 템플릿 엔진이 여러분을 보호해준다. 그러나 보안문제를 유발하는 더 많은 경우가 있다.

이 문서는 보안에 있어 주의를 요구하는 웹 개발의 측면들을 여러분에게 경고할 것이다. 이런 보안 문제의 일부는 생각하는것 보다 훨씬 복잡하고, 우리는 취약점이 이용될 것이라는 가능성을 뛰어난 공격자가 어플리케이션의 취약점을 찾아낼 때 까지 낮게 점치곤 한다. 그리고 여러분의 어플리케이션이 공격자가 칩입할 만큼 중요하지 않다고 생각하지 마라. 공격의 종류에 따라 다르겠지만, 자동화된 bot이 여러분의 데이타베이스에 스팸이나 악성코드로의 링크 등을 채우기 위한 방법을 탐색하려 들 수 있다.

Flask도 여느 다른 프레임워크와 같이 개발시에 취약점을 주의 하여야 한다.

Python3의 상태

요즘 Python 공동체는 Python 프로그래밍 언어의 새로운 버전을 지원하도록 라이브러리를 개선중이다. 상황은 대단히 나아지고 있지만, 이용자들이 Python3로 넘어가는데 걸림돌이 되는 이슈들이 남아 있다. 이 문제들의 일부는 오래동안 검토되지 않은 언어의 변화에 의해 야기됐고, 부분적으로는 저수준API가 Python3의 유니코드의 바뀐점에 맞춰 어떤식으로 바뀌어야 할지를 해결해내지 못한 점에서 발생 했다.

Werkzeug과 Flask는 그 변경에 대한 해결책을 찾는 순간 Python3로 포팅되고, Python3로 개발된 버전의 업그레이드에 대한 유용한 팁을 제공할 것이다. 그때까지, 여러분은 개발하는 동안 Python2.6이나 2.7을 Python3 경고를 활성화한 상태로 사용할 것을 권고한다. 여러분이 근래에 Python3로 업그레이드를 계획중이라면 How to write forwards compatible Python code.를 읽는것을 적극 추천한다.

계속해서 설치하기빠르게 시작하기 살펴볼 수 있다.