728x90

지금 까지 파이썬을 이용해서 Web Application Server(WAS)를 만들었다.

이런 우리가 짠 파이썬 코드는 기본적으로 하나의 요청밖에 처리하지 못할 뿐 더러 매우 느리다.

즉 서버를 구동해서 돌리는 것은 실제로는 서버를 돌린다는 느낌보다는 디버깅을 하는 용도에 가깝다.

따라서 또다른 웹서버를 사용해주어야한다.

본 예제에서는 apache와 리눅스(ubuntu)를 사용할 것이며 아파치의 설치는 [APM]PHP사용하기 - apache설치(1)를 참조하라.

맥과 리눅스는 기본적으로 아파치가 설치되어 있으므로 따로 설치할 필요는 없다.



먼저 호스트를 추가해준다.

필자의 경우 flaskapp.com을 추가하였다. 여러분은 원하는 이름을 사용하라.

추가해 주지 않아도 무관하긴 하지만 쉬운 사용을 위해서 추가해준다.

호스트 파일의 위치는 아래와 같다.


윈도우 위치

c:\windows\system32\drivers\etc\hosts


맥과 리눅스 위치

/etc/hosts


그럼 이제 가볍게 돌아가는 flask서버를 만들어보자.



플라스크 서버에 위치시킬 파일들은 위와 같다.

최소한의 필요한 파일들이며 패키지화 시키는 __init__.py와 wsgi를 작동시키는 wsgi파일,

그리고 static폴더와 template폴더가 존재한다.

일단 wsgi설명을 좀있다가 서버부터 만들어 보자.



서버야 매우 간단한 플라스크 코드이다.

테스트를 위한 것이므로 거창한 코드를 짤 필요는 없다.


import sys
sys.path.insert(0,"/var/www/")
from FLASKAPPS import app as application

이제 주요히 볼것은 wsgi파일이다.

이 파일은 wsgi를 동작시키는 것이다. 문법은 보다시피 당연히 파이썬 코드이다.

보면 이해하겠지만 system path에 /var/www를 추가해준다.

그리고 현재 모듈을 import시켜준다. 이름은 반드시 application이 되야한다. 그게 wsgi규약이다.


그럼 과연 wsgi가 무엇일까? 일단 그것부터 알아보자.

일단 wsgi는 Web Server Gateway Interface의 줄임말이다.

cgi같이 서버와 어플리케이션이 통신하는 방식중에 하나이다.

wsgi는 미들웨어로서 여러분이 짠 파이썬 코드(WAS)와 아파치(Web Server)사이에서 위치한다.

즉 wsgi는 WAS와 WS사이에서 중계를 해주는 역활을 하는 것이다.

이 wsgi는 설치되어 있지 않다. 따라서 여러분이 설치를 해줘야한다.



sudo apt-get install libapache2-mod-wsgi


모듈 설치가 종료되고 나서는 아파치에서 wsgi를 사용할 수있게 enable시켜야한다.


sudo a2enmod wsgi 


위의 과정을 거치면 wsgi가 설치되고 wsgi의 apache모듈이 활성화 되어서 연동이 완료된다.



/etc/apache2/sites-available에는 우리가 사용할 host설정이 담겨져 있다.

우리는 flaskapp.com이라는 호스트를 설정할 것이기에 flaskapp.com.conf라는 파일을 새로만들고 수정한다.

이 때 중요한건 반드시 host의 이름뒤에 .conf를 붙혀줘야한다. 만약 그렇지 않다면 서로 매칭을 찾지 못해서 에러가 뜬다.

만약 localhost를 그대로 쓰고싶다면 000-default.conf를 건드려 주면된다.




해당 파일을 위와같이 써준다.

<VirtualHost *:80>
ServerAdmin jiharu@flaskapp.com
ServerName www.flaskapp.com
ServerAlias flaskapp.com
ErrorLog /var/www/FLASKAPPS/logs/error.log
CustomLog /var/www/FLASKAPPS/logs/access.log combined

