ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] 프로젝트 구조 잡기
    Develop/Web & Framework 2021. 10. 17. 19:41

    장고는 하나의 프로젝트 내에 여러 개의 app이 존재하는 구조이다.

    python manage.py startapp [appname] 명령으로 app을 생성한 뒤,  settings의 INSTALLED_APPS에 생성된 app을 등록해줌으로서 손쉽게 관리할 수 있다.

     

     

    좌측의 이미지는 app을 생성하였을 때의 기본구조이다.

    root 디렉토리에 manage.py가 위치하고, 
    app내에 각각 model, view, test, admin, migration 파일들이 위치하고 있다.

     

     

    최근 새로운 사이드 프로젝트를 시작할 때도 해당 구조를 그대로 적용했었는데,
    프로젝트 구조가 정리되지 않은 느낌이 있다는 피드백을 듣고 정말 고민을 많이 했었다.

    url과 setting을 개발용/배포용으로 분리하는 것 의외에 프로젝트 구조를 유연하게 설정할 수 있는 방법이 뭐가 있을까?
    장고는 프로젝트를 app단위로 나누어서 관리하는데, app을 더 쪼개야 하는 건가? 아니면 합쳐야 하는걸까?

    처음에는

    "흠, root 디렉토리에 생성되는 app 디렉토리들이 많아지면서
    프로젝트 구조가 난잡하다라는 생각이 종종 들었었으니...  
    아! api를 버전별로 관리할 수 있도록
    app들을 전부 하나의 폴더에 넣어서 관리하면 조금 단순해지겠다!"

    라는 생각으로 api 폴더 안에 app을 전부 우겨넣었다.
    정말 근거도 없고, 기준도 없는 아주 무식한 구조 리팩토링 아이디어였다.

    그리고 추가로 받은 피드백..

    허허허...  app단의 코드들과 api단의 코드파일을 분리해서 관리할 수 있는 방법이 있을 거라고는 생각도 못했다..

     

     

     

    최종적으로는, 

    app/* 내에 model, migration, test 파일을
    api/* 내에는 app의 view, serializer, service, url 파일들, 
    즉 로직과 관련된 파일들을 넣어서 분리하였다.

    또한 infra 관리를 위해 필요한 config 파일들을 관리하는 별도의 directory(.ci-cd)를 생성하였고,
    util에 관련된 파일들은 별도의 directory로 분리하여
    settings 폴더를 조금 라이트하게 가져가도록 설정하였다.


    비동기로 수행하는 요청들(닉네임 중복확인, 코드 유효성 검증)의 경우,
    별도의 app을 생성하지 않고,
    api 내에 verify 디렉토리만을 생성하여 api를 유연하게 확장할 수 있었다.

    후에 api의 version을 확장하고자 할 때, 
    root dir에서 version별로 directory를 생성하여 api를 관리할 수 있어
    확장성 측면에서도 꽤 괜찮은 구조로 리팩토링된듯 하다.

    댓글

Designed by Tistory.