파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

34

Post on 30-Jul-2016

323 views

Category:

Documents


22 download

DESCRIPTION

주성식, 홍성민 지음 | 오픈소스 & 웹 시리즈_078 | ISBN: 9791158390358 | 25,000원 | 2016년 05월 31일 발행 | 344쪽 | AWS, Elastic Beanstal, Flask, Python, 오픈소스, 웹 웹프로그래밍, 파이썬, 플라스크

TRANSCRIPT

Page 1: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발
Page 2: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

파이썬 웹 프로그래밍(개정증보판)

플라스크를 이용한 쉽고 빠른 웹 개발

플라스크_앞부속.indd 1 2016-05-24 오후 3:42:58

Page 3: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

예제설명

이 책의 예제는 위키북스의 깃허브 저장소에 업로드 되어 있으며, 예제를 내려받는 방법은 ‘2장 개

발 환경 설정’에서 자세히 다루고 있다.

https://github.com/wikibook/flask/tree/python3 (python3 브랜치)

각 예제는 해당 장에서 다루는 소스코드만 포함하고 있다. 다만, 2부에서 다루는 포토로그

(photolog) 애플리케이션의 전체 소스코드는 ch05 디렉터리에 모두 포함돼 있다. 포토로그 애플

리케이션의 전체 코드를 참고하려면 ch05 디렉터리를 살펴보기 바란다. 5장을 제외한 나머지 장

은 해당 장에서 설명하는 부분의 코드만 포함하고 있다.

책1.indb 7 2016-05-24 오후 3:13:26

Page 4: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

목 차

PART 01 파이썬 웹 애플리케이션 시작하기

1장. 파이썬과 웹 애플리케이션

1.1 파이썬 ...................................................................................................................................................... 19

인터프리터 기반의 객체 지향(Object-oriented) 프로그래밍 언어 ................................................................... 21

플랫폼 독립적인 언어 (Platform Independent) ............................................................................................ 21

유연한 확장(Extendible) ............................................................................................................................. 22

동적 타이핑(Dynamic Typing) ..................................................................................................................... 22

리플렉션(Reflection) .................................................................................................................................. 22

1.2 웹 애플리케이션 개발 동향 ....................................................................................................................... 23

1.3 풀 스택 프레임워크 vs. 마이크로 프레임워크 ............................................................................................ 27

1.4 대표적인 마이크로 프레임워크 ................................................................................................................. 28

시나트라(루비) ............................................................................................................................................ 29

스칼라트라(Scalatra, Scala) ........................................................................................................................ 30

보틀(Bottle, 파이썬) ................................................................................................................................... 30

1.5 플라스크(Flask) ....................................................................................................................................... 31

플라스크의 특징 .......................................................................................................................................... 32

플라스크 웹 애플리케이션 살펴보기 .............................................................................................................. 33

2장. 개발 환경 설정

2.1 설치 개요 .................................................................................................................................................. 35

2.2 파이썬 설치 .............................................................................................................................................. 35

책1.indb 8 2016-05-24 오후 3:13:26

Page 5: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

2.3 플라스크 설치 ........................................................................................................................................... 40

2.4 통합개발 환경(IDE) 설치 .......................................................................................................................... 46

이클립스 설치 ............................................................................................................................................. 47

PyDev 설치 ................................................................................................................................................. 49

2.5 깃허브(Github) 저장소 연결 .................................................................................................................... 57

깃(Git) ....................................................................................................................................................... 57

깃허브(Gitbub) .......................................................................................................................................... 58

로컬로 예제 소스 가져오기 ........................................................................................................................... 59

2.6 플라스크 애플리케이션 실행 ..................................................................................................................... 68

2.7 기타 개발 도구들 ...................................................................................................................................... 70

파이참(PyCharm) ....................................................................................................................................... 70

압타나 스튜디오(Aptana Studio) ................................................................................................................ 71

IPython + 노트북(Notebook)...................................................................................................................... 71

Vim을 파이썬 IDE처럼 사용하기................................................................................................................... 71

3장. 플라스크 시작하기

3.1 첫 플라스크 애플리케이션, “Hello Flask!” ................................................................................................ 73

3.2 라우팅 ...................................................................................................................................................... 75

3.3 요청과 응답 .............................................................................................................................................. 78

3.4 쿠키와 세션 .............................................................................................................................................. 80

3.5 정적 파일과 템플릿 ................................................................................................................................... 81

주석 ........................................................................................................................................................... 85

공백 ........................................................................................................................................................... 86

이스케이핑 .................................................................................................................................................. 87

목 차

책1.indb 9 2016-05-24 오후 3:13:26

Page 6: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

for ............................................................................................................................................................. 88

if ................................................................................................................................................................ 88

macro ........................................................................................................................................................ 81

import ....................................................................................................................................................... 90

extends...................................................................................................................................................... 91

include ...................................................................................................................................................... 91

3.6 에러와 로깅 .............................................................................................................................................. 92

3.7 로컬 서버 실행 .......................................................................................................................................... 93

4장. 작은 트위터, 미니 트윗(minitwit)

4.1 미니 트윗 개요 .......................................................................................................................................... 97

4.2 데이터베이스 처리 .................................................................................................................................. 105

4.3 뷰 함수 구현 ........................................................................................................................................... 108

사용자 등록 ............................................................................................................................................... 108

로그인/로그아웃 ........................................................................................................................................ 111

트윗 등록 .................................................................................................................................................. 114

팔로우/언팔로우 ........................................................................................................................................ 116

타임라인 ................................................................................................................................................... 119

4.4 정적 파일과 템플릿 ................................................................................................................................. 123

목 차

책1.indb 10 2016-05-24 오후 3:13:27

Page 7: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

PART 02 파이썬 웹 애플리케이션 만들기

5장. 추억을 기록한다, 포토로그(Photolog)

5.1 포토로그 개요 ......................................................................................................................................... 131

5.2 클라이언트 측 구조 ................................................................................................................................. 133

부트스트랩(bootstrap).............................................................................................................................. 133

폰트 어썸(Font Awesome) ....................................................................................................................... 135

jQuery 자바스크립트 라이브러리 ............................................................................................................... 136

exif.js와 binaryajax.js ............................................................................................................................... 137

gmaps.js .................................................................................................................................................. 137

5.3 애플리케이션 레이아웃 ........................................................................................................................... 138

5.4 서버 측 구조 ........................................................................................................................................... 140

MVC(Model-View-Controller) ................................................................................................................. 140

패키지 초기화 ........................................................................................................................................... 141

로깅 ......................................................................................................................................................... 146

SQLAlchemy ............................................................................................................................................ 148

블루프린트 ................................................................................................................................................ 154

세션 ......................................................................................................................................................... 156

WTForms ................................................................................................................................................. 162

5.5 필요한 패키지 설치 ................................................................................................................................. 168

목 차

책1.indb 11 2016-05-24 오후 3:13:27

Page 8: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

6장. 사용자 관리와 로그인

시작하기 전에.. ............................................................................................................................................. 177

