이번에도 나중에 다시 쓰려고 정리해두려고 합니다. 


1. Django 1.8.2 기준입니다. 



2. Django static 설정은 settings.py에 작성합니다.


    참고  웹 페이지) https://docs.djangoproject.com/en/1.8/ref/settings/


    # STATIC_ROOT는 python manage collectstatic 명령어를 통해서 수집되는 static 파일들이 위치하는 곳입니다. 

    # 값으로 경로를 작성해주시면 됩니다. 

    STATIC_ROOT  = "/path/..."

   

    # STATIC_URL은 static 파일에 접근하기 위한 url을 작성하는 곳입니다.

    # 값으로 url을 작성하면 됩니다. 공식 문서에 나와있는 예시 값은 "/static/" 입니다.

    STATIC_URL = "/static/"


    # STATICFILES_DIRS는 리스트 또는 튜플을 값으로 가지는 설정으로 static 파일들의 위치를 값으로 입력합니다.

    # 대부분의 예제에서 튜플로 값을 주고 있네요. 저도 계속 그렇게 사용해왔구요. 아무튼 static 파일들의 위치를 작성해줍니다.

    # collectstatic 명령어가 여기에 작성된 위치를 돌면서 static 파일을 수집합니다.  

    # 하나의 폴더만 입력하더라도 만드시 끝에 ,(콤마)를 줘야 합니다.

    STATICFILES_DIRS("/var/www/html/test/static/path",  )


    # STATICFILES_STORAGE는 S3와 같은 곳에 static 파일을 위치시키는 것으로 보입니다.

    # 자세한 내용은 https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/#staticfiles-from-cdn 


    # STATICFILES_FINDERS는 여러 방법으로 static 파일을 찾아주는 것으로 보입니다.



3. 개발 과정에서 STATICFILES_DIRS + STATIC_URL


     Django 프로젝트 하위에 있는 앱이나 여러 폴더 중 STATIC 파일들이 위치하는 PATH를

     STATICFILES_DIRS에 작성해줍니다.

     

     그럼 template나 view 등에서 쉽게 접근이 가능합니다.  

     예를 들어 아래와 같은 구조에서 template 파일이 static 파일을 접근하는 소스를 간단하게 살펴보겠습니다. 


    ../statictest/
                     ┣ manage.py
                     ┗ statictest/
                     ┃                ┣ __init__.py
                     ┃                ┣ settings.py
                     ┃                ┣ urls.py
                     ┃                ┗ wsgi.py
                     ┃                

                     ┗testapp/                

                                        ┣ static (folder)  -- a.png

                                        ┣ template (folder) -- statictest.html

                                         .....

                     ┗testapp2/                

                                        ┣ static (folder) -- b.png

                                         .....


     testapp과 testapp2에 각각 static 폴더가 위치하고 그곳에 a.png와 b.png가 위치한다고 하겠습니다.

     settings.py 안에 STATICFILES_DIRS과 STATIC_URL에는 다음과 같이 작성했습니다.


     STATICFILES_DIRS = ("/var/www/html/statictest/testapp/static/","/var/www/html/statictest/testapp2/static/" , )

     STATIC_URL="/static/'

 

     그럼 testapp에 있는 template/statictest.html 에서 a.png와 b.png를 사용하기 위해서는 다음과 같은 소스가 필요합니다.

     요 포스팅에서는 urls.py, views.py에 대해서는 생략하도록 하겠습니다. 

     

     



4. 배포할 때 STATIC_ROOT 사용하기


  배포할 때는 DEBUG =  False로 해서 배포하실 텐데요.

  STATIC_ROOT에 모든 STATIC 파일을 모아두고 이를 활용하도록 웹 서버 설정을 변경합니다. 


  일단 settings.py의 설정을 아래와 같이 변경합니다. 


    ......

    DEBUG = False

    ......

    STATIC_URL = '/static/'

    TEMPLATE_DIRS = ("/var/www/html/statictest/testapp/templates",)

    STATICFILES_DIRS = ("/var/www/html/statictest/testapp/static/","/var/www/html/statictest/testapp2/static/" , )

    STATIC_ROOT = os.path.join(BASE_DIR, "stroot")

    ......

   다음으로 manage.py collectstatic 명령어를 통해서 static 파일을 stroot 폴더로 모아줍니다. 

   


    위에서 작성한 stroot 폴더의 절대 경로는 /var/www/html/statictest/stroot 입니다. 
    아래와 같이 apache 웹 서버 설정을 추가합니다. 

   


    아파치를 재시작 후 접속!! 하면 끝입니다. 

    얼마나 효과가 있는지는 정확하게 측정하는 방법을 모르겠습니다. 

    jmeter로 돌려보는 것도 하나의 방법이겠지만 다음 기회에 시간이 허락하면 도전해봐야겠어요 ^^;;


+ Recent posts