728x90
반응형

Django 프로젝트의 settings.py에 다음을 추가한다.

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

그리고 다음 명령어를 이용하여 Django에 내장된 static 파일을 지정한 디렉토리에 저장한다.

$ python manage.py collectstatic

gunicorn 관련된 설정은 공식 문서와 예제 파일을 참고하여 작성한다. 그리고 다음과 같은 명령어로 실행한다.

$ gunicorn -c gunicorn.conf.py {Django 프로젝트 이름}.wsgi &

nginx.conf에 다음과 같이 추가한다.

http {
 include /etc/nginx/mime.types;
 default_type application/octet-stream;

 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"';

 access_log /var/log/nginx/access.log main;

 sendfile on;
 #tcp_nopush on;

 #keepalive_timeout 0;
 keepalive_timeout 65;

 #gzip on;

 # Load modular configuration files from the /etc/nginx/conf.d directory.
 # See http://nginx.org/en/docs/ngx_core_module.html#include
 # for more information.
 include /etc/nginx/conf.d/*.conf;

 index index.html index.htm;

 upstream app_server {
     server 127.0.0.1:8000;
     # For a TCP configuration:
     # server 192.168.0.7:8000 fail_timeout=0;
 }

 server {
     listen 80;
     server_name localhost;
     root /usr/share/nginx/html;

     #charset koi8-r;

     #access_log /var/log/nginx/host.access.log main;

     location /static {
         alias /path/static; # static 파일 위치
     }

     location / {
         # root html;
         # index index.html index.htm;
         try_files $uri @proxy_to_app;
     }

     location @proxy_to_app {
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_redirect off;
         proxy_pass http://app_server;
     }
}

위와 같이 수정한 설정 파일을 다시 읽는다.

$ sudo /etc/init.d/nginx reload

혹은

$ service nginx reload

static 파일을 제대로 불어오지 못하는 경우 nginx.conf에서 다음을 수정하면 된다.

# user nginx
# 기본으로 설정된 user가 nginx인 경우 root로 변경하거나
# static 파일 접근 권한이 있는 user로 변경한다.
user root

 

반응형

'Python' 카테고리의 다른 글

[Python] GeoDjango  (0) 2020.01.25
[Python] Django logging  (0) 2020.01.25
[Python] nginx + Django  (0) 2020.01.25
728x90
반응형

SQLite는 사용되는 응용 프로그램에 내장되는 놀라운 라이브러리이다. 독립적이고 파일 기반 데이터베이스로써 SQLite는 프로세스 기반 관계형 데이터베이스(서버)와 비교해봤을 때 제약이 덜하고 쉽게 정렬된 모든 데이터를 다루는 도구를 제공한다.

응용 프로그램에서 SQLite를 사용할 때, 실용적으로 동작하고 인터페이스(예: 포트, 소켓)를 통한 통신을 하는 대신 데이터를 갖고 있는 파일(즉 SQLite 데이터베이스)을 만들어 직접 호출한다. 이 라이브러리의 기본 기술 덕분에 SQLite는 매우 빠르고 , 효율적이고, 또한 강력하다.

SQLite에서 지원하는 데이터 타입

  • NULL: NULL 값

  • INTEGER: 부호가 있는 정수, 값의 크기에 따라 1, 2, 3, 4, 6, 8 바이트 저장

  • REAL: 부동소수점, 8 바이트 IEEE 부동소수점을 저장

  • TEXT: 문자열, 데이터베이스 인코딩에 따라 문자열 저장(UTF-8, UTF-16BE or UTF-16LE)

  • BLOB: 이진 데이터, 들어온 데이터 그대로 저장

Note: SQLite의 데이터 타입에 대해 더 알고 싶다면 공식 문서를 확인

SQLite의 장점

  • 파일 기반: 이동이 용이하게 만들어진 파일 하나가 전체 데이터베이스이다.

  • 표준을 따름: 간단한 DB 구현체이지만 SQLite는 SQL을 사용한다. 몇가지 기능(RIGHT OUTER JOIN, FOR EACH STATEMENT)이 생략되어 있지만 다른 기능들은 내장되어 있다.

  • 개발과 테스트에 적합:여러 프로그램의 개발 단계에서 다수의 사람들을 위한 동시성을 측정할 수 있는 해결책을 필요로 한다. 풍부한 기능이 있는 SQLite는 단일 파일과 C 기반의 라이브러리로 동작의 단순함으로 개발에 필요한 것보다 더 많이 제공할 수 있다.

SQLite의 단점

  • 사용자 관리가 없음: 고급 데이터베이스는 사용자 즉, 데이터베이스와 테이블에 접근 권한을 설정한 연결 관리 기능을 제공한다. SQLite의 목적과 특성(높은 레벨의 다수 클라이언트 동시 접속이 없음)으로 이 기능은 존재하지 않는다.

  • 추가 성능을 위한 개조 가능이 어려움: 다시 설계되어서 SQLite는 추가 성능을 얻기 위해 손보는 게 불가능하다. 라이브러리는 튜닝하거나 사용하는데 편리하다. 복잡하지 않기 때문에 기술적으로 성능을 올리는 것이 불가능하다.

SQLite를 사용하는 때

  • 임베디드 응용 프로그램: 확장하지 않으며 이동이 용이한 모든 응용 프로그램. 예를 들면, 단일 사용자 로컬 응용 프로그램, 모바일 프로그램 또는 게임.

  • 디스크 접근 대체: SQL을 사용함으로써 나오는 추가 기능과 단순함 때문에 디스크에 파일을 읽고 쓰는 것이 필요한 대부분의 응용 프로그램은 SQLite로 전환하여 이득을 볼 수 있다.

  • 테스트: 응용 프로그램의 많은 부분에서 비즈니스 로직(즉, 응용 프로그램의 주 용도: 기능)을 테스트하기 위한 추가 프로세스를 사용하는 것은 과잉이다.

SQLite를 사용하면 안되는 때

  • 다수 사용자 응용프로그램: 다수 클라이언트가 접속하고 같은 데이터베이스를 사용하는 응용 프로그램인 경우 완벽한 기능을 갖춘 RDBM(예: MySQL)을 선택하는 것이 좋다.

  • 높은 쓰기 볼륨을 원하는 응용 프로그램: SQLite의 제약 사항 중 하나는 쓰기 기능이다. 이 DBMS는 주어진 시간 동안 오직 하나의 쓰기만을 허락한다. 이런 이유로 제한된 처리량만 가능하다.

 

참고 문헌

  1. https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems

반응형

'DB' 카테고리의 다른 글

[DB] Postgresql + PostGIS  (0) 2020.01.25
728x90
반응형

Postgresql에서 위치 정보를 저장하기 위해 PostGIS를 이용한다.

 

postgis를 사용하기 위해서 geos, proj.4를 먼저 설치한다.


geos는 Geometry Engine - Open Source의 약어로 좌표 계산에 사용되며, proj.4는 좌표 변환에 사용된다.

$ wget http://download.osgeo.org/geos/geos-3.3.6.tar.bz2
$ tar xjf geos-3.3.6.tar.bz2
$ cd geos-3.3.6
$ ./configure
$ make
$ sudo make install

$ wget http://download.osgeo.org/proj/proj-4.8.0.tar.gz
$ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
$ tar xzf proj-4.8.0.tar.gz
$ cd proj-4.8.0/nad
$ unzip ../../proj-datumgrid-1.5.zip
$ cd ..
$ ./configure
$ make
$ sudo make install

$ wget http://download.osgeo.org/postgis/source/postgis-2.0.2.tar.gz
$ tar xzf postgis-2.0.2.tar.gz
$ cd postgis-2.0.2
$ ./configure --with-geosconfig=/usr/local/bin/geos-config --without-raster
$ make
$ sudo make install

잘 설치가 됐는지 확인한다. SRID 값으로 4326은 WGS(World Geodetic System) 84를 의미한다.

 

전세계 지구 좌표를 표현하는 방식 중에 하나로 이를 이용하여 거리를 계산할 수 있다.

CREATE TABLE test_location (id SERIAL, name VARCHAR(24), geom geometry('POINT', 4326));

INSERT INTO test_location (name,geom) VALUES
('창경궁', ST_GeomFromText('POINT(126.99470043182373 37.58079163827203)', 4326));

SELECT id, name, ST_AsText(geom) from test_location;

 

반응형

'DB' 카테고리의 다른 글

[DB] SQLite  (0) 2020.01.25
728x90
반응형

Django와 nginx를 연동하기 위해서 flup 라이브러리를 설치한다.

$ pip install flup

Django 실행은 다음과 같다.

$ python manage.py runfcgi method=prefork pidfile=PID_FILE host=127.0.0.1 port=8000

nginx.conf 에 다음과 같이 추가한다.

server {
    listen 80
    server_name localhost;

    location /static/ { #static url
        autoindex on;
        root /static/; #static 파일들이 저장된 디렉토리
    }
    location / { #사용할 url
        #root /usr/share/nginx/html;
        #index index.html index.htm;
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_pass_header Authorization;
        fastcgi_intercept_errors off;
    }
}

static url을 설정할 때 /static/으로 해서 파일을 불러오지 못할 경우 앞이나 뒤의 /를 제거하면 된다.

 

위와 같이 수정한 설정 파일을 다시 읽는다.

$ sudo /etc/init.d/nginx reload

 

반응형

'Python' 카테고리의 다른 글

[Python] GeoDjango  (0) 2020.01.25
[Python] Django logging  (0) 2020.01.25
[Python] nginx + gunicorn + Django  (0) 2020.01.25

+ Recent posts