6.1 사용자 등록 ............................................................................................................................................ 178

6.2 사용자 정보 변경 .................................................................................................................................... 184

6.3 사용자 탈퇴 ............................................................................................................................................ 187

6.4 로그인/로그아웃 ..................................................................................................................................... 190

7장. EXIF 분석과 사진 업로드

시작하기 전에.. ............................................................................................................................................. 197

7.1 EXIF 분석과 입력값 처리 ........................................................................................................................ 198

7.2 지도에 위치 정보 표시 ............................................................................................................................ 203

7.3 사진 및 데이터 저장 ................................................................................................................................ 213

8장. 포토로그 사진 보여주기

시작하기 전에.. ............................................................................................................................................. 223

8.1 사진 목록 출력 ........................................................................................................................................ 224

8.2 페이징 .................................................................................................................................................... 232

8.3 수정/삭제 ............................................................................................................................................... 236

8.4 검색 ........................................................................................................................................................ 241

8.5 지도에 위치 출력 .................................................................................................................................... 243

목 차

책1.indb 12 2016-05-24 오후 3:13:27

Page 9: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

9장. SNS 연동

시작하기 전에.. ............................................................................................................................................. 249

9.1 트위터 애플리케이션 등록 ...................................................................................................................... 250

Application Details .................................................................................................................................. 253

OAuth Settings........................................................................................................................................ 254

9.2 간단한 트위터 클라이언트 만들기 ........................................................................................................... 257

9.3 트위터 연동 모듈 개발 ............................................................................................................................ 260

9.4 트윗 결과 메시지 출력 ............................................................................................................................ 265

9.5 트위터 연동 확인 .................................................................................................................................... 267

PART 03 파이썬 웹 애플리케이션 서비스하기

10장. 아파치로 포토로그 서비스하기

10.1 아파치 웹 서버(Apache HTTP Server) ................................................................................................ 273

10.2 mod_wsgi 확장 모듈 ........................................................................................................................... 274

10.3 아파치와 mod_wsgi 설치 .................................................................................................................... 275

10.4 아파치와 mod_wsgi 설정 .................................................................................................................... 278

10.5 아파치로 포토로그 실행........................................................................................................................ 279

목 차

책1.indb 13 2016-05-24 오후 3:13:27

Page 10: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

11장. 엔진엑스로 포토로그 서비스하기

11.1 엔진엑스 웹 서버(Nginx Web Server) ................................................................................................. 283

11.2 uWSGI 애플리케이션 서버.................................................................................................................. 283

11.3 엔진엑스와 uWSGI 설치 ...................................................................................................................... 284

11.4 엔진엑스와 uWSGI 설정 ...................................................................................................................... 285

11.5 엔진엑스로 포토로그 실행 .................................................................................................................... 288

12장. AWS Elastic Beanstalk로 포토로그 서비스하기

12.1 AWS Elastic Beanstalk........................................................................................................................ 293

12.2 Elastic Beanstalk의 특징 ..................................................................................................................... 293

빠르고 간편한 시작 .................................................................................................................................... 293

개발자 생산성 ........................................................................................................................................... 293

적절한 규모 유지 ....................................................................................................................................... 294

완벽한 리소스 제어 .................................................................................................................................... 294

12.3 Elastic Beanstalk에 파이썬 환경 구성 .................................................................................................. 294

12.4 Beanstalk로 포토로그 실행 .................................................................................................................. 304

Elastic Beanstalk 환경 구성(Environment Configuration)......................................................................... 305

포토로그 업로드 ........................................................................................................................................ 307

목 차

책1.indb 14 2016-05-24 오후 3:13:27

Page 11: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

APPENDIX 01 레디스(Redis) 살펴보기

1.1 개요 ........................................................................................................................................................ 311

1.2 특징 ........................................................................................................................................................ 311

다양한 데이터형(Data Type) ...................................................................................................................... 311

영속성(Persistence) .................................................................................................................................. 312

복제(Replication) ..................................................................................................................................... 314

분할(Partitioning)..................................................................................................................................... 315

만료(Expiration) ....................................................................................................................................... 315

1.3 OS별 설치 .............................................................................................................................................. 315

윈도 ......................................................................................................................................................... 315

맥 OS/리눅스 ............................................................................................................................................ 320

1.4 포토로그 애플리케이션에 적용하기 ........................................................................................................ 322

APPENDIX 02 구글 앱 엔진 사용하기

2.1 개요 ........................................................................................................................................................ 325

2.2 구글 앱 엔진 개발 환경 ........................................................................................................................... 328

2.3 앱 엔진을 위한 플라스크 프로젝트 구성 .................................................................................................. 333

2.4 구글 앱 엔진에 배포하기 ......................................................................................................................... 338

목 차

책1.indb 15 2016-05-24 오후 3:13:28

Page 12: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

파이썬 웹 애플리케이션

시작하기

PART

01

1부에서는 파이썬과 플라스크로 웹 애플리케이션 개발을 시작하기 전

에 알아야 할 개념적인 내용과 개발 환경을 구축하는 방법을 살펴보고

간단한 예제를 이용해 플라스크의 작동 방식을 살펴보겠다. 1부의 마지

막 장인 4장에서는 플라스크와 함께 배포되는 미니 트윗(minitwit) 애

플리케이션을 분석해 보며 플라스크에 대한 이해를 높일 것이다.

책1.indb 16 2016-05-24 오후 3:13:28

Page 13: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

Chapter 01. 파이썬과 웹 애플리케이션

Chapter 02. 개발 환경 설정

Chapter 03. 플라스크 시작하기

Chapter 04. 작은 트위터, 미니 트윗(minitwit)

책1.indb 17 2016-05-24 오후 3:13:28

Page 14: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

파이썬과

웹 애플리케이션

1장

새롭고 다양한 인터넷 서비스가 하루가 멀다 하고 수없이 만들어지고 있다. 이러한 서비스 대부분은 사용자와 만나는

지점에 웹 애플리케이션을 배치하고 있다. 결국, 웹 애플리케이션은 백 엔드(back-end)에 어떠한 시스템이 존재하든

지 사용자에게는 가장 중요한 것이 되어버렸다. 이 책에서는 파이썬에 관심 있는 개발자를 대상으로, 특유의 간편함과

편리함으로 개발자들에게 사랑받고 있는 웹 개발 프레임워크인 플라스크(Flask)를 이용한 웹 애플리케이션 개발 방법

을 알아볼 것이다. 본격적으로 시작하기 전에 파이썬과 웹 애플리케이션의 구성 및 개발 방식을 가볍게 살펴보자.

책1.indb 18 2016-05-24 오후 3:13:28

Page 15: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 19

1.1 파이썬

세상에는 수많은 프로그래밍 언어가 개발되고

있다. 다양한 언어들은 같은 문제를 저마다의 방

식으로 풀어낸다. 새로운 언어를 배운다는 것은

어쩌면 새로운 문제 해결 방법을 배우는 것으로