WSGIDaemonProcess helloworldapp user=www-data group=www-data threads=5
WSGIProcessGroup helloworldapp
WSGIScriptAlias / /var/www/FLASKAPPS/helloworldapp.wsgi
Alias /static/ /var/www/FLASKAPPS/static/
<Directory /var/www/FLASKAPPS/static/>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

해당 속성에 대해서 하나씩 보도록하자.


VirtualHost *:80 => 호스트를 지정하며 포트는 80포트를 사용한다. 포트가 겹쳐도 상관없다. 어짜피 호스트가 다르기 때문이다.

ServerAdmin => 서버의 주인을 나타낸다. 사실 없어도 무방하므로 크게 중요하지 않다.

ServerName => 서버의 주소를 나타낸다. 우리는 이 주소를 통해서 접근할 수있다.

ServerAlias => 위의 주소를 그대로 써도 되지만 좀더 축약된 형태로 접근할 별명을 정할 수 있다.

ErrorLog => 서버 접근시 일어는 에러 메시지를 기록하는 파일을 정한다. 이 속성을 정했다면 반드시 해당폴더가 존재해야한다.

CustomLog => 서버 기록을 기록하는 파일을 정한다. 이 속성을 정했다면 반드시 해당폴더가 존재해야한다.


WSGIDaemonProcess => wsgi를 데몬으로 실행시킬건데 그 때의 프로세스 이름을 정한다. 아무거나 해도 무방.

WSGIProcessGroup => wsgi프로세스 그룹의 이름을 정한다. 아무거나 해도 무방.

WSGIScriptAlias => wsgi를 실행시킬 스크립트의 위치를 정한다. 우리가 만든 파일의 위치를 지정해 준다.

Alias => 특정 파일의 별명을 정한다. 보통 static을 해둬야하는데 그 이유는 WAS가 static에 접근해야하기 때문이다.


이제 위와 같이 작성을 하고 나면 에러 로그 폴더가 필요하므로 추가로 만들어준다.



sudo mkdir -p /var/www/FLASKAPPS/logs


만약 여러분이 다른 이름으로 지정했다면 위와 다르게 써야한다.



이제 여러분이 만든 설정파일을 아파치에 등록시켜야한다. 위와같이 a2ensite를 사용해서 등록하자.


sudo a2ensite flaskapp.com.conf


이제 아파치를 재시작 시킨다.


sudo /etc/init.d/apache2 restart


이제 설정이 변경되서 다시 시작된다. 아래와 같이 접근해보자.



w3m은 터미널에서 사용한 웹 브라우저 중 하나이다.

설치하는 방법은 [Linux]CUI(터미널)환경의 텍스트기반 웹브라우저를 참고하라.

이제 실행시켜보자.



제대로 동작함을 확인할 수 있다.

그러나 이 방식은 현재 피씨에만 볼 수있다.

왜냐하면 해당 호스트는 가상호스트이기 때문이다.

외부에서는 localhost로 접근하기 때문에 우리가 만든건 외부에서는 볼 수 없다.

만약 외부에서 보고싶으면 방법이 두가지가 있다.

하나는 localhost로 위의 솔루션을 다시 짜는것, 두번째는 localhost를 못쓰게하는 것이다.

localhost를 못쓰게 하는 방법은 솔직히 조금 위험하다. 따라서 우리는 포트를 살짝 바꿔보도록하자.



위의 000-default.conf는 localhost의 설정을 담고 있다.



맨위의 포트만 81번으로 살짝 바꾸어주자.



이제 외부에서도 접근하는 것을 확인할 수 있다.


'Programming > Python-Flask' 카테고리의 다른 글

[Flask-02]html페이지 표시하기  (1) 2017.08.07
[Flask-01]간단한 서버 만들기  (0) 2017.08.07

+ Recent posts