본문 바로가기

코딩

고정자원 관리 < python django

728x90
반응형

고정자원 관리 django static resource

`staticfiles app` 개념

웹서비스가 만들어지기 위한 자원이 필요하다. 자원은 동적자원, 고정자원으로 나눌 수 있으며, 동적자원은 어플리케이션에서 처리하는 데이터 및 콘텐츠를 말하여 백앤드 시스템에서 다루는 대부분의 요소이다.

 

동적자원 이외에 고정자원이라 하면 CSS, Javascript, Images 등을 말하며, 환경적으로 다른 자원이 필요한데 생각없이 관리하면 그 부담이 점점커져 난관으로 부딪치게 된다.

 

개발, 테스트, 운영 등 각각의 환경에서 동일한 자원도 쓰지만 다른자원도 사용한다. 프로젝트를 조합해서 연동하는 아키텍처에서는 또 각각의 프로젝트가 동일한 자원도 쓰지만 각각의 프로젝트에서 고유하게 사용하는 자원의 관리가 필요하다. 한마디로 말하자면 다양한 경우 수의 자원 관리가 필요하다는 이야기이다.

 

이러한 다양성의 문제를 안고가는 웹서비스는 프로젝트들이 정교하고 복잡하게 연결되어 있을수록 코딩을 위한 준비작업으로 많은 시간이 소비된다. 반대로 말하면, 효율적인 자원관리 기반이 확보될수록 코딩 생산성이 높아진다는 뜻이다.

 

이 문제 해결을 위해 django 프레임워크는 고정자원을 효율적으로 관리해 주는 기능을 제공한다.

django 를 기동하면 `staticfiles` 라는 어플리케이션이 작동해 고정자원을 효율적으로 관리할 수 있게 해준다.

https://docs.djangoproject.com/en/4.2/howto/static-files/
Websites generally need to serve additional files such as images, JavaScript, or CSS.
In Django, we refer to these files as “static files”.
Django provides django.contrib.staticfiles to help you manage them.

#! settings.py
~
INSTALLED_APPS = [
	~
    'django.contrib.staticfiles',
]
~
#! End of file

 

`staticfiles` 설정하기 (개발환경) 

`STATIC_URL`, `STATICFILES_DIRS`

설정하기 위한 두 개의 파라미터가 있다. `STATIC_URL` 과 `STATICFILES_DIRS`

`STATIC_URL` 이 파라미터를 조정해 고정자원의 폴더를 지정하고, 코딩시 복잡한 폴더 지정을 쉽게할 수 있다.

프로젝트의 `settings.py` 파일 내 이 파라미터의 폴더를 지정하고, `*.html` 코딩 파일에서 `load` 해서 사용할 수 있다.

#! settings.py
DEBUG = True
~
STATIC_URL = "static/"
STATICFILES_DIRS = [
    BASE_DIR / "static",
    "/var/www/`project name`/static/",
]
~
#! End of file
####
#! index.html
{% load static %}
~
<img src="{% static 'my_app/example.jpg' %}" alt="My image">
~
#! End of file

상기 설정은 개발환경("DEBUG = True") 에서 사용한다. 이 설정은 고정자원을 django 에서 처리해 서비스 처리 속도가 상대적으로 떨어진다.

 

`staticfiles` 설정하기 (운영환경)

`STATIC_ROOT`

운영환경에서는 성능 향상을 위해 고정자원을 `웹서버; Nginx 등` 에서 바로 처리할 수 있도록 한다. 여기에 사용하는 파라미터가 `STATIC_ROOT` 이다. `STATIC_ROOT` 의 값으로 폴더를 지정하고, `django manage.py collectstatic` 명령어를 이용해 서비스에 필요한 고정자원을 한 곳에 모아둘 수 있다.

고정자원을 모아두는 장소는 로컬 디스크와 외부 파일서버(CDN 등) 모두 가능하며, 인터넷 처리속도가 우수한 CDN 등을 사용해 처리 성능을 높일 수 있다.  

#! settings.py
DEBUG = True
~
STATIC_URL = "static/"
STATICFILES_DIRS = [
    BASE_DIR / "static",
    "c:\\_ahading\\djdevstatic\\",
]
STATIC_ROOT = ( "/var/www/country/static/" )
~
#! End of file

$ python manage.py collectstatic

 

배포; deployment

* 개발환경 : Windows 11, 운영환경 : Ubuntu 22.04,  운영혼경 웹서버 : Nginx 1,18

개발환경에서 개발된 코드는 git 을 이용해 운영환경으로 이관한다.

운영환경에서 명령어를 이용해 `/var/www/country/static/` 폴더에 고정자원을 모은다.

#! ubuntu 22.04
$ python manage.py collectstatic

nginx 설정을 통해 static 폴더 위치를 지정한다.

#! nginx_contry.conf

server {
    listen 443 ssl;
    server_name country.the.sys;
    
    ~ 생략 ~

    location / {
        proxy_pass http://unix:/home/cskang/ahading_data/country/.LOG/country.sock;
    }
    
    location /static {
        alias	/var/www/country/static;
}

 

디즈니+ 구독했다. 제일 처음 손덴게 `Agents of SHIELD` 이다. 편수가 많아 언제 다 볼지 모르겠다.

 

728x90
반응형