볼 수 있고, 이는 생각의 너비를 확장하여 기존의 틀을 깨는 지렛대가 될 수 있다. 필자가 파이썬에 관

심을 두게 된 것도 새로운 언어를 배우면서 새로운 사고방식과 새로운 자극을 얻고 싶었기 때문이었다.

파이썬(http://www.python.org/)은 세상에 발표된 지 20년이 넘었기 때문에 이미 폭넓은 분야에

서 많은 사람이 다양하게 사용하고 있다.

국내에서는 주로 프로토타입을 개발할 때 사용하거나, 몇몇 스타트업(Start-Up ) 벤처 기업에서만 프

로젝트에 사용하고 있는 정도다. 웹 애플리케이션 분야에서는 자바 기반의 스프링(Spring ) 프레임워

크의 수요가 가장 많으며, 대부분 개발이 스프링 프레임워크로 이뤄지고 있다. 하지만 스프링 프레임

워크는 막강한 확장성과 기능적 장점에 상응하는 DI (Dependency Injection )1, AOP (Aspective

Oriented Programming )2 등 초보자가 이해하기에는 다소 복잡한 개념의 기술적 진입 장벽이 있으

며, 초보자가 스스로 환경을 구축하는 것도 처음에는 쉽지 않은 편이다. 반면, 파이썬 기반의 마이크로

웹 프레임워크를 이용한 웹 개발은 상대적으로 직관적이며, 쉽게 이해할 수 있는 장점이 있기 때문에

파이썬을 사용하면 복잡하지 않은 구성으로 원하는 결과를 얻을 수 있을 것이다.

파이썬을 처음 접할 때 자주 보게 되는 문구가 있다. “Life is too short, You need Python.” 파이썬

의 간결함과 편리함을 직관적으로 나타내주는 문구다(혹자는 짧은 인생을, 컴퓨터에만 매달려 있지 말

고 더 가치 있는 일에 몰두하라는 뜻으로 “Life is too short, You don’t need python”으로 변경해

서 사용하기도 한다). 파이썬은 1991년에 귀도 반 로썸(Guido van Rossum )이 개발한 고급 프로그

래밍 언어로 프로그래머가 바로 사용할 수 있는 라이브러리들과 통합 환경을 함께 제공하는 “Battery

Included” 개념을 기본으로 하고 있다. 이 같은 장점이 다양한 사용자층을 확보할 수 있는 기반이 되

었고, 사용자층이 다양한 덕분에 유용한 라이브러리 또한 더욱 풍부해졌다. 최초의 파이썬 버전은 매킨

토시용으로 개발됐지만, 현재는 플랫폼 독립적인 언어로 어느 플랫폼에서든 사용할 수 있다.

1 DI: 프로그램 구성 요소들 사이의 의존성을 줄여 결합도를 낮추기 위한 방법 중 하나로 소스코드에서의 의존성을 외부의 설정 파일 등을 이용해 해결

하도록 하는 방법이다. 이로써 의존 객체의 변경과 단위 테스트가 쉬워지며 코드 가독성, 재사용성 등이 높아진다.

2 AOP: 기존 OOP의 단점을 보완하기 위한 하나의 도구로 핵심 로직(core concern)에 대한 영향을 최소화하고 공통 모듈(cross-cutting)을 효과

적으로 주입할 수 있도록 개발하는 방법이다.

책1.indb 19 2016-05-24 오후 3:13:29

Page 16: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

20 PART 01 _ 파이썬 웹 애플리케이션 시작하기

[그림 1-1] 파이썬의 매력을 단적으로 보여주는 그림3

파이썬의 장점을 이야기할 때 항상 ‘쉽고 재밌다’는 점이 강조된다. ‘성당과 시장(The Cathedral and

the Bazaar )’4이라는 논문으로 유명한 에릭 레이몬드(Eric S. Raymond )는 하루 만에 파이썬을 배

워서 원하는 프로그램을 짤 수 있었다고 한다. 물론 파이썬 자체가 직관적이고 간결하므로 가능한 일이

었을 것이다. 파이썬을 시작하는 데 있어서 프로그래밍 경험이 없다 하더라도 크게 걱정할 필요는 없

다. 인터넷 검색으로 파이썬과 관련된 수많은 기초 강좌를 만날 수 있으며 이러한 문서만 살펴봐도 기

본적인 지식을 익히는 데 충분하다.

NOTE

파이썬의 인기가 하루가 다르게 높아지고 있다. 파이썬의 인기를 반영이라도 하듯이 인터넷을 통해 파이썬 입문자를 위한 양

질의 자료가 다양하게 만들어졌고 무료로 공개돼 있다. 파이썬에 관해 아직 잘 모르는 독자라면 아래의 자료들을 먼저 살펴보

자. 파이썬에 친숙해질 수 있게 도와 줄 것이다.

3 그림 출처: http://sudharsh.wordpress.com/2009/05/11/why-python/

4 성당과 시장(1997): 오픈소스 소프트웨어 개발 방식을 성당모델(주로 GNU)과, 시장모델(리눅스)로 정의하고 ‘보는 눈이 많을수록 문제는 쉽게 해결

된다’는 리누스의 법칙을 설명한 논문. 이 논문에서 기존의 자유소프트웨어(Free Software)가 아닌 오픈소스 SW라는 말이 처음으로 사용됐으며, 이

논문의 영향으로 네스케이프 네비게이터의 소스코드가 공개되고 현재의 파이어폭스(Firefox) 프로젝트로 발전할 수 있었다.

책1.indb 20 2016-05-24 오후 3:13:29

Page 17: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 21

•바이트오브파이썬(ByteofPython )

많은 외국 대학교에서 교재로도 사용되는 훌륭한 입문서이며 박정빈님께서 번역해 주셔서 한국어로 볼 수 있다

(http ://byteofpython-korean.sourceforge.net/byte_of_python.html ).

•점프투파이썬(Jump to Python )

박응용님의 점프 투 파이썬은 2001년 9월부터 국내의 많은 파이썬 사용자들을 입문시킨 유명한 온라인/오프라인 책

으로 인터넷에 무료로 공개돼 있으며 ebook으로도 구매할 수 있다(https ://wikidocs.net/book/1 ).

•코드아카데미파이썬강좌(Codeacademy | Python )

코드아카데미는 인터넷으로 코딩을 배울 수 있는 웹사이트다. 코드아카데미의 인기 강좌인 파이썬 강좌가 한글화되

어 웹사이트에 코드를 집적 입력해 보면서 파이썬을 배울 수 있다(https ://www.codecademy.com/ko/tracks/

python-ko ).

파이썬에 대해 흔히 이야기하는 특징이라면 ‘쉽고, 재밌다’는 이야기로 수렴하지만 좀 더 자세히 알아볼

필요가 있다. 파이썬은 다음과 같은 특징이 있다.

• 인터프리터 기반의 객체 지향(Object-oriented ) 프로그래밍 언어

• 플랫폼 독립적인 언어(Platform Independent )

• 유연한 확장(Extendible )

• 동적 타이핑(Dynamic Typing )

• 리플렉션(Reflection )

인터프리터기반의객체지향(Object-oriented)프로그래밍언어

파이썬은 바이트 코드(byte code )의 컴파일을 지원하는 동적 인터프리팅 언어다. 즉, 파이썬 인터

프리터는 사용자가 모르는 사이에 바이트 코드(byte code )를 생성하여 해당 코드를 실행할 때 더 빠

른 속도로 실행할 수 있다. 이 인터프리터 덕분에 파이썬 프로그램은 파이썬 쉘(Shell )에서 대화모드

(interpreter mode )로 코드를 테스트하면서 작성할 수 있다. 파이썬 바이트 코드는 플랫폼에 독립적

이므로 다른 하드웨어나 소프트웨어 플랫폼에서 다시 컴파일할 필요 없이 수행된다. 예를 들면, 자바와

마찬가지로 네트워크 응용 프로그램에서 원격 컴퓨터의 바이트 코드를 전송받아 동적으로 실행할 수

있다. 또한, 파이썬은 객체 지향 클래스 구조와 다중 상속 및 지연된 결합(late binding ) 기능을 지원

하는 객체 지향 프로그래밍 언어다.

플랫폼독립적인언어(PlatformIndependent)

파이썬은 다음 플랫폼에서 모두 작동하는 플랫폼 독립적인 언어다.

• 애플 매킨토시(맥 OS 10 이후 포함됨)

• 마이크로소프트 윈도

책1.indb 21 2016-05-24 오후 3:13:29

Page 18: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

22 PART 01 _ 파이썬 웹 애플리케이션 시작하기

• 각종 유닉스

• 리눅스

• 팜(Palm ) OS

• 노키아 시리즈 60, maemo

• 안드로이드(Android )

• 라즈베리 파이(Raspberry Pi )5

여러분의 파이썬 코드는 위 환경에서 모두 실행할 수 있다(그리고 아마도 위 환경과 다를지라도 말

이다).

유연한확장(Extendible)

파이썬은 외부의 프로그래밍 라이브러리로 쉽게 확장할 수 있으며 컴파일된 확장 모듈을 이용하면 새

로운 데이터 타입으로도 확장할 수 있다. 컴파일된 새로운 모듈을 추가하는 방법은 어렵지 않다. 대부

분 플랫폼에서 새롭게 컴파일된 모듈을 파이썬 인터프리터 내부로 동적 로딩(loading )할 수 있다. 또

한, 파이썬은 C언어뿐 아니라 다양한 언어를 이용해 모듈화할 수 있다.

동적타이핑(DynamicTyping)

파이썬은 루비(Ruby ), 자바스크립트(JavaScript ), PHP 등과 같이 동적 타이핑(dynamic typing )

방식을 사용한다. 동적 타이핑은 전통적인 C/C++나 자바처럼 컴파일할 때 타입을 검사하는 정적 타이

핑(static typing )과는 달리 프로그램을 실행할 때 타입 검사를 수행한다. 동적 타이핑은 개발 시점에

는 그 편리함 때문에 생산성이 더 높아질 수 있지만, 버그가 발생했을 때에는 디버그 속도의 저하를 가

져올 수도 있다. 즉, 자료형이 실행 시에 명확해지므로 겉보기에는 문법적 오류가 없어 보여도 실행 시

발생하는 오류 때문에 실행 중인 프로그램이 강제로 종료될 수도 있으므로 주의가 필요하다.

리플렉션(Reflection)

파이썬은 모듈, 클래스, 객체와 같은 언어적 요소에 접근할 수 있는 리플렉션(reflection )을 지원한

다. 리플렉션을 이용해서 프로그램이 자기 자신의 모듈, 클래스, 객체 등을 조사하고 행위(behavior )

5 라즈베리파이: 영국의 라즈베리파이재단이 학교에서 기초 컴퓨터과학교육을 증진 시키기 위해 만든 싱글 보드 컴퓨터이며, 많은 매니아층을 형성하고

있다.

책1.indb 22 2016-05-24 오후 3:13:30

Page 19: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

와 구조를 관리할 수 있다. 이러한 기술을 조금 더 구체적으로는 인트로스펙션(introspection )이라고

하는데, 특정 클래스가 어떤 클래스로부터 파생됐는지, 혹은 어떤 함수가 구현되어 있는지 객체에 어떤

속성이 있는지에 대한 상세한 정보를 런타임에 얻거나 조작하는 기술을 뜻한다. 이러한 특징 덕분에 파

이썬은 실행 시점에 프로그램의 내부 속성 정보(properties )를 조작할 수 있다.

앞에서 파이썬의 주요 특징을 살펴봤다. 여기에 몇 가지 특징을 추가로 이야기해보려 한다. 파이썬은

그 태생 자체가 교육을 목적으로 설계됐으므로 파이썬 커뮤니티는 가독성 높은 코드를 중요시한다. 들

여쓰기(indentation )로 코드 블록을 구분하는 것은 다른 언어에서는 찾아보기 어려운 구조다. 이러

한 구조도 같은 관점에서 나온 것으로 볼 수 있다. 일반적으로 인터프리터 언어는 정적인 언어보다 속

도가 느리다고 여겨지고 있으나, 최근의 인터프리터 기반 언어는 여러 가지 방법을 고안하여 속도를 개

선할 수 있는 다양한 방법을 제공하고 있다. 더욱이 최근의 파이썬 인터프리터는 사용자가 모르는 사이

에 바이트코드를 생성하여 다음에 해당 코드가 실행될 때 더 빠른 속도로 실행할 수 있으며, 정말로 속

도가 중요한 모듈은 전통적으로 빠른 C언어를 이용해 별도의 모듈로 만들어 사용할 수도 있다.

1.2 웹 애플리케이션 개발 동향

1995년 HTML 2.0 발표 이후로 월드 와이드 웹(World Wide Web )은 우리의 일상에 깊숙이 자

리 잡았다. 2000년대 초반부터는 인터넷과 다양한 IT 서비스가 급속도로 공공재화 되었다. 더욱이

최근 몇 년 동안 스마트폰의 급속한 확산으로 우리는 늘 새로운 서비스와 마주하는 일상을 살고 있

다. 또한, 스마트폰과 태블릿PC 같은 모바일 기반의 컴퓨팅 환경이 점점 강력해지면서 클라우드 컴퓨

팅 기술과의 시너지효과로 장소와 시간에 구애받지 않고 필요할 때 사용할 수 있는 주문형 방식(On-

Demand )으로 이용할 수 있는 인프라 환경을 얻게 됐다. 웹은 이렇게 다양한 서비스의 중심에서 사람

과 정보 그리고 문화를 연결해 주는 매개체가 됐다.

[그림 1-2] 웹 서버의 기본적인 작동방식

책1.indb 23 2016-05-24 오후 3:13:30

Page 20: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

최초의 웹은 단순히 링크로 연결된 HTML 문서를 화면에 구조화하여 보여 주는 것이 목적이었기 때문

에 지금과 같은 다양하고 동적인 웹 서비스는 고려되지 않았다. 따라서 단지 웹 서버로 전달된 특정 요

청을 스크립트나 C언어 같은 외부 프로그램을 호출하여 실행된 결과를 표준 출력(standard-out )으

로 돌려받는 CGI 형태의 개발 방식만으로도 충분히 사용자를 만족시킬 수 있었다.

[그림 1-3] 초기의 웹 서비스 구성

인터넷 사용자가 기하급수적으로 증가하면서 사용자의 요구 사항도 복잡해졌다. 이에 대응하는 다양한

방식의 서비스가 만들어지면서 이를 지원하기 위한 웹 개발 방법론과 웹 개발 프레임워크 등이 등장했

다. 기존의 개발 방식을 모델1 (Model 1 )이라 하고 MVC (Model-View-Control ) 패턴을 도입한

개발 방식을 모델2라 부르며 모델 2는 널리 사용되면서 큰 인기를 얻었고, 지금까지도 웹 애플리케이

션 개발의 주요 개념이 되었다.

[그림 1-4] MVC 계층이 분리된 모델 2 개발 방식

책1.indb 24 2016-05-24 오후 3:13:30

Page 21: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 25

2003년부터 대두되었던 WEB 2.0의 개념은 상당한 인기를 얻었고, 각 기업은 저마다 OpenAPI를

공개하여 사용자가 여러 OpenAPI를 이용해 다양한 정보를 모으거나 혼합하여 새로운 서비스를 만들

수 있는 환경을 제공했다. 그 결과 매쉬업(Mesh-up ) 형태의 다양한 웹 애플리케이션이 만들어졌다.

또한, 기업에서는 엔터프라이즈 환경을 서버/클라이언트의 레거시(legacy ) 시스템에서 웹 기반 시스

템으로 전환하기 시작했고, 이를 지원하기 위한 많은 리치 인터넷 애플리케이션(RIA:Rich Internet

Application ) 기술이 등장했다.

[그림 1-5] AJAX와 OpenAPI 기반의 웹 애플리케이션

특히 AJAX (Asynchronous JavaScript and XML )를 이용하면 HTML 문서에서 새로운 정보를 업

데이트하기 위해 전체 문서를 다시 요청하여 브라우저에서 다시 렌더링해야 했던 한계를 벗어나 동적

으로 필요한 정보만 업데이트할 수 있게 되면서 웹 서비스는 더욱 세련된 모습이 되었다.

책1.indb 25 2016-05-24 오후 3:13:31

Page 22: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

26 PART 01 _ 파이썬 웹 애플리케이션 시작하기

[그림 1-6] RESTful 웹 서비스

웹 2.0 서비스의 폭발적인 유행으로 SOAP (웹 서비스에 접근하기 위한 가장 유명한 프로토콜로 XML

을 이용해 데이터를 전송한다) 서비스보다 RESTful 웹 서비스가 주목받기 시작했다. RESTful 웹

서비스는 ROA (Resource Oriented Architecture )라고도 불리며, 엄격한 의미로는 네트워크 아

키텍처 원리의 모음을 뜻한다. RESTful 웹 서비스란 HTTP와 REST (Representational State

Transfer )의 원리를 사용해 구현된 간단한 웹 서비스로 정의할 수 있다. 요즘에는 OpenAPI와

RESTful 웹 서비스를 제공하는 다양한 서비스를 주변에서 손쉽게 찾아볼 수 있다. 또한, HTML5에서

는 클라이언트인 사용자 브라우저에서도 로컬스토리지(localstorage )를 사용할 수 있게 되면서 오프

라인에서 비동기 방식으로 데이터를 저장할 수도 있고, 덕분에 더욱 다양한 서비스가 나오고 있다. 현

재의 웹은 우리 시대의 사람과 정보와 기술을 연결해 주는 일종의 허브와 같은 역할을 한다. 최근 종종

접할 수 있는 웹 3.0에 대해 관심을 두고 살펴보면 웹이 앞으로 어떻게 발전할지를 예측할 수 있을 것

이다.

NOTE

REST는 ROA를 따르는 웹 서비스의 설계 표준으로 볼 수 있다. RESTful 웹서비스는 잘 정의된 Cool URI를 이용해 리소

스를 표현한다. 기존의 무분별한 GET 파라미터가 무자비하게 사용된 형식이 아니라 마치 잘 정의된 계층 구조를 가진 객체에

접근하는 방식처럼 리소스에 접근하는 방식이다. REST에는 다음과 같은 특징이 있다.

책1.indb 26 2016-05-24 오후 3:13:31

Page 23: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 27

• 웹의 모든 리소스는 URI로 표현하고 접근할 수 있어야 한다.

• 모든 리소스는 구조적이고 유기적으로 연결할 수 있다.

• 비상태 지향적인 방법을 따른다.

• 정해진 메서드(HTTP Method )만을 사용해 리소스를 사용하는 아키텍처다.

위 REST의 특징은 주소로 표현 가능(Addressabili lty ) , 연결됨(Connectedness ) , 상태 정보를 갖지 않음

(Statelessness ), 동일 인터페이스(Homogeneous Interface )와 같은 REST의 속성에서 기인한다.

1.3 풀 스택 프레임워크 vs. 마이크로 프레임워크

기존의 웹 개발 프레임워크는 주로 웹 개발에 관련된 모든 기능을 제공하는 풀 스택 프레임워크(Full-

Stack Framework )를 지향했다. 자바에서는 스프링 프레임워크가 대표적인 풀 스택 프레임워크이

고, 파이썬에서는 장고(Django )6, 루비(Ruby )에서는 레일즈(Rails )7가 대표적인 풀 스택 프레임

워크다. 이러한 풀 스택 프레임워크는 기본적으로 다음과 같은 기능을 모두 지원하고 있다.

• 요청 / 응답 추상화

• 세션 상태 관리

• 사용자 인증과 권한 관리

• 웹페이지 템플릿 기능

• URL 매핑 기능

• 데이터베이스 접근 기능

• 보안 기능

• 캐시 기능

• 데이터 접근 추상화

• 기타

6 장고: 개발 당시 개발자가 좋아하던 기타리스트의 이름을 딴 프레임워크이다. 장고의 공식홈페이지에는 마감을 완벽히 지킬 수 있는 프레임워크라는

인상적인 문구가 쓰여져 있다. https://www.djangoproject.com/

7 레일즈: 흔히 RoR(루비온레일즈)라고 불리며, 루비로 작성된 MVC 프레임워크다. ALL in One 프레임워크를 지향하며 데이터베이스의 CRUD 작

업을 단순화한 액티브 레코드(Active Record)는 생산성을 높이는 데 큰 역할을 한다.

책1.indb 27 2016-05-24 오후 3:13:31

Page 24: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

28 PART 01 _ 파이썬 웹 애플리케이션 시작하기

일반적으로 지원하는 기능이 많으면 많을수록 프레임워크 자체에 대한 학습 곡선(learning curve )이

길어질 수밖에 없고, 어느덧 한 프레임워크에 익숙해질 때면 바로 다른 프레임워크로 개발 환경을 바꾸

는 일이 생길지도 모를 일이다. 게다가 최근에는 웹 개발 환경이 다변화되면서 하나의 웹 서비스를 구

축하는 데에도 수많은 단위 프레임워크와 친해지지 않으면 일이 어려워진다. 최근 이러한 프레임워크

의 복잡도(Complexity )를 낮추고 웹 개발에 집중할 수 있는 것을 목표로 하는 자바 진영의 플레이

프레임워크(Play! Framework )는 기존의 자바 프레임워크가 서블릿(Servlet ) 인터페이스에 기반을

두고 구현됐던 불문율을 깨고 복잡함을 탈피하기 위해 과감히 서블릿을 배제하기도 했다(하지만 서블

릿 환경으로 배포할 수 있게 변환 도구를 지원한다).

반면, 마이크로 웹 개발 프레임워크는 웹 개발에 필요한 최소한의 기능만 제공한다. 나머지 기능은 자

신이 원하는 다른 라이브러리나 프레임워크를 확장해 사용하며 프레임워크에서 상대적으로 제약하는

부분이 적기 때문에 기본적으로 웹 프로그래밍하는 느낌보다는 그 언어의 일반 애플리케이션을 개발하

는 느낌이 든다. 마이크로 프레임워크는 제공하는 기능이 단순하고 범위가 작으며 유연하다 보니 당연

히 상대적으로 학습 시간이 더 짧고 그 언어에 익숙한 사람이면 손쉽게 웹 프로그래밍을 시작할 수 있

을 만큼 직관적이다. 마이크로 프레임워크의 캐치프레이즈는 “신속하게 최소한의 노력으로 웹 애플리

케이션을 개발하자.”다.

웹 개발 환경의 복잡도가 날이 갈수록 높아지고 있는 요즘 자바를 이용해 웹 서비스를 개발한다는 것은

자바 진영의 온갖 프레임워크에 대한 이해가 필요함을 뜻하게 됐다. 초급 개발자에게 이는 마치 가시밭

길을 가는 것과 같은 좌절감을 안겨준다. 하나의 웹 서비스를 개발하기 위해 여러 개의 복잡한 프레임

워크를 설정하는 것만 해도 결코 만만치 않은 작업이 됐다. 이른바 길고 긴 삽질의 시간을 거쳐 그 터널

을 빠져나오면 이제 또 새로운 프레임워크가 등장하여 개발자를 혼란스럽게 만든다. 이런 상황에서 마

이크로 프레임워크의 등장은 상당히 신선하다. 복잡한 설정이 필요 없으며 직관적인 코드로 내가 원하

는 웹 서비스를 구현할 수 있는 마이크로 프레임워크는 충분히 매력적이다.

1.4 대표적인 마이크로 프레임워크

모든 것에는 원조가 있기 마련! 마이크로 웹 프레임워크도 예외는 아니다. 마이크로 웹 프레임워크의

원조는 루비로 개발된 시나트라(Sinatra )다. 시나트라와 시나트라로부터 영감을 얻어서 만들어진 마

이크로 웹 프레임워크를 살펴보자.

책1.indb 28 2016-05-24 오후 3:13:32

Page 25: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 29

시나트라(루비)

시나트라(http://www.sinatrarb.com/)는 말 그

대로 유명한 가수 프랭크 시나트라(Frank Sinatra )

의 이름을 따왔다. 시나트라는 오픈소스 소프트웨어

웹 개발 프레임워크로 루비 온 레일즈, 머브(Merb ), 니트로(Nitro ), 캠핑(Camping ), 그리고 랑고

(Rango )같은 다른 루비 웹 개발 프레임워크에 대한 대안으로 개발됐다.

시나트라는 블레이크 미제러니(Blake Mizerany )가 설계 및 개발했으며 루비 온 레일즈같은 다른 프

레임워크에서 즐겨 사용하는 전형적인 모델-뷰-컨트롤러 패턴을 따르지 않는다. 대신, 시나트라는

“루비에서 최소한의 노력으로 웹 응용 프로그램을 신속하게 만드는 것”을 목표로 하고 있다.

시나트라로부터 영감을 얻은 마이크로 프레임워크는 다음과 같이 다양하다.

• Ruby : Almost Sinatra, Astaire, Cuba, Padrino (based on Sinatra ), Pakyow, [12]Renee, Scorched

• PHP : Fat-Free Framework, Fitzgerald, Glue, klein, Laravel, Limonade, MiMViC, Silex, Slim

• JavaScript : Express, Picard, Roundabout, Sammy

• CoffeeScript : Zappa

• Python : Bottle, Denied (was an April Fools joke ), Flask, itty, Juno

• Erlang : Fresh, Spooky

• Groovy : Graffiti, Ratpack

• Scala : Finatra, Scalatra, BlueEyes

• .NET : Martin, Nancy, Nina

• Perl : Dancer, Mojolicious

• Java : Spark, Napalm, Htmleasy

• Haskell : Bird, Miku, Scotty

• Fancy : Sinatra.fy

• Bash : Astley, sh.inatra

• C : Bogart

• F#: Frank

• Lua : Mercury, Orbit

• Mirah : Shatner

• Objective-C : RCRouter

• Vala : Val

책1.indb 29 2016-05-24 오후 3:13:32

Page 26: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

30 PART 01 _ 파이썬 웹 애플리케이션 시작하기

스칼라트라(Scalatra,Scala)

이름에서부터 루비의 시나트라에서 영감을 받았다는 것을 알 수

있다. 스칼라트라(http://www.scalatra.org/)는 최근 주목받

고 있는 함수형 프로그래밍 언어인 스칼라(http://www.scala-

lang.org/)로 작성된 오픈소스 마이크로 프레임워크이며, 리프

트(http://liftweb.net/), 플레이 프레임워크(http://www.

playframework.com/), 그리고 언필터드 프레임워크(http://unfiltered.lessis.me/)의 대안으로

볼 수 있다. 다른 마이크로 프레임워크처럼 학습 곡선을 가능한 한 최소화하고 애자일리티(agility )를

확보하기 위해 개발된 프레임워크다.

보틀(Bottle,파이썬)

보틀(http://bottlepy.org/)은 뒤에서 소개할 플라스크(Flask )와

더불어 대표적인 WSGI (Web Server Gateway Interface ) 기반의

파이썬 마이크로 웹 프레임워크다. 보틀의 가장 큰 특징은 단지 하나의

파이썬 파일로 이뤄져 있다는 것이다. 즉, 보틀은 하나의 파일 모듈로 배포되고 파이썬 표준 라이브러

리 이외에는 전혀 의존성이 없는 구조다. 마이크로 프레임워크를 자세히 공부해보고 싶다면 먼저 보틀

의 소스코드를 공략해보는 것이 좋을 것 같다. 보틀의 특징은 다음과 같다.

• 라우팅: 동적 URL에 대한 지원 기능(Request Function Call Mapping )

• 템플릿: 빠른 속도의 내장 템플릿 엔진(pythonic ), mako, jinja2와 cheetah 템플릿 지원.

• 유틸리티: 폼 데이터, 파일 업로드, 쿠키, 헤더 및 기타 HTTP 관련 메타 데이터에 편리한 액세스 지원.

• 서버: 내장 HTTP 서버, fapws3, bjoern, Google AppEngine, cherrypy 또는 다른 WSGI 를 지원하는 HTTP

서버

• BSD와 유사한 라이선스

위에서 간략하게 살펴봤지만, 마이크로 프레임워크는 확실히 풀 스택 프레임워크보다 배우기 쉬우므로

초기 개발 생산성이 높다. 하지만 모든 경우에 적용할 수 있는 해결책이라고는 할 수 없다. 어떠한 서비

스 영역에 어떻게 사용해야 유리할지는 지속적인 실험으로 체득하는 수밖에 없을 것이다. 또한, 풀 스

택 프레임워크와 다르게 All-in-One을 지향하고 있지 않으므로 별도의 라이브러리나 도구와 친해져

야 할 수도 있다. 반대로 이미 잘 사용하고 있는 도구와 라이브러리가 있다면 어렵지 않게 마이크로 웹

프레임워크 개발 환경으로 통합할 수 있을 것이다. 마이크로 프레임워크는 대부분 쉽고 재미있다. 이점

책1.indb 30 2016-05-24 오후 3:13:33

Page 27: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 31

은 사용자 입장에서 가장 강력한 무기가 되므로 마이크로 프레임워크를 이용해 여러 가지 서비스를 직

접 개발해 본다면 많은 즐거움을 얻을 수 있을 것이다.

1.5 플라스크(Flask)

플라스크는 이 책에서 중점적으로 살펴볼 파이썬 기반의 마이크로 프레임워크다. 이 책에서 다루게 될

다양한 플라스크 애플리케이션 예제들을 자세히 살펴보기 전에 간단하게 플라스크에 대해서 알아보자.

플라스크의 공식 홈페이지는 http://flask.pocoo.org/다. 이 홈페이지에서 플라스크의 공식 가이드

문서와 코드 스니펫(snippet )8 등을 확인할 수 있으며, 플라스크의 확장(extension )기능 패키지를

살펴보고 내려받을 수 있다. 플라스크 역시 루비의 시나트라의 영향을 받아 만들어진 마이크로 웹 프레

임워크다. 플라스크에서는 마이크로의 뜻을 다음과 같이 정의하고 있다.

“마이크로는 여러분의 웹 애플리케이션이 하나의 파이썬 파일로 개발해야 한다는 걸 말하는 게 아니며, 기능적으로 부족하다

는 걸 의미하지도 않는다”

플라스크에서 이야기하는 마이크로 프레임워크의 “마이크로”는 핵심기능만 간결하게 유지하면서, 필

요한 기능을 손쉽게 확장할 수 있게 하는 것을 목적으로 한다. 플라스크에 대해 좀 더 살펴보자.

플라스크는 다양한 파이썬 도구를 오픈소스로 만들어 파이

썬 커뮤니티에 많은 공헌을 하고 있는 아민 로나처(Armin

Ronacher )가 개발했다

플라스크는 2010년 4월 1일, 만우절에 최초 릴리즈 되

었으며 2016년 3월 현재 0.10.1 버전이 최신 안정화 버전으로 깃허브(https://github.com/

mitsuhiko/flask )에서 소스코드를 내려받을 수 있다. 플라스크는 파이썬 2 .x 버전에서 작동하도록

개발됐었지만, 현재는 파이썬 3 .x 에서 작동할 수 있게 저 수준 API가 모두 변경돼 있다.

• 개발자: 아민 로나처(Armin Ronacher )

• 최초 릴리즈: 2010.04.01

• 최신 안정화 버전: v0.10.1

• 운영체제: 파이썬이 작동하는 모든 운영체제에서 가능

8 스니펫: 개발 시 재사용을 위해 참고하려고 특정 기능을 구현해 둔 코드 블록

책1.indb 31 2016-05-24 오후 3:13:33

Page 28: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

32 PART 01 _ 파이썬 웹 애플리케이션 시작하기

• 오픈소스 라이선스: BSD

• 웹사이트: http ://flask.pocoo.org/

• 깃허브 주소: https ://github.com/mitsuhiko/flask

플라스크를 사용하고 있는 대표적인 웹사이트

• Disqus (http ://disqus.com/)

• Pinterest (https ://www.pinterest.com/)

• Twilio (https ://www.twilio.com/)

그 밖에 플라스크를 사용하고 있는 웹사이트에 대한 더 많은 정보를 얻고 싶다면 플라스크의 공식 웹사

이트에서 손쉽게 확인할 수 있다( http://flask.pocoo.org/community/poweredby/ 참고).

플라스크의특징

플라스크는 기본적으로 WSGI 구현체인 벡자이크(Werkzeug )9와 템플릿 엔진인 신사2 (Jinja2 )10

로 구성됐다. WSGI (Web Server Gateway Interface )는 일종의 애플리케이션 컨테이너 역할을 정

의한 파이썬 표준(PEP-333 )이며, HTTP로 요청을 받아 응답하는 애플리케이션에 대한 규격이다.

플라스크는 앞서 설명한 보틀과 함께 대표적인 파이썬 마이크로 프레임워크로 불리고 있으며, 간단한

코어(core ) 엔진을 제공하지만 쉽게 확장하여 사용할 수 있게 여러 가지 확장 기능을 지원한다. 플라

스크는 복잡한 설정이 필요 없으며 직관적으로 웹 서비스를 개발할 수 있도록 도와준다.

플라스크가 지원하는 기능은 다음과 같다.

• 개발용 서버와 디버거 내장

• 단위테스트와 통합 지원

• RESTful 요청 처리

• 신사2 (Jinja2 ) 템플릿 엔진 내장(JADE등 다른 템플릿 엔진 사용 가능)

• 안전한 쿠키(secure cookie ) 지원

• 100% WSGI 1.0 호환

9 벡자이크: 도구라는 뜻의 독일어로 플라스크에서 사용하는 WSGI(Web Server Gateway Interface) 미들웨어다. 플라스크의 개발자인 아민 로

나처가 개발했다.

10 신사2: 장고 프레임워크의 템플릿엔진과 비슷한 파이썬 템플릿엔진이다. 텍스트 기반의 템플릿 언어를 지원한다. Jinja 역시 플라스크의 개발자인

아민 로나처가 개발했다.

책1.indb 32 2016-05-24 오후 3:13:33

Page 29: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

1장 _ 파이썬과 웹 애플리케이션 33

• 유니코드 기반

• 광범위한 문서 제공

• 구글 앱 엔진 호환

• 원하는 기능을 추가하여 확장 가능

플라스크웹애플리케이션살펴보기

플라스크의 동작 방식을 살펴보고 이해하기 위해서 ‘Hello World!’를 만들어 보는 것 역시 좋은 방법

이다. 플라스크에서 ‘Hello World’는 다음과 같이 만들 수 있다.

ch01/hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

return "<h1>Hello World!</h1>"

if __name__ == "__main__":

app.run()

Hello World를 작성하는데 위의 일곱 줄이면 충분하다!

• Flask 모듈을 임포트한다

• Flask 객체를 app에 할당한다.

• app 객체를 이용해 라우팅 경로를 설정한다.

• 해당 라우팅 경로로 요청이 올 때 실행할 함수를 작성한다.

• 메인 모듈로 실행될 때 플라스크 서버를 구동한다.

플라스크의 사용법도 어렵지 않으므로 쉽게 배울 수 있다. 앞으로 플라스크로 웹 애플리케이션을 개발

하는 방법을 자세히 알아볼 것이다.

책1.indb 33 2016-05-24 오후 3:13:34

Page 30: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

개발 환경

설정

2장

이번 장에서는 본격적인 내용에 들어가기에 앞서 플라스크 기반의 파이썬 웹 애플리케이션을 개발하는 데 필요한 기

본적인 개발 환경을 설정한다. 2부의 예제 프로젝트를 개발하는 데 추가로 필요한 라이브러리와 3부 운영 환경의 구

성에 필요한 소프트웨어의 설치는 해당 내용을 다룰 때 언급하겠다.

책1.indb 34 2016-05-24 오후 3:13:34

Page 31: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

2장 _ 개발 환경 설정 35

2.1 설치 개요

파이썬으로 웹 애플리케이션을 개발하려면 기본적으로 파이썬과 플라스크가 필요하다. 그리고 소스코

드 작성과 테스트를 도와줄 도구가 필요하다. IDLE이나 VI처럼 기본 기능에 충실한 에디터부터 다양

한 기능을 포함하고 있는 통합 개발 환경(IDE )까지 파이썬 개발 도구는 다양하다. 이 책에서는 국내

개발자에게 가장 친숙한 개발 도구인 이클립스(Eclipse )를 설치하고 파이썬 개발 환경을 지원하는 플

러그인을 설치하는 방법을 알아볼 것이다. 이 장의 뒷부분에서는 그 밖의 파이썬 개발 도구에 관해 간

단히 알아보겠다. 이번 장에서 설치할 소프트웨어 목록은 다음과 같다.

구분 소프트웨어 Prerequisite 비고

개발언어 파이썬 3.5.1 Visual Studio 2015용 Visual

C++ 재배포 가능 패키지

MS 윈도 환경에서 파이썬을 설치할 때 오류가 발생하면

설치

프레임워크 플라스크 0.10.1 virtualenv Werkzeug WSGI 툴킷 및 Jinja2 템플릿 엔진 설치

통합개발 환경 이클립스 4. 5 JRE(Java Runtime

Environment) 8

코드명 : 마스 (Mars)

PyDev 이클립스 파이썬 개발 환경을 제공하는 이클립스 플러그인으로 개

발 편의성을 높이기 위한 자동완성기능 등을 제공

위 소프트웨어는 다양한 운영 체제에서 설치할 수 있지만, 여기에서는 32비트 윈도우7을 기준으로 설

명한다.

2.2 파이썬 설치

2016년 01월 현재, 파이썬 2와 3의 최신 버전은 각각 2.7.11 과 3.5.1이다. 플라스크는 0.10 버전부

터 파이썬 2와 3를 모두 지원한다. 흔히 파이썬 2는 파이썬의 현재이고 파이썬 3는 미래라는 이야기를

많이 한다. 파이썬 3가 발표된 지 거의 8년이 지났지만, 파이썬 3와 파이썬 2의 몇 가지 호환성 문제

로 아직까지는 파이썬 2가 널리 사용되고 있다. 하지만 파이썬 2는 파이썬의 현재, 파이썬 3는 파이썬

의 미래라는 이야기처럼 향후 파이썬 2 버전은 사소한 버그 패치를 제외하면 더 이상의 업데이트는 없

을 예정이다. 이를 반영하기라도 한 것처럼 2016년 4월에 릴리즈될 인기있는 리눅스 배포판인 우분투

(Ubuntu )의 LTS (Long Term Support ) 버전 16.04에서는 파이썬 2가 완전히 제거되고 (파이썬 3

만 포함) 배포될 예정이다. 이 책의 초판에서는 예제가 파이썬 2로 작성됐지만 2쇄에서는 파이썬 3로

전환된 예제 코드를 제공하고 있다(파이썬 2를 사용하고 싶다면 “2.5 깃허브(Github ) 저장소 연결”

을 참고해 python3 브랜치 대신 master 브랜치 코드를 사용하면 된다).

책1.indb 35 2016-05-24 오후 3:13:34

Page 32: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

36 PART 01 _ 파이썬 웹 애플리케이션 시작하기

파이썬 3의 최신 버전을 내려받기 위해 파이썬 공식 사이트(http://www.python.org/)에 접속

한 뒤 왼쪽 메뉴에 있는 DOWNLOAD를 눌러 3.5.1 버전을 내려받을 수 있는 페이지로 이동한

다(https://www.python.org/downloads/release/python-351/). 내려받기 페이지에서

Windows x86 executable installer 링크를 클릭해 설치 파일(python-3.5.1.exe )을 내려받는다.

이미 설치된 파이썬 실행 환경이 있다면 그것을 사용해도 된다.

내려받은 설치 파일을 실행하면 다음과 같은 화면이 나온다.

[그림 2-1] 파이썬 사용자 설정

특별한 이유가 없다면 Install Now를 선택해 설치해도 큰 문제는 없지만, 설치 내용을 조금 더 자세히

살펴보기 위해 Customize Installation을 선택한다. 또한, Add Python 3.5 to PATH 항목을 선택

해 파이썬 실행 파일의 경로가 PATH 환경 변수에 추가되게 하자.

책1.indb 36 2016-05-24 오후 3:13:34

Page 33: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발

2장 _ 개발 환경 설정 37

[그림 2-2] 설치 옵션 선택

Customize Installation을 선택하면 [그림 2-2]와 같이 추가 도구를 선택할 수 있다. 두 번째 항목인

pip는 각종 파이썬 라이브러리의 설치를 도와주는 도구로 반드시 설치해야 하는 도구다. pip는 원래

별도로 설치해야 하는 도구였지만 최근의 파이썬 배포본에는 pip가 포함돼 있어서 사용이 한결 편리해

졌다. 특별한 이유가 없다면 모든 기능을 설치하는 게 좋다.

다음으로 파이썬을 설치할 경로를 설정한다. 기본 설치 경로를 사용해도 되지만 편의상 ‘C:\

Python35’로 경로를 지정해 설치한다. 경로를 설정한 다음 Next 버튼을 누른다.

[그림 2-3] 파이썬 설치 경로 설정

책1.indb 37 2016-05-24 오후 3:13:35

Page 34: 파이썬 웹 프로그래밍 (개정증보판) : 플라스크를 이용한 쉽고 빠른 웹 개발