본문 바로가기

Python

[Python] Flask를 활용한 Shortener URL 웹 서비스 만들기- 1

 프로젝트를 시작하기 전에 알아야할 내용들을 먼저 알아봅시다. 간단하게 설명하겠습니다.

 

 

1. 웹 페이지 동작 원리

 

 

※ 웹 프로그램 : 웹 브라우저로 접속해 사용하거나 HTTP 메시지를 보내 원격에서 사용하는 프로그램

Ex) 게시판, 쇼핑몰, 블로그 등

 

사용자가 웹 프로그램이 가지고 있는 자원을 웹 브라우저로 요청하면, 웹 프로그램은 결과를 생성해서 브라우저로 반환합니다.

 

만약, 요청한 자원이 정적 파일(HTML, .jpg 등)이라면 웹 서버가 자원의 위치를 파악해 전달하면 됩니다.

 

즉, 아래와 같은 그림의 요청과 응답이 이루어지게 됩니다.아래 그림은 웹 프로그램이 없을 때, 웹 브라우저와 웹 서버의 통신입니다.

 

웹 프로그램이 없을 때

 

 

 

 

 

그런데 복잡한 기능(동적 데이터 처리)을 가진 웹 프로그램이 포함되면 클라이언트의 요청을 응답하는 일은 조금 달라지게 됩니다. 아래 그림은 웹 프로그램이 포함된 통신 구조입니다.

 

 

웹 프로그램이 있을 때

 

 

 

 

위 그림을 참고하면 웹 프로그램은 사용자가 보낸 요청과 응답을 웹 서버를 경유하여 통신하게 됩니다. 이 때, Web Server 와 Web program 사이에 통신할 수 있는 약속이 필요합니다. 그 약속이 CGI(Common Gateway Interface) 입니다.

 대부분의 프로그램 언어에서 CGI 규약을 다룰 수는 있지만, 웹 프로그램에는 특화되어 있지 않아서 작성과 수정이 편하지는 않습니다. Python 에서도 CGI 모듈이 있어, CGI 표준 입출력에 직접 접근하여 웹 프로그램을 작성할 수 있습니다.

 

 따라서 Python 언어로 Web Server 와 Web Program간의 통신이 가능합니다. 다만 CGI는 너무 느리고 제한 사항도 많습니다.

 

 이에 대체해서 나온 것이 바로 WSGI(Python Web Server Gateway Interface) 입니다. 현재 WSGI 가 Python 으로 웹을 개발하기 위한 표준 인터페이스로 자리잡고 있습니다. WSGI 의 장점은 WSGI 표준을 지키는 미들웨어라면 종류를 가리지 않고 동작이 가능하다는 것입니다.

 

 Python Flask 에서는 Werkzeug 라는 미들웨어를 사용하고 있으며, 이는 Python code 와 웹 서버간 대화를 할 수 있게 만들어주는 미들웨어입니다.

 

 

 

 

 

2. Flask 소개

 

 

Flask 는 파이썬에서 웹 프로그래밍을 쉽게 하기 위해서 만들어진 Framework 중 하나입니다.

 

다른 Framework 는 대표적으로 Django(장고)가 있습니다.

 

 

  • Django 는 풀스택 Framework 입니다.

대부분의 기능들을 Framework 에서 모두 제공하고 있어 큰 규모의 Application 개발에 용이할 수 있습니다.

개발할 때 구현하기 귀찮은 부분들을 제공해준다는 점에서 장점이 있습니다.

 

 

 

 

 

  • Flask 는 마이크로 Framework 입니다.

모든 기능들을 포함하지 않고 Python 웹 프로그래밍에 대한 핵심적인 부분만을 포함하고 있습니다. 굉장히 단순하고 가벼운 web Framework 입니다.

 다양한 기능들이 없는 대신, 직접 기능들을 구현하며 상황에 맞는 Application Logic을 구현할 수 있습니다.

Django로 처리하기 어려운 로직들을 Flask 에서는 다양한 Module 을 활용하여 해결이 가능합니다. 그만큼 자유도가 높은 web Framework 입니다.

 

Flask은 WSGI 규약을 기본으로하고 werkzeug 미들웨어를 사용하며, 템플릿(Html) 출력을 위해 Jinja2 라는 라이브러리를 함께 가지고 있습니다.

 

Jinja2에서는 템플릿 상속 기능도 제공하기 때문에 굉장히 편리하게 템플릿을 작성할 수 있습니다.

 

 

 

언어 Framework 모듈 강제성(자유도) 기능 제공
Django 풀스택 Framework 특정 모듈이 강제
Flask 마이크로 Framework 모듈 선택 폭이 넓음

 

반